Author: Erich Keane
Date: 2025-04-18T10:06:52-07:00
New Revision: f5947ba5a659d6b3ed62761a7afdf1626435abcb

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

LOG: Revert "[clang] Handle instantiated members to determine visibility" 
(#136317)

Reverts llvm/llvm-project#136128

See discussion here:
https://github.com/llvm/llvm-project/pull/136128#issuecomment-2815648110
and :
https://github.com/llvm/llvm-project/pull/136128#issuecomment-2815652846

@asavonic can re-submit once the examples provided by @jplehr and/or
@DKLoehr are fixed.

Added: 
    

Modified: 
    clang/lib/AST/Decl.cpp
    clang/test/CodeGenCXX/visibility.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index b59619892979a..ad1cb01592e9b 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -400,9 +400,9 @@ void LinkageComputer::mergeTemplateLV(
   FunctionTemplateDecl *temp = specInfo->getTemplate();
   // Merge information from the template declaration.
   LinkageInfo tempLV = getLVForDecl(temp, computation);
-  // The linkage and visibility of the specialization should be
-  // consistent with the template declaration.
-  LV.mergeMaybeWithVisibility(tempLV, considerVisibility);
+  // The linkage of the specialization should be consistent with the
+  // template declaration.
+  LV.setLinkage(tempLV.getLinkage());
 
   // Merge information from the template parameters.
   LinkageInfo paramsLV =
@@ -1051,13 +1051,6 @@ LinkageComputer::getLVForClassMember(const NamedDecl *D,
     if (const auto *redeclTemp = dyn_cast<RedeclarableTemplateDecl>(temp)) {
       if (isExplicitMemberSpecialization(redeclTemp)) {
         explicitSpecSuppressor = temp->getTemplatedDecl();
-      } else if (const RedeclarableTemplateDecl *from =
-                     redeclTemp->getInstantiatedFromMemberTemplate()) {
-        // If no explicit visibility is specified yet, and this is an
-        // instantiated member of a template, look up visibility there
-        // as well.
-        LinkageInfo fromLV = from->getLinkageAndVisibility();
-        LV.mergeMaybeWithVisibility(fromLV, considerVisibility);
       }
     }
   }

diff  --git a/clang/test/CodeGenCXX/visibility.cpp 
b/clang/test/CodeGenCXX/visibility.cpp
index b69278a71d48e..e1061f3dbd18f 100644
--- a/clang/test/CodeGenCXX/visibility.cpp
+++ b/clang/test/CodeGenCXX/visibility.cpp
@@ -1457,45 +1457,9 @@ namespace test71 {
   // CHECK-LABEL: declare hidden noundef i32 @_ZN6test713fooIiE3zedEv(
   // CHECK-LABEL: define linkonce_odr noundef i32 
@_ZN6test713fooIiE3barIiEET_v(
   // CHECK-LABEL: define linkonce_odr hidden noundef i64 
@_ZN6test713fooIlE3zedEv(
-  // CHECK-LABEL: define linkonce_odr hidden noundef i32 
@_ZN6test713fooIlE3barIiEET_v(
+  // CHECK-LABEL: define linkonce_odr noundef i32 
@_ZN6test713fooIlE3barIiEET_v(
   // CHECK-HIDDEN-LABEL: declare hidden noundef i32 @_ZN6test713fooIiE3zedEv(
   // CHECK-HIDDEN-LABEL: define linkonce_odr noundef i32 
@_ZN6test713fooIiE3barIiEET_v(
   // CHECK-HIDDEN-LABEL: define linkonce_odr hidden noundef i64 
@_ZN6test713fooIlE3zedEv(
   // CHECK-HIDDEN-LABEL: define linkonce_odr hidden noundef i32 
@_ZN6test713fooIlE3barIiEET_v(
 }
-
-// https://github.com/llvm/llvm-project/issues/103477
-namespace test72 {
-  template <class a>
-  struct t {
-    template <int>
-    static HIDDEN void bar() {}
-  };
-
-  void test() {
-      t<char>::bar<1>();
-  }
-  // CHECK-LABEL: define linkonce_odr hidden void 
@_ZN6test721tIcE3barILi1EEEvv(
-  // CHECK-HIDDEN-LABEL: define linkonce_odr hidden void 
@_ZN6test721tIcE3barILi1EEEvv(
-}
-
-// https://github.com/llvm/llvm-project/issues/31462
-namespace test73 {
-  template <class T> struct s {
-    template <class U>
-    __attribute__((__visibility__("hidden"))) U should_not_be_exported();
-  };
-
-  template <class T> template <class U> U s<T>::should_not_be_exported() {
-    return U();
-  }
-
-  extern template struct __attribute__((__visibility__("default"))) s<int>;
-
-  int f() {
-    s<int> o;
-    return o.should_not_be_exported<int>();
-  }
-  // CHECK-LABEL: define linkonce_odr noundef i32 
@_ZN6test731sIiE22should_not_be_exportedIiEET_v(
-  // CHECK-HIDDEN-LABEL: define linkonce_odr noundef i32 
@_ZN6test731sIiE22should_not_be_exportedIiEET_v(
-}


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

Reply via email to