}
}
-static void ReferenceDllExportedMembers(Sema &S, CXXRecordDecl *Class) {
+static void ReferenceDllExportedMethods(Sema &S, CXXRecordDecl *Class) {
Attr *ClassAttr = getDLLAttr(Class);
if (!ClassAttr)
return;
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;
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);
}
}
// 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
//===----------------------------------------------------------------------===//
// 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