Author: Younan Zhang Date: 2023-06-26T09:35:12+08:00 New Revision: 76d72a715038ae3bce711ddc372e7e273a5c2b6b
URL: https://github.com/llvm/llvm-project/commit/76d72a715038ae3bce711ddc372e7e273a5c2b6b DIFF: https://github.com/llvm/llvm-project/commit/76d72a715038ae3bce711ddc372e7e273a5c2b6b.diff LOG: [clang] Fix a crash on invalid destructor This is a follow-up patch to D126194 in order to fix https://github.com/llvm/llvm-project/issues/63503. Reviewed By: shafik Differential Revision: https://reviews.llvm.org/D153724 Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaDeclCXX.cpp clang/test/SemaCXX/virtuals.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 43f80bddce3ff..13c587228bb1e 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -471,7 +471,7 @@ Bug Fixes in This Version - Fix crash when redefining a variable with an invalid type again with an invalid type. (`#62447 <https://github.com/llvm/llvm-project/issues/62447>`_) - Fix a stack overflow issue when evaluating ``consteval`` default arguments. - (`#60082` <https://github.com/llvm/llvm-project/issues/60082>`_) + (`#60082 <https://github.com/llvm/llvm-project/issues/60082>`_) - Fix the assertion hit when generating code for global variable initializer of _BitInt(1) type. (`#62207 <https://github.com/llvm/llvm-project/issues/62207>`_) @@ -523,21 +523,23 @@ Bug Fixes in This Version (`#50534 <https://github.com/llvm/llvm-project/issues/50534>`_). - CallExpr built for C error-recovery now is always type-dependent. Fixes a crash when we encounter a unresolved TypoExpr during diagnostic emission. - (`#50244 <https://github.com/llvm/llvm-project/issues/50244>_`). + (`#50244 <https://github.com/llvm/llvm-project/issues/50244>`_). - Apply ``-fmacro-prefix-map`` to anonymous tags in template arguments (`#63219 <https://github.com/llvm/llvm-project/issues/63219>`_). - Clang now properly diagnoses format string mismatches involving scoped enumeration types. A scoped enumeration type is not promoted to an integer type by the default argument promotions, and thus this is UB. Clang's behavior now matches GCC's behavior in C++. - (`#38717 <https://github.com/llvm/llvm-project/issues/38717>_`). + (`#38717 <https://github.com/llvm/llvm-project/issues/38717>`_). - Fixed a failing assertion when implicitly defining a function within a GNU statement expression that appears outside of a function block scope. The assertion was benign outside of asserts builds and would only fire in C. - (`#48579 <https://github.com/llvm/llvm-project/issues/48579>_`). + (`#48579 <https://github.com/llvm/llvm-project/issues/48579>`_). - Fixed a failing assertion when applying an attribute to an anonymous union. The assertion was benign outside of asserts builds and would only fire in C++. - (`#48512 <https://github.com/llvm/llvm-project/issues/48512>_`). + (`#48512 <https://github.com/llvm/llvm-project/issues/48512>`_). +- Fixed a failing assertion when parsing incomplete destructor. + (`#63503 <https://github.com/llvm/llvm-project/issues/63503>`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 1b4beec2e93b7..1222e4330a6e9 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -15807,7 +15807,11 @@ void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) { return; CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl); - + // The result of `LookupDestructor` might be nullptr if the destructor is + // invalid, in which case it is marked as `IneligibleOrNotSelected` and + // will not be selected by `CXXRecordDecl::getDestructor()`. + if (!Destructor) + return; // If this is an array, we'll require the destructor during initialization, so // we can skip over this. We still want to emit exit-time destructor warnings // though. diff --git a/clang/test/SemaCXX/virtuals.cpp b/clang/test/SemaCXX/virtuals.cpp index f8180745bd3ba..2a22ab9fc2b09 100644 --- a/clang/test/SemaCXX/virtuals.cpp +++ b/clang/test/SemaCXX/virtuals.cpp @@ -52,6 +52,18 @@ namespace pr8264 { }; } +namespace issue63503 { +struct Base { + virtual ~Base() = default; +}; + +struct Derived final : Base { + virtual ~Derived() = defaul; // #default +} do_not_crash; +// expected-error@#default {{initializer on function does not look like a pure-specifier}} +// expected-error@#default {{use of undeclared identifier 'defaul'}} +} + namespace VirtualFriend { // DR (filed but no number yet): reject meaningless pure-specifier on a friend declaration. struct A { virtual int f(); }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits