warn-duplicate-enum.c revision efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8
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};
93efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer
94efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer// PR15693
95efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramerenum enum1 {
96efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer  VALUE // expected-note{{previous definition is here}}
97efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer};
98efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer
99efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramerenum enum2 {
100efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer  VALUE // expected-error{{redefinition of enumerator 'VALUE'}}
101efac8da4cfa49799d5fdbc9d10b0e9f9a53ff6c8Benjamin Kramer};
102