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