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. llvm-svn: 260241
This commit is contained in:
parent
62dde825d8
commit
d809be40d2
@ -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(),
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user