From: Reid Kleckner Date: Fri, 6 Oct 2017 21:28:21 +0000 (+0000) Subject: Revert "For dllexport class templates, export specializations of member functions... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe2683b0850c29250ab428c538948989d02d0409;p=clang Revert "For dllexport class templates, export specializations of member functions (PR34849)" This reverts r315025, it caused http://crbug.com/772461 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315111 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 5b90557e79..48fb2318e6 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -6041,21 +6041,6 @@ static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, diag::warn_dllimport_dropped_from_inline_function) << NewDecl << OldImportAttr; } - - // A specialization of a class template member function is processed here - // since it's a redeclaration. If the parent class is dllexport, the - // specialization inherits that attribute. This doesn't happen automatically - // since the parent class isn't instantiated until later. - if (IsSpecialization && isa(NewDecl) && !NewImportAttr && - !NewExportAttr) { - if (const DLLExportAttr *ParentExportAttr = cast(NewDecl) - ->getParent() - ->getAttr()) { - DLLExportAttr *NewAttr = ParentExportAttr->clone(S.Context); - NewAttr->setInherited(true); - NewDecl->addAttr(NewAttr); - } - } } /// Given that we are within the definition of the given function, diff --git a/test/CodeGenCXX/dllexport.cpp b/test/CodeGenCXX/dllexport.cpp index a984b6d7ef..bdef2eb06e 100644 --- a/test/CodeGenCXX/dllexport.cpp +++ b/test/CodeGenCXX/dllexport.cpp @@ -831,14 +831,6 @@ template struct ExplicitInstantiationTwoAttributes { void f() {} }; template struct __declspec(dllexport) __declspec(dllimport) ExplicitInstantiationTwoAttributes; // M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?f@?$ExplicitInstantiationTwoAttributes@H@@QAEXXZ" -// Specializations of exported class template functions get exported. -namespace pr34849 { -template struct __declspec(dllexport) ExportedClass { void foo(); }; -template<> void ExportedClass::foo() {} -template struct ExportedClass; -// M32-DAG: define dllexport x86_thiscallcc void @"\01?foo@?$ExportedClass@H@pr34849@@QAEXXZ" -} - //===----------------------------------------------------------------------===// // Classes with template base classes