]> granicus.if.org Git - clang/commitdiff
Revert "Avoid forcing emission of delayed dllexported classes on template instantiation"
authorReid Kleckner <rnk@google.com>
Tue, 9 Feb 2016 17:48:27 +0000 (17:48 +0000)
committerReid Kleckner <rnk@google.com>
Tue, 9 Feb 2016 17:48:27 +0000 (17:48 +0000)
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

lib/Sema/SemaTemplateInstantiate.cpp
test/CodeGenCXX/dllexport.cpp

index db3f47fd91672cb79541a41e4311745f92e0ba6b..56858bcc7e6afa4a9fe8e06e22f4a8399e5e3490 100644 (file)
@@ -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(),
index 04007e8212ddb98ed51d3d575d86a835449ece78..1412ad866bd3996c8a5f4b892c0739e459e5f0a4 100644 (file)
@@ -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