This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG5880c835bdbe: [Sema] Avoid crash in CheckEnumConstant with contains-error expressions (authored by sammccall).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D108451/new/ https://reviews.llvm.org/D108451 Files: clang/lib/Sema/SemaDecl.cpp clang/test/SemaCXX/recovery-expr-type.cpp Index: clang/test/SemaCXX/recovery-expr-type.cpp =================================================================== --- clang/test/SemaCXX/recovery-expr-type.cpp +++ clang/test/SemaCXX/recovery-expr-type.cpp @@ -143,3 +143,11 @@ void crash1() { fun(); } void crash2() { constexpr int s = fun(); } } // namespace test12 + +namespace test13 { +enum Circular { // expected-note {{not complete until the closing '}'}} + Circular_A = Circular(1), // expected-error {{'test13::Circular' is an incomplete type}} +}; +// Enumerators can be evaluated (they evaluate as zero, but we don't care). +static_assert(Circular_A == 0 && Circular_A != 0, ""); // expected-error {{static_assert failed}} +} Index: clang/lib/Sema/SemaDecl.cpp =================================================================== --- clang/lib/Sema/SemaDecl.cpp +++ clang/lib/Sema/SemaDecl.cpp @@ -17813,7 +17813,8 @@ Val = DefaultLvalueConversion(Val).get(); if (Val) { - if (Enum->isDependentType() || Val->isTypeDependent()) + if (Enum->isDependentType() || Val->isTypeDependent() || + Val->containsErrors()) EltTy = Context.DependentTy; else { // FIXME: We don't allow folding in C++11 mode for an enum with a fixed
Index: clang/test/SemaCXX/recovery-expr-type.cpp =================================================================== --- clang/test/SemaCXX/recovery-expr-type.cpp +++ clang/test/SemaCXX/recovery-expr-type.cpp @@ -143,3 +143,11 @@ void crash1() { fun(); } void crash2() { constexpr int s = fun(); } } // namespace test12 + +namespace test13 { +enum Circular { // expected-note {{not complete until the closing '}'}} + Circular_A = Circular(1), // expected-error {{'test13::Circular' is an incomplete type}} +}; +// Enumerators can be evaluated (they evaluate as zero, but we don't care). +static_assert(Circular_A == 0 && Circular_A != 0, ""); // expected-error {{static_assert failed}} +} Index: clang/lib/Sema/SemaDecl.cpp =================================================================== --- clang/lib/Sema/SemaDecl.cpp +++ clang/lib/Sema/SemaDecl.cpp @@ -17813,7 +17813,8 @@ Val = DefaultLvalueConversion(Val).get(); if (Val) { - if (Enum->isDependentType() || Val->isTypeDependent()) + if (Enum->isDependentType() || Val->isTypeDependent() || + Val->containsErrors()) EltTy = Context.DependentTy; else { // FIXME: We don't allow folding in C++11 mode for an enum with a fixed
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits