hokein updated this revision to Diff 523868. hokein added a comment. add release note.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D150948/new/ https://reviews.llvm.org/D150948 Files: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaDecl.cpp clang/test/AST/ast-dump-recovery.c Index: clang/test/AST/ast-dump-recovery.c =================================================================== --- clang/test/AST/ast-dump-recovery.c +++ clang/test/AST/ast-dump-recovery.c @@ -98,3 +98,14 @@ // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' ext(undef_var); } + +// Verify no crash. +void test4() { + enum GH62446 { + // CHECK: RecoveryExpr {{.*}} '<dependent type>' contains-errors lvalue + // CHECK-NEXT: |-StringLiteral {{.*}} "a" + // CHECK-NEXT: `-IntegerLiteral {{.*}} 2 + invalid_enum_value = "a" * 2, + b, + }; +} Index: clang/lib/Sema/SemaDecl.cpp =================================================================== --- clang/lib/Sema/SemaDecl.cpp +++ clang/lib/Sema/SemaDecl.cpp @@ -19307,6 +19307,7 @@ if (!getLangOpts().CPlusPlus && !T.isNull()) Diag(IdLoc, diag::warn_enum_value_overflow); } else if (!getLangOpts().CPlusPlus && + !EltTy->isDependentType() && !isRepresentableIntegerValue(Context, EnumVal, EltTy)) { // Enforce C99 6.7.2.2p2 even when we compute the next value. Diag(IdLoc, diag::ext_enum_value_not_int) Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -406,6 +406,9 @@ when it had been instantiated from a partial template specialization with different template arguments on the containing class. This fixes: (`#60778 <https://github.com/llvm/llvm-project/issues/60778>`_). +- Fix a crash when an enum constant has a dependent-type recovery expression for + C. + (`#62446 <https://github.com/llvm/llvm-project/issues/62446>`_). Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Index: clang/test/AST/ast-dump-recovery.c =================================================================== --- clang/test/AST/ast-dump-recovery.c +++ clang/test/AST/ast-dump-recovery.c @@ -98,3 +98,14 @@ // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' ext(undef_var); } + +// Verify no crash. +void test4() { + enum GH62446 { + // CHECK: RecoveryExpr {{.*}} '<dependent type>' contains-errors lvalue + // CHECK-NEXT: |-StringLiteral {{.*}} "a" + // CHECK-NEXT: `-IntegerLiteral {{.*}} 2 + invalid_enum_value = "a" * 2, + b, + }; +} Index: clang/lib/Sema/SemaDecl.cpp =================================================================== --- clang/lib/Sema/SemaDecl.cpp +++ clang/lib/Sema/SemaDecl.cpp @@ -19307,6 +19307,7 @@ if (!getLangOpts().CPlusPlus && !T.isNull()) Diag(IdLoc, diag::warn_enum_value_overflow); } else if (!getLangOpts().CPlusPlus && + !EltTy->isDependentType() && !isRepresentableIntegerValue(Context, EnumVal, EltTy)) { // Enforce C99 6.7.2.2p2 even when we compute the next value. Diag(IdLoc, diag::ext_enum_value_not_int) Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -406,6 +406,9 @@ when it had been instantiated from a partial template specialization with different template arguments on the containing class. This fixes: (`#60778 <https://github.com/llvm/llvm-project/issues/60778>`_). +- Fix a crash when an enum constant has a dependent-type recovery expression for + C. + (`#62446 <https://github.com/llvm/llvm-project/issues/62446>`_). Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits