summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2016-02-09 17:48:27 +0000
committerReid Kleckner <rnk@google.com>2016-02-09 17:48:27 +0000
commit703b2cb63cb1de7acb8ece35a0d5733e3411f377 (patch)
tree065b6076038f47db812e1117760847a0b1bec333
parentdbe65180fb1f2c560db6f44202c3c3251b1cce4f (diff)
Revert "Avoid forcing emission of delayed dllexported classes on template instantiation"
This reverts commit r260194. It caused PR26549. There's probably a better way to do this also. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260241 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaTemplateInstantiate.cpp10
-rw-r--r--test/CodeGenCXX/dllexport.cpp11
2 files changed, 0 insertions, 21 deletions
diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp
index db3f47fd91..56858bcc7e 100644
--- a/lib/Sema/SemaTemplateInstantiate.cpp
+++ b/lib/Sema/SemaTemplateInstantiate.cpp
@@ -1949,13 +1949,6 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation,
bool MergeWithParentScope = !Instantiation->isDefinedOutsideFunctionOrMethod();
LocalInstantiationScope Scope(*this, MergeWithParentScope);
- // All dllexported classes created during instantiation should be fully
- // emitted after instantiation completes. We may not be ready to emit any
- // delayed classes already on the stack, so save them away and put them back
- // later.
- decltype(DelayedDllExportClasses) ExportedClasses;
- std::swap(ExportedClasses, DelayedDllExportClasses);
-
// Pull attributes from the pattern onto the instantiation.
InstantiateAttrs(TemplateArgs, Pattern, Instantiation);
@@ -2041,9 +2034,6 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation,
// default arg exprs for default constructors if necessary now.
ActOnFinishCXXNonNestedClass(Instantiation);
- // Put back the delayed exported classes that we moved out of the way.
- std::swap(ExportedClasses, DelayedDllExportClasses);
-
// Instantiate late parsed attributes, and attach them to their decls.
// See Sema::InstantiateAttrs
for (LateInstantiatedAttrVec::iterator I = LateAttrs.begin(),
diff --git a/test/CodeGenCXX/dllexport.cpp b/test/CodeGenCXX/dllexport.cpp
index 04007e8212..1412ad866b 100644
--- a/test/CodeGenCXX/dllexport.cpp
+++ b/test/CodeGenCXX/dllexport.cpp
@@ -777,17 +777,6 @@ struct __declspec(dllexport) Baz {
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable(1) %"struct.InClassInits::Baz"* @"\01??4Baz@InClassInits@@QAEAAU01@ABU01@@Z"
}
-// We had an issue where instantiating A would force emission of B's delayed
-// exported methods.
-namespace pr26490 {
-template <typename T> struct A { };
-struct __declspec(dllexport) B {
- B(int = 0) {}
- A<int> m_fn1() {}
-};
-// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_FB@pr26490@@QAEXXZ"
-}
-
//===----------------------------------------------------------------------===//
// Classes with template base classes