zyounan updated this revision to Diff 534386. zyounan added a comment. Simplify test case
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D153724/new/ https://reviews.llvm.org/D153724 Files: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaDeclCXX.cpp clang/test/SemaCXX/virtuals.cpp Index: clang/test/SemaCXX/virtuals.cpp =================================================================== --- clang/test/SemaCXX/virtuals.cpp +++ clang/test/SemaCXX/virtuals.cpp @@ -52,6 +52,18 @@ }; } +namespace issue63503 { +struct Base { + virtual ~Base() = default; +}; + +struct Derived final : Base { + virtual ~Derived() = defaul; // #62 +} do_not_crash; +// expected-error@#62 {{initializer on function does not look like a pure-specifier}} +// expected-error@#62 {{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(); }; Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -15807,7 +15807,11 @@ 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. Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -469,7 +469,7 @@ - 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>`_) @@ -521,21 +521,23 @@ (`#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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Index: clang/test/SemaCXX/virtuals.cpp =================================================================== --- clang/test/SemaCXX/virtuals.cpp +++ clang/test/SemaCXX/virtuals.cpp @@ -52,6 +52,18 @@ }; } +namespace issue63503 { +struct Base { + virtual ~Base() = default; +}; + +struct Derived final : Base { + virtual ~Derived() = defaul; // #62 +} do_not_crash; +// expected-error@#62 {{initializer on function does not look like a pure-specifier}} +// expected-error@#62 {{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(); }; Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -15807,7 +15807,11 @@ 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. Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -469,7 +469,7 @@ - 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>`_) @@ -521,21 +521,23 @@ (`#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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits