mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-23 13:50:11 +00:00
[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
This commit is contained in:
parent
86f564edc0
commit
76d72a7150
@ -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
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -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.
|
||||
|
@ -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(); };
|
||||
|
Loading…
Reference in New Issue
Block a user