1// RUN: %clang_cc1 %s -fsyntax-only -verify -Wduplicate-enum 2// RUN: %clang_cc1 %s -x c++ -fsyntax-only -verify -Wduplicate-enum 3enum A { 4 A1 = 0, // expected-note {{element A1 also has value 0}} 5 A2 = -1, 6 A3, // expected-warning {{element A3 has been implicitly assigned 0 which another element has been assigned}} 7 A4}; 8 9enum B { 10 B1 = -1, // expected-note {{element B1 also has value -1}} 11 B2, // expected-warning {{element B2 has been implicitly assigned 0 which another element has been assigned}} 12 B3, 13 B4 = -2, 14 B5, // expected-warning {{element B5 has been implicitly assigned -1 which another element has been assigned}} 15 B6 // expected-note {{element B6 also has value 0}} 16}; 17 18enum C { C1, C2 = -1, C3 }; // expected-warning{{element C1 has been implicitly assigned 0 which another element has been assigned}} \ 19 // expected-note {{element C3 also has value 0}} 20 21enum D { 22 D1, 23 D2, 24 D3, // expected-warning{{element D3 has been implicitly assigned 2 which another element has been assigned}} 25 D4 = D2, // no warning 26 D5 = 2 // expected-note {{element D5 also has value 2}} 27}; 28 29enum E { 30 E1, 31 E2 = E1, 32 E3 = E2 33}; 34 35enum F { 36 F1, 37 F2, 38 FCount, 39 FMax = FCount - 1 40}; 41 42enum G { 43 G1, 44 G2, 45 GMax = G2, 46 GCount = GMax + 1 47}; 48 49enum { 50 H1 = 0, 51 H2 = -1, 52 H3, 53 H4}; 54 55enum { 56 I1 = -1, 57 I2, 58 I3, 59 I4 = -2, 60 I5, 61 I6 62}; 63 64enum { J1, J2 = -1, J3 }; 65 66enum { 67 K1, 68 K2, 69 K3, 70 K4 = K2, 71 K5 = 2 72}; 73 74enum { 75 L1, 76 L2 = L1, 77 L3 = L2 78}; 79 80enum { 81 M1, 82 M2, 83 MCount, 84 MMax = MCount - 1 85}; 86 87enum { 88 N1, 89 N2, 90 NMax = N2, 91 NCount = NMax + 1 92}; 93 94// PR15693 95enum enum1 { 96 VALUE // expected-note{{previous definition is here}} 97}; 98 99enum enum2 { 100 VALUE // expected-error{{redefinition of enumerator 'VALUE'}} 101}; 102