diff options
author | Nico Weber <nicolasweber@gmx.de> | 2015-03-06 06:01:06 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2015-03-06 06:01:06 +0000 |
commit | 55905145e7cfe2adca541e7162b91d23a4e7f26c (patch) | |
tree | 4ea746cde850d89e53d033c5860962b13baa543d /clang/lib/Sema | |
parent | 72146af68c9cfa570d32f52f961e1b15f91d8a2b (diff) | |
download | bcm5719-llvm-55905145e7cfe2adca541e7162b91d23a4e7f26c.tar.gz bcm5719-llvm-55905145e7cfe2adca541e7162b91d23a4e7f26c.zip |
Don't crash on non-public referenced dtors in toplevel classes.
Fixes PR22793, a bug that caused self-hosting to fail after the innocuous
r231254. See the bug for details.
llvm-svn: 231451
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 3725b2d1f3c..84315be781f 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -117,7 +117,7 @@ static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S, case AR_Available: case AR_NotYetIntroduced: break; - + case AR_Deprecated: if (S.getCurContextAvailability() != AR_Deprecated) S.EmitAvailabilityWarning(Sema::AD_Deprecation, @@ -11859,8 +11859,11 @@ void Sema::MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func, } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(Func)) { Destructor = cast<CXXDestructorDecl>(Destructor->getFirstDecl()); - if (Destructor->isDefaulted() && !Destructor->isDeleted()) + if (Destructor->isDefaulted() && !Destructor->isDeleted()) { + if (Destructor->isTrivial() && !Destructor->hasAttr<DLLExportAttr>()) + return; DefineImplicitDestructor(Loc, Destructor); + } if (Destructor->isVirtual() && getLangOpts().AppleKext) MarkVTableUsed(Loc, Destructor->getParent()); } else if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(Func)) { |