Author: Hans Wennborg
Date: 2023-09-20T16:31:12+02:00
New Revision: 700f683f9ddd64528d848cd3efef3ca7003cbd7e

URL: 
https://github.com/llvm/llvm-project/commit/700f683f9ddd64528d848cd3efef3ca7003cbd7e
DIFF: 
https://github.com/llvm/llvm-project/commit/700f683f9ddd64528d848cd3efef3ca7003cbd7e.diff

LOG: Revert "[clang] Don't inherit dllimport/dllexport to 
exclude_from_explicit_instantiation members during explicit instantiation 
(#65961)"

This uncovered a problem with virtual methods and
exclude_from_explicit_instantiation, see
https://github.com/llvm/llvm-project/issues/66909

Reverting until that's fixed.

> This is a continuation of https://reviews.llvm.org/D155713
>
> Fixes https://github.com/llvm/llvm-project/issues/40363

This reverts commit 84216d17359fcf6c314726d9f8d0416f8118d968.

Added: 
    

Modified: 
    clang/lib/Sema/SemaDeclCXX.cpp

Removed: 
    clang/test/CodeGenCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp
    clang/test/SemaCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp


################################################################################
diff  --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 83a5674092b2611..0091e0ecf6f3986 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -6605,13 +6605,6 @@ void Sema::checkClassLevelDLLAttribute(CXXRecordDecl 
*Class) {
     if (!VD && !MD)
       continue;
 
-    if ((TSK == TSK_ExplicitInstantiationDeclaration ||
-         TSK == TSK_ExplicitInstantiationDefinition) &&
-        Member->hasAttr<ExcludeFromExplicitInstantiationAttr>()) {
-      // Skip members excluded from instantiation.
-      continue;
-    }
-
     if (MD) {
       // Don't process deleted methods.
       if (MD->isDeleted())

diff  --git 
a/clang/test/CodeGenCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp 
b/clang/test/CodeGenCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp
deleted file mode 100644
index b3c804839be1ee4..000000000000000
--- 
a/clang/test/CodeGenCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-windows -fms-extensions -emit-llvm 
-O0 -o - %s | FileCheck %s
-
-// Test that dllimport and exclude_from_explicit_instantiation work properly
-// together. Specifically, we check that when 
exclude_from_explicit_instantiation
-// is used on a method, the compiler doesn't expect it to be provided 
externally
-// even if it is marked with dllimport.
-//
-// https://github.com/llvm/llvm-project/issues/40363
-
-#define DLLIMPORT __declspec(dllimport)
-#define DLLEXPORT __declspec(dllexport)
-#define EXCLUDE_FROM_EXPLICIT_INSTANTIATION 
__attribute__((exclude_from_explicit_instantiation))
-
-template <class T>
-struct DLLIMPORT Foo {
-  EXCLUDE_FROM_EXPLICIT_INSTANTIATION void x() {}
-};
-
-template <class T>
-struct Bar {
-  EXCLUDE_FROM_EXPLICIT_INSTANTIATION void x() {}
-};
-
-extern template struct Foo<int>;
-extern template struct DLLIMPORT Bar<int>;
-
-
-template <class T>
-struct Baz {
-  EXCLUDE_FROM_EXPLICIT_INSTANTIATION void f() {}
-};
-
-template struct DLLEXPORT Baz<int>;
-
-
-void test(Foo<int>& foo, Bar<int>& bar, Baz<int>& baz) {
-  // Not imported.
-  // CHECK-DAG: define linkonce_odr dso_local void @"?x@?$Foo@H@@QEAAXXZ"
-  foo.x();
-
-  // Not imported.
-  // CHECK-DAG: define linkonce_odr dso_local void @"?x@?$Bar@H@@QEAAXXZ"
-  bar.x();
-
-  // Not exported.
-  // CHECK-DAG: define linkonce_odr dso_local void @"?f@?$Baz@H@@QEAAXXZ"
-  baz.f();
-}

diff  --git 
a/clang/test/SemaCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp 
b/clang/test/SemaCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp
deleted file mode 100644
index bdca2d8895f516c..000000000000000
--- a/clang/test/SemaCXX/attr-exclude_from_explicit_instantiation.dllimport.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-windows -fms-extensions -verify %s
-
-// Test that an entity marked as both dllimport and 
exclude_from_explicit_instantiation
-// isn't instantiated.
-
-#define DLLIMPORT __declspec(dllimport)
-#define EXCLUDE_FROM_EXPLICIT_INSTANTIATION 
__attribute__((exclude_from_explicit_instantiation))
-
-template <class T>
-struct DLLIMPORT Foo {
-  EXCLUDE_FROM_EXPLICIT_INSTANTIATION void x();
-};
-
-template <class T>
-struct Bar {
-  DLLIMPORT EXCLUDE_FROM_EXPLICIT_INSTANTIATION inline void x();
-};
-
-template <class T>
-void Foo<T>::x() { using Fail = typename T::fail; }
-
-template <class T>
-DLLIMPORT inline void Bar<T>::x() { using Fail = typename T::fail; }
-
-// expected-no-diagnostics
-template struct Foo<int>;
-template struct Bar<int>;


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to