brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 459cf3a Raw
56 lines · cpp
1// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify %s2// RUN: %clang_cc1 -verify=ref %s3 4enum class EC : short {5  A, B, C6};7static_assert(static_cast<int>(EC::A) == 0, "");8static_assert(static_cast<int>(EC::B) == 1, "");9static_assert(static_cast<int>(EC::C) == 2, "");10static_assert(sizeof(EC) == sizeof(short), "");11 12constexpr EC ec = EC::C;13static_assert(static_cast<int>(ec) == 2, "");14 15constexpr int N = 12;16constexpr int M = 2;17 18enum CE {19  ONE = -1,20  TWO = 2,21  THREE,22  FOUR = 4,23  FIVE = N + M,24  SIX = FIVE + 2,25  MAX = __INT_MAX__ * 2U + 1U26};27static_assert(ONE == -1, "");28static_assert(THREE == 3, "");29static_assert(FIVE == 14, "");30static_assert(SIX == 16, "");31 32constexpr EC testEnums() {33  EC e = EC::C;34 35  e = EC::B;36 37  EC::B = e; // expected-error{{expression is not assignable}} \38             // ref-error{{expression is not assignable}}39 40  return e;41}42 43constexpr EC getB() {44  EC e = EC::C;45  e = EC::B;46  return e;47}48 49 50static_assert(getB() == EC::B, "");51 52namespace B {53  enum E : bool { Zero, One };54  static_assert((int)(E)2 == 1, "");55} // namespace B56