summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplate.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2016-02-26 19:51:02 +0000
committerReid Kleckner <rnk@google.com>2016-02-26 19:51:02 +0000
commit5b64034a435d2bd25813918bdb1f7368e2af77b7 (patch)
tree8819e47a345ff8996b0462c9f16a1dc6d9c92dd3 /clang/lib/Sema/SemaTemplate.cpp
parent5cc45e0122f014fd90dd77ac2d1d379952016020 (diff)
downloadbcm5719-llvm-5b64034a435d2bd25813918bdb1f7368e2af77b7.tar.gz
bcm5719-llvm-5b64034a435d2bd25813918bdb1f7368e2af77b7.zip
[dllexport] Sort out emission order of delayed exported classes
Relands r260194 with a fix. If we have a template that transitions from an extern template to an explicitly instantiated dllexport template, we would add that class to the delayed exported class list without flushing it. For explicit instantiations, we can just flush the list of delayed classes immediately. We don't have to worry about the bug fixed in r260194 in this case because explicit instantiations can only occur at file and namespace scope. Fixes PR26490. llvm-svn: 262056
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r--clang/lib/Sema/SemaTemplate.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 38df76ee315..3b85b98abdd 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -7458,7 +7458,13 @@ Sema::ActOnExplicitInstantiation(Scope *S,
getDLLAttr(Specialization)->clone(getASTContext()));
A->setInherited(true);
Def->addAttr(A);
+
+ // We reject explicit instantiations in class scope, so there should
+ // never be any delayed exported classes to worry about.
+ assert(DelayedDllExportClasses.empty() &&
+ "delayed exports present at explicit instantiation");
checkClassLevelDLLAttribute(Def);
+ referenceDLLExportedClassMethods();
// Propagate attribute to base class templates.
for (auto &B : Def->bases()) {
OpenPOWER on IntegriCloud