r325133 - Revert r324991 "Fix for PR32992. Static const classes not exported."

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 14 07:19:46 PST 2018


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 at 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 at 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




More information about the cfe-commits mailing list