diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2016-03-16 14:36:11 +0000 |
---|---|---|
committer | Olivier Goffart <ogoffart@woboq.com> | 2016-03-16 14:36:11 +0000 |
commit | b94ed614522c7d1ccf4aecb6bd89cdfecee2ceeb (patch) | |
tree | 02dd69fdcc3aa60b6b49bdef9ddd3e7e13aa60ec /clang/lib/Sema/SemaDecl.cpp | |
parent | 01b14bf76178a1816957f67aba241d0ecafb178f (diff) | |
download | bcm5719-llvm-b94ed614522c7d1ccf4aecb6bd89cdfecee2ceeb.tar.gz bcm5719-llvm-b94ed614522c7d1ccf4aecb6bd89cdfecee2ceeb.zip |
Fix destructor definition of invalid classes
The declaration of the destructor of an invalid class was not properly marked
as noexcept. As a result, the definition of the same destructor, which was
properly implicitly marked as noexcept, would not match the definition.
This would cause the definition CXXDestructorDecl to be matked as invalid
and omited from the AST.
Differential Revision: http://reviews.llvm.org/D17988
llvm-svn: 263639
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 6032e0cea00..d8740d2beb1 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13862,15 +13862,17 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, I = CXXRecord->conversion_begin(), E = CXXRecord->conversion_end(); I != E; ++I) I.setAccess((*I)->getAccess()); - - if (!CXXRecord->isDependentType()) { - if (CXXRecord->hasUserDeclaredDestructor()) { - // Adjust user-defined destructor exception spec. - if (getLangOpts().CPlusPlus11) - AdjustDestructorExceptionSpec(CXXRecord, - CXXRecord->getDestructor()); - } + } + + if (!CXXRecord->isDependentType()) { + if (CXXRecord->hasUserDeclaredDestructor()) { + // Adjust user-defined destructor exception spec. + if (getLangOpts().CPlusPlus11) + AdjustDestructorExceptionSpec(CXXRecord, + CXXRecord->getDestructor()); + } + if (!CXXRecord->isInvalidDecl()) { // Add any implicitly-declared members to this class. AddImplicitlyDeclaredMembersToClass(CXXRecord); |