warn-duplicate-enum.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. enum B {
  9. B1 = -1, // expected-note {{element B1 also has value -1}}
  10. B2, // expected-warning {{element B2 has been implicitly assigned 0 which another element has been assigned}}
  11. B3,
  12. B4 = -2,
  13. B5, // expected-warning {{element B5 has been implicitly assigned -1 which another element has been assigned}}
  14. B6 // expected-note {{element B6 also has value 0}}
  15. };
  16. enum C { C1, C2 = -1, C3 }; // expected-warning{{element C1 has been implicitly assigned 0 which another element has been assigned}} \
  17. // expected-note {{element C3 also has value 0}}
  18. enum D {
  19. D1,
  20. D2,
  21. D3, // expected-warning{{element D3 has been implicitly assigned 2 which another element has been assigned}}
  22. D4 = D2, // no warning
  23. D5 = 2 // expected-note {{element D5 also has value 2}}
  24. };
  25. enum E {
  26. E1,
  27. E2 = E1,
  28. E3 = E2
  29. };
  30. enum F {
  31. F1,
  32. F2,
  33. FCount,
  34. FMax = FCount - 1
  35. };
  36. enum G {
  37. G1,
  38. G2,
  39. GMax = G2,
  40. GCount = GMax + 1
  41. };
  42. enum {
  43. H1 = 0,
  44. H2 = -1,
  45. H3,
  46. H4};
  47. enum {
  48. I1 = -1,
  49. I2,
  50. I3,
  51. I4 = -2,
  52. I5,
  53. I6
  54. };
  55. enum { J1, J2 = -1, J3 };
  56. enum {
  57. K1,
  58. K2,
  59. K3,
  60. K4 = K2,
  61. K5 = 2
  62. };
  63. enum {
  64. L1,
  65. L2 = L1,
  66. L3 = L2
  67. };
  68. enum {
  69. M1,
  70. M2,
  71. MCount,
  72. MMax = MCount - 1
  73. };
  74. enum {
  75. N1,
  76. N2,
  77. NMax = N2,
  78. NCount = NMax + 1
  79. };
  80. // PR15693
  81. enum enum1 {
  82. VALUE // expected-note{{previous definition is here}}
  83. };
  84. enum enum2 {
  85. VALUE // expected-error{{redefinition of enumerator 'VALUE'}}
  86. };