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