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