From f444a7cc16bb0bbfdac719b46b7e0950e6e78ce2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Thu, 29 Sep 2022 13:40:57 +0200 Subject: [PATCH] Revert "[clang][Interp] Handle enums" This reverts commit c090295916a921e809184f589c6830475e293b8b. One of the test cases fails. Revert this until I know a way to make it work reliably. --- clang/lib/AST/Interp/ByteCodeExprGen.cpp | 5 --- clang/test/AST/Interp/enums.cpp | 57 -------------------------------- 2 files changed, 62 deletions(-) delete mode 100644 clang/test/AST/Interp/enums.cpp diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp index 9264357..5974678 100644 --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -861,11 +861,6 @@ bool ByteCodeExprGen::VisitDeclRefExpr(const DeclRefExpr *E) { FoundDecl = true; } - } else if (const auto *ECD = dyn_cast(Decl)) { - PrimType T = *classify(ECD->getType()); - - return this->emitConst(T, getIntWidth(ECD->getType()), ECD->getInitVal(), - E); } // References are implemented using pointers, so when we get here, diff --git a/clang/test/AST/Interp/enums.cpp b/clang/test/AST/Interp/enums.cpp deleted file mode 100644 index adb09e51..0000000 --- a/clang/test/AST/Interp/enums.cpp +++ /dev/null @@ -1,57 +0,0 @@ -// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify %s -// RUN: %clang_cc1 -verify=ref %s - -enum class EC : short { - A, B, C -}; -static_assert(static_cast(EC::A) == 0, ""); -static_assert(static_cast(EC::B) == 1, ""); -static_assert(static_cast(EC::C) == 2, ""); -static_assert(sizeof(EC) == sizeof(short), ""); - -constexpr EC ec = EC::C; -static_assert(static_cast(ec) == 2, ""); - -constexpr int N = 12; -constexpr int M = 2; - -enum CE { - ONE = -1, - TWO = 2, - THREE, - FOUR = 4, - FIVE = N + M, - SIX = FIVE + 2, - MAX = __INT_MAX__ * 2U + 1U -}; -static_assert(ONE == -1, ""); -static_assert(THREE == 3, ""); -static_assert(FIVE == 14, ""); -static_assert(SIX == 16, ""); - -constexpr EC testEnums() { - EC e = EC::C; - - e = EC::B; - - EC::B = e; // expected-error{{expression is not assignable}} \ - // ref-error{{expression is not assignable}} - - return e; -} - -constexpr EC getB() { - EC e = EC::C; - e = EC::B; - return e; -} - - -static_assert(getB() == EC::B, ""); - - -enum E { // expected-warning{{enumeration values exceed range of largest integer}} \ - // ref-warning{{enumeration values exceed range of largest integer}} - E1 = -__LONG_MAX__ -1L, - E2 = __LONG_MAX__ *2UL+1UL -}; -- 2.7.4