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