diff options
author | Hans Wennborg <hans@hanshq.net> | 2019-08-02 07:51:41 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2019-08-02 07:51:41 +0000 |
commit | 044d8c486bb4fd6d445e4333475e62045bf47888 (patch) | |
tree | 62b1993fbc718887b2aee5769c18647eb6bbab2a /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 14c6dfdfe2da38653797c7070d882e7546f1c067 (diff) | |
download | bcm5719-llvm-044d8c486bb4fd6d445e4333475e62045bf47888.tar.gz bcm5719-llvm-044d8c486bb4fd6d445e4333475e62045bf47888.zip |
Don't try emitting dllexported explicitly defaulted non-trivial ctors twice during explicit template instantiation definition (PR42857)
Trying to emit the definition twice triggers an assert.
Differential revision: https://reviews.llvm.org/D65579
llvm-svn: 367661
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 5f90790d7ff..accca46666b 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -11543,7 +11543,13 @@ void Sema::ActOnFinishCXXNonNestedClass(Decl *D) { std::swap(DelayedDllExportMemberFunctions, WorkList); for (CXXMethodDecl *M : WorkList) { DefineImplicitSpecialMember(*this, M, M->getLocation()); - ActOnFinishInlineFunctionDef(M); + + // Pass the method to the consumer to get emitted. This is not necessary + // for explicit instantiation definitions, as they will get emitted + // anyway. + if (M->getParent()->getTemplateSpecializationKind() != + TSK_ExplicitInstantiationDefinition) + ActOnFinishInlineFunctionDef(M); } } } |