| // RUN: %clang_cc1 %s -fsyntax-only -verify -Wduplicate-enum |
| // RUN: %clang_cc1 %s -x c++ -fsyntax-only -verify -Wduplicate-enum |
| enum A { |
| A1 = 0, // expected-note {{element A1 also has value 0}} |
| A2 = -1, |
| A3, // expected-warning {{element A3 has been implicitly assigned 0 which another element has been assigned}} |
| A4}; |
| |
| enum B { |
| B1 = -1, // expected-note {{element B1 also has value -1}} |
| B2, // expected-warning {{element B2 has been implicitly assigned 0 which another element has been assigned}} |
| B3, |
| B4 = -2, |
| B5, // expected-warning {{element B5 has been implicitly assigned -1 which another element has been assigned}} |
| B6 // expected-note {{element B6 also has value 0}} |
| }; |
| |
| enum C { C1, C2 = -1, C3 }; // expected-warning{{element C1 has been implicitly assigned 0 which another element has been assigned}} \ |
| // expected-note {{element C3 also has value 0}} |
| |
| enum D { |
| D1, |
| D2, |
| D3, // expected-warning{{element D3 has been implicitly assigned 2 which another element has been assigned}} |
| D4 = D2, // no warning |
| D5 = 2 // expected-note {{element D5 also has value 2}} |
| }; |
| |
| enum E { |
| E1, |
| E2 = E1, |
| E3 = E2 |
| }; |
| |
| enum F { |
| F1, |
| F2, |
| FCount, |
| FMax = FCount - 1 |
| }; |
| |
| enum G { |
| G1, |
| G2, |
| GMax = G2, |
| GCount = GMax + 1 |
| }; |
| |
| enum { |
| H1 = 0, |
| H2 = -1, |
| H3, |
| H4}; |
| |
| enum { |
| I1 = -1, |
| I2, |
| I3, |
| I4 = -2, |
| I5, |
| I6 |
| }; |
| |
| enum { J1, J2 = -1, J3 }; |
| |
| enum { |
| K1, |
| K2, |
| K3, |
| K4 = K2, |
| K5 = 2 |
| }; |
| |
| enum { |
| L1, |
| L2 = L1, |
| L3 = L2 |
| }; |
| |
| enum { |
| M1, |
| M2, |
| MCount, |
| MMax = MCount - 1 |
| }; |
| |
| enum { |
| N1, |
| N2, |
| NMax = N2, |
| NCount = NMax + 1 |
| }; |
| |
| // PR15693 |
| enum enum1 { |
| VALUE // expected-note{{previous definition is here}} |
| }; |
| |
| enum enum2 { |
| VALUE // expected-error{{redefinition of enumerator 'VALUE'}} |
| }; |