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