Home | History | Annotate | Download | only in Sema
      1 // RUN: %clang_cc1 %s -fsyntax-only -verify -Wduplicate-enum
      2 // RUN: %clang_cc1 %s -x c++ -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