xref: /aosp_15_r20/external/clang/test/Sema/warn-duplicate-enum.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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