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
|
- Fix crash when redefining a variable with an invalid type again with an
|
||||||
invalid type. (`#62447 <https://github.com/llvm/llvm-project/issues/62447>`_)
|
invalid type. (`#62447 <https://github.com/llvm/llvm-project/issues/62447>`_)
|
||||||
- Fix a stack overflow issue when evaluating ``consteval`` default arguments.
|
- 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
|
- Fix the assertion hit when generating code for global variable initializer of
|
||||||
_BitInt(1) type.
|
_BitInt(1) type.
|
||||||
(`#62207 <https://github.com/llvm/llvm-project/issues/62207>`_)
|
(`#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>`_).
|
(`#50534 <https://github.com/llvm/llvm-project/issues/50534>`_).
|
||||||
- CallExpr built for C error-recovery now is always type-dependent. Fixes a
|
- CallExpr built for C error-recovery now is always type-dependent. Fixes a
|
||||||
crash when we encounter a unresolved TypoExpr during diagnostic emission.
|
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
|
- Apply ``-fmacro-prefix-map`` to anonymous tags in template arguments
|
||||||
(`#63219 <https://github.com/llvm/llvm-project/issues/63219>`_).
|
(`#63219 <https://github.com/llvm/llvm-project/issues/63219>`_).
|
||||||
- Clang now properly diagnoses format string mismatches involving scoped
|
- Clang now properly diagnoses format string mismatches involving scoped
|
||||||
enumeration types. A scoped enumeration type is not promoted to an integer
|
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
|
type by the default argument promotions, and thus this is UB. Clang's
|
||||||
behavior now matches GCC's behavior in C++.
|
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
|
- Fixed a failing assertion when implicitly defining a function within a GNU
|
||||||
statement expression that appears outside of a function block scope. The
|
statement expression that appears outside of a function block scope. The
|
||||||
assertion was benign outside of asserts builds and would only fire in C.
|
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.
|
- 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++.
|
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
|
Bug Fixes to Compiler Builtins
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -15807,7 +15807,11 @@ void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
|
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
|
// 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
|
// we can skip over this. We still want to emit exit-time destructor warnings
|
||||||
// though.
|
// 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 {
|
namespace VirtualFriend {
|
||||||
// DR (filed but no number yet): reject meaningless pure-specifier on a friend declaration.
|
// DR (filed but no number yet): reject meaningless pure-specifier on a friend declaration.
|
||||||
struct A { virtual int f(); };
|
struct A { virtual int f(); };
|
||||||
|
Loading…
Reference in New Issue
Block a user