summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExprCXX.cpp
diff options
context:
space:
mode:
authorBruno Ricci <riccibrun@gmail.com>2019-01-24 13:52:47 +0000
committerBruno Ricci <riccibrun@gmail.com>2019-01-24 13:52:47 +0000
commit4eb701c0c6ae67a7bb6d853aa7735a457e014e0f (patch)
treecc2f1af470a606b1fe7a9a4eb5547d5714418c8d /clang/lib/Sema/SemaExprCXX.cpp
parent30b206b5daf48f9cebb685c765a3d60473cc34aa (diff)
downloadbcm5719-llvm-4eb701c0c6ae67a7bb6d853aa7735a457e014e0f.tar.gz
bcm5719-llvm-4eb701c0c6ae67a7bb6d853aa7735a457e014e0f.zip
[Sema] Don't crash when recovering from a misspelled pseudo destructor call to an incomplete type.
When attempting to correct a misspelled pseudo destructor call as in: struct Foo; void foo(Foo *p) { p.~Foo(); } a call is made in canRecoverDotPseudoDestructorCallsOnPointerObjects to LookupDestructor without checking that the record has a definition. This causes an assertion later in LookupSpecialMember which assumes that the record has a definition. Patch By Roman Zhikharevich! Differential Revision: https://reviews.llvm.org/D57111 Reviewed By: riccibruno llvm-svn: 352047
Diffstat (limited to 'clang/lib/Sema/SemaExprCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaExprCXX.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index d54696bbef7..5ac248d36b4 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -6854,8 +6854,9 @@ canRecoverDotPseudoDestructorCallsOnPointerObjects(Sema &SemaRef,
QualType DestructedType) {
// If this is a record type, check if its destructor is callable.
if (auto *RD = DestructedType->getAsCXXRecordDecl()) {
- if (CXXDestructorDecl *D = SemaRef.LookupDestructor(RD))
- return SemaRef.CanUseDecl(D, /*TreatUnavailableAsInvalid=*/false);
+ if (RD->hasDefinition())
+ if (CXXDestructorDecl *D = SemaRef.LookupDestructor(RD))
+ return SemaRef.CanUseDecl(D, /*TreatUnavailableAsInvalid=*/false);
return false;
}
OpenPOWER on IntegriCloud