Author: hans Date: Wed Feb 14 07:19:46 2018 New Revision: 325133 URL: http://llvm.org/viewvc/llvm-project?rev=325133&view=rev Log: Revert r324991 "Fix for PR32992. Static const classes not exported."
This broke the Chromium build on Windows; see https://crbug.com/812231 > Fix for PR32992. Static const classes not exported. > > Patch by zahiraam! > > Differential Revision: https://reviews.llvm.org/D42968 Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/test/CodeGenCXX/dllexport.cpp Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=325133&r1=325132&r2=325133&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Wed Feb 14 07:19:46 2018 @@ -5476,7 +5476,7 @@ static void CheckAbstractClassUsage(Abst } } -static void ReferenceDllExportedMembers(Sema &S, CXXRecordDecl *Class) { +static void ReferenceDllExportedMethods(Sema &S, CXXRecordDecl *Class) { Attr *ClassAttr = getDLLAttr(Class); if (!ClassAttr) return; @@ -5491,16 +5491,6 @@ static void ReferenceDllExportedMembers( return; for (Decl *Member : Class->decls()) { - // Defined static variables that are members of an exported base - // class must be marked export too. Push them to implicit instantiation - // queue. - auto *VD = dyn_cast<VarDecl>(Member); - if (VD && Member->getAttr<DLLExportAttr>() && - VD->getStorageClass() == SC_Static && - TSK == TSK_ImplicitInstantiation) - S.PendingLocalImplicitInstantiations.push_back( - std::make_pair(VD, VD->getLocation())); - auto *MD = dyn_cast<CXXMethodDecl>(Member); if (!MD) continue; @@ -10912,12 +10902,12 @@ void Sema::ActOnFinishCXXNonNestedClass( void Sema::referenceDLLExportedClassMethods() { if (!DelayedDllExportClasses.empty()) { - // Calling ReferenceDllExportedMembers might cause the current function to + // Calling ReferenceDllExportedMethods might cause the current function to // be called again, so use a local copy of DelayedDllExportClasses. SmallVector<CXXRecordDecl *, 4> WorkList; std::swap(DelayedDllExportClasses, WorkList); for (CXXRecordDecl *Class : WorkList) - ReferenceDllExportedMembers(*this, Class); + ReferenceDllExportedMethods(*this, Class); } } Modified: cfe/trunk/test/CodeGenCXX/dllexport.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllexport.cpp?rev=325133&r1=325132&r2=325133&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/dllexport.cpp (original) +++ cfe/trunk/test/CodeGenCXX/dllexport.cpp Wed Feb 14 07:19:46 2018 @@ -28,7 +28,6 @@ struct External { int v; }; // The vftable for struct W is comdat largest because we have RTTI. // M32-DAG: $"\01??_7W@@6B@" = comdat largest -// M32-DAG: $"\01?smember@?$Base@H@PR32992@@0HA" = comdat any //===----------------------------------------------------------------------===// @@ -978,21 +977,3 @@ class __declspec(dllexport) ACE_Service_ // MSVC2015-DAG: define weak_odr dllexport {{.+}}ACE_Service_Object@@Q{{.+}}@$$Q // The declarations should not be exported. // MSVC2013-NOT: define weak_odr dllexport {{.+}}ACE_Service_Object@@Q{{.+}}@$$Q - -namespace PR32992 { -// Static data members of a instantiated base class should be exported. -template <class T> -class Base { - virtual void myfunc() {} - static int smember; -}; -// MS-DAG: @"\01?smember@?$Base@H@PR32992@@0HA" = weak_odr dllexport global i32 77, comdat, align 4 -template <class T> int Base<T>::smember = 77; -template <class T> -class __declspec(dllexport) Derived2 : Base<T> { - void myfunc() {} -}; -class Derived : public Derived2<int> { - void myfunc() {} -}; -} // namespace PR32992 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits