Author: SharonXSharon Date: 2026-09-09T22:54:15-07:00 New Revision: 17caaa3bdbb229aa63c56864c1452100cfe36f39
URL: https://github.com/llvm/llvm-project/commit/17caaa3bdbb229aa63c56864c1452100cfe36f39 DIFF: https://github.com/llvm/llvm-project/commit/17caaa3bdbb229aa63c56864c1452100cfe36f39.diff LOG: Revert "[clang] Revert "Disable Unique Internal Linkage Names for internal global vars." (#219261)" (#222486) This reverts commit 9abbc9183d2231c2e44198100a6cd22ef66e2eb8. Will reland with a proper fix of the GNU AsmLabelAttr Co-authored-by: Sharon Xu <[email protected]> Added: Modified: clang/docs/ReleaseNotes.md clang/lib/AST/ItaniumMangle.cpp clang/lib/CodeGen/CodeGenModule.cpp clang/test/CodeGen/unique-internal-linkage-names.cpp clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.c clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.md b/clang/docs/ReleaseNotes.md index 3cca316a91d4d..fbbf5ed48918b 100644 --- a/clang/docs/ReleaseNotes.md +++ b/clang/docs/ReleaseNotes.md @@ -261,14 +261,6 @@ features cannot lower the translation-unit ABI level; - All options of the `-fzero-call-used-regs` compiler flag are now allowed on RISC-V. -- `-funique-internal-linkage-names` now gives internal global variables a - unique `.__uniq.<module-hash>` suffix, as it already does for functions. This - helps profiling tools distinguish static variables with the same name in - diff erent source files. LLVM can demangle these suffixes for both functions - and data symbols. GNU libiberty can demangle suffixed function symbols, but - leaves suffixed data symbols unchanged. The option remains opt-in, and - variables with explicit assembly labels keep their original names. - ### Removed Compiler Flags ### Attribute Changes in Clang diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp index 298f3efbfa221..3a3cde3448f44 100644 --- a/clang/lib/AST/ItaniumMangle.cpp +++ b/clang/lib/AST/ItaniumMangle.cpp @@ -726,18 +726,20 @@ bool ItaniumMangleContextImpl::isInternalLinkageDecl(const NamedDecl *ND) { return false; } -// Check if this Decl needs a unique internal linkage name. +// Check if this Function Decl needs a unique internal linkage name. bool ItaniumMangleContextImpl::isUniqueInternalLinkageDecl( const NamedDecl *ND) { if (!NeedsUniqueInternalLinkageNames || !ND) return false; + const auto *FD = dyn_cast<FunctionDecl>(ND); + if (!FD) + return false; + // For C functions without prototypes, return false as their // names should not be mangled. - if (const auto *FD = dyn_cast<FunctionDecl>(ND)) { - if (!FD->getType()->getAs<FunctionProtoType>()) - return false; - } + if (!FD->getType()->getAs<FunctionProtoType>()) + return false; if (isInternalLinkageDecl(ND)) return true; diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 8890d2a4b1b7e..b7bd5744bcb09 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2467,17 +2467,14 @@ static void AppendCPUSpecificCPUDispatchMangling(const CodeGenModule &CGM, Out << ".resolver"; } -// Returns true if GD is a function/var decl with internal linkage and +// Returns true if GD is a function decl with internal linkage and // needs a unique suffix after the mangled name. static bool isUniqueInternalLinkageDecl(GlobalDecl GD, CodeGenModule &CGM) { const Decl *D = GD.getDecl(); - if (CGM.getModuleNameHash().empty() || D->hasAttr<AsmLabelAttr>()) - return false; - return (isa<FunctionDecl>(D) && - CGM.getFunctionLinkage(GD) == llvm::GlobalValue::InternalLinkage) || - (isa<VarDecl>(D) && CGM.getContext().GetGVALinkageForVariable( - cast<VarDecl>(D)) == GVA_Internal); + return !CGM.getModuleNameHash().empty() && isa<FunctionDecl>(D) && + !D->hasAttr<AsmLabelAttr>() && + (CGM.getFunctionLinkage(GD) == llvm::GlobalValue::InternalLinkage); } static std::string getMangledNameImpl(CodeGenModule &CGM, GlobalDecl GD, diff --git a/clang/test/CodeGen/unique-internal-linkage-names.cpp b/clang/test/CodeGen/unique-internal-linkage-names.cpp index a65813a6fb338..b5c4824575372 100644 --- a/clang/test/CodeGen/unique-internal-linkage-names.cpp +++ b/clang/test/CodeGen/unique-internal-linkage-names.cpp @@ -64,13 +64,8 @@ static int asm_label() asm("custom_label"); static int asm_label() { return 0; } int call_asm_label() { return asm_label(); } -// Likewise for a static variable with an asm label. -static int asm_label_var asm("custom_var_label"); -int read_asm_label_var() { return asm_label_var; } - // PLAIN: @_ZL4glob = internal global // PLAIN: @_ZZ8retAnonMvE5fGlob = internal global -// PLAIN: @custom_var_label = internal global // PLAIN: @_ZN12_GLOBAL__N_16anon_mE = internal global // PLAIN: define internal noundef i32 @_ZL3foov() // PLAIN: define internal noundef i32 @_ZN12_GLOBAL__N_14getMEv @@ -81,11 +76,10 @@ int read_asm_label_var() { return asm_label_var; } // PLAIN: define internal noundef i32 @_ZL4mverv() // PLAIN: define internal noundef i32 @_ZL4mverv.sse4.2() // PLAIN-NOT: "sample-profile-suffix-elision-policy" -// UNIQUE: @_ZL4glob.[[MODHASH:__uniq.[0-9]+]] = internal global -// UNIQUE: @_ZZ8retAnonMvE5fGlob.[[MODHASH]] = internal global -// UNIQUE: @custom_var_label = internal global -// UNIQUE: @_ZN12_GLOBAL__N_16anon_mE.[[MODHASH]] = internal global -// UNIQUE: define internal noundef i32 @_ZL3foov.[[MODHASH]]() #[[#ATTR:]] { +// UNIQUE: @_ZL4glob = internal global +// UNIQUE: @_ZZ8retAnonMvE5fGlob = internal global +// UNIQUE: @_ZN12_GLOBAL__N_16anon_mE = internal global +// UNIQUE: define internal noundef i32 @_ZL3foov.[[MODHASH:__uniq.[0-9]+]]() #[[#ATTR:]] { // UNIQUE: define internal noundef i32 @_ZN12_GLOBAL__N_14getMEv.[[MODHASH]] // UNIQUE: define internal ptr @_ZL4mverv.[[MODHASH]].resolver() // UNIQUE: define internal void @_ZN12_GLOBAL__N_11AC1Ev.__uniq.68358509610070717889884130747296293671 @@ -98,10 +92,9 @@ int read_asm_label_var() { return asm_label_var; } // Expected module path and unique ID // /repro/src/path/unique-internal-linkage-names.cpp => __uniq.5283619504002921413211664429594652319 -// UNIQUE-PATH-MAP-LINUX: @_ZL4glob.__uniq.5283619504002921413211664429594652319 = internal global -// UNIQUE-PATH-MAP-LINUX: @_ZZ8retAnonMvE5fGlob.__uniq.5283619504002921413211664429594652319 = internal global -// UNIQUE-PATH-MAP-LINUX: @custom_var_label = internal global -// UNIQUE-PATH-MAP-LINUX: @_ZN12_GLOBAL__N_16anon_mE.__uniq.5283619504002921413211664429594652319 = internal global +// UNIQUE-PATH-MAP-LINUX: @_ZL4glob = internal global +// UNIQUE-PATH-MAP-LINUX: @_ZZ8retAnonMvE5fGlob = internal global +// UNIQUE-PATH-MAP-LINUX: @_ZN12_GLOBAL__N_16anon_mE = internal global // UNIQUE-PATH-MAP-LINUX: define internal noundef i32 @_ZL3foov.__uniq.5283619504002921413211664429594652319() #[[#ATTR:]] { // UNIQUE-PATH-MAP-LINUX: define internal noundef i32 @_ZN12_GLOBAL__N_14getMEv.__uniq.5283619504002921413211664429594652319 // UNIQUE-PATH-MAP-LINUX: define internal ptr @_ZL4mverv.__uniq.5283619504002921413211664429594652319.resolver() @@ -114,11 +107,9 @@ int read_asm_label_var() { return asm_label_var; } // Expected module path and unique ID // \repro\src\path\unique-internal-linkage-names.cpp => __uniq.68451533753012730514350177221027644473 -// Note: 'glob' is not mangled under the MS ABI, so it gets no unique suffix. // UNIQUE-PATH-MAP-WINDOWS: @glob = internal global -// UNIQUE-PATH-MAP-WINDOWS: @"?fGlob@?1??retAnonM@@YAHXZ@4HA.__uniq.68451533753012730514350177221027644473" = internal global -// UNIQUE-PATH-MAP-WINDOWS: @custom_var_label = internal global -// UNIQUE-PATH-MAP-WINDOWS: @"?anon_m@?{{.*}}@@3HA.__uniq.68451533753012730514350177221027644473" = internal global +// UNIQUE-PATH-MAP-WINDOWS: @"?fGlob@?1??retAnonM@@YAHXZ@4HA" = internal global +// UNIQUE-PATH-MAP-WINDOWS: @"?anon_m@?{{.*}}@@3HA" = internal global // UNIQUE-PATH-MAP-WINDOWS: ret ptr @"?foo@@YAHXZ.__uniq.68451533753012730514350177221027644473" // UNIQUE-PATH-MAP-WINDOWS: define internal noundef i32 @"?foo@@YAHXZ.__uniq.68451533753012730514350177221027644473" // UNIQUE-PATH-MAP-WINDOWS: define internal i32 @"?mver@@YAHXZ.__uniq.68451533753012730514350177221027644473.resolver"() diff --git a/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.c b/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.c index 8f9dc143654c9..5a401182450ab 100644 --- a/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.c +++ b/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.c @@ -33,9 +33,9 @@ void baz(void) { // PLAIN: distinct !DISubprogram(name: "bar"{{.*}}) // PLAIN-NOT: linkageName: // -// UNIQUE: @_ZL4glob.[[MODHASH:__uniq.[0-9]+]] = internal global i32 -// UNIQUE: define internal i32 @_ZL3foov.[[MODHASH]]() +// UNIQUE: @glob = internal global i32 +// UNIQUE: define internal i32 @_ZL3foov.[[MODHASH:__uniq.[0-9]+]]() // UNIQUE: define internal i32 @_ZL3bari.[[MODHASH]](i32 noundef %a) -// UNIQUE: distinct !DIGlobalVariable(name: "glob", linkageName: "_ZL4glob.[[MODHASH]]"{{.*}}) +// UNIQUE: distinct !DIGlobalVariable(name: "glob"{{.*}}) // UNIQUE: distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov.[[MODHASH]]"{{.*}}) // UNIQUE: distinct !DISubprogram(name: "bar", linkageName: "_ZL3bari.[[MODHASH]]"{{.*}}) diff --git a/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.cpp b/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.cpp index e49fe5736092d..cdd7062a3a009 100644 --- a/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.cpp +++ b/clang/test/DebugInfo/Generic/unique-internal-linkage-names-dwarf.cpp @@ -46,15 +46,15 @@ void baz() { // PLAIN-DAG: distinct !DIGlobalVariable(name: "glob_zip", linkageName: "_ZL8glob_zip"{{.*}}) // PLAIN-DAG: distinct !DISubprogram(name: "zip", linkageName: "_ZL3zipv"{{.*}}) -// UNIQUE-DAG: @_ZL8glob_foo.[[MODHASH:__uniq\.[0-9]+]] = internal global i32 -// UNIQUE-DAG: define internal noundef i32 @_ZL3foov.[[MODHASH]]() -// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_foo", linkageName: "_ZL8glob_foo.[[MODHASH]]"{{.*}}) +// UNIQUE-DAG: @_ZL8glob_foo = internal global i32 +// UNIQUE-DAG: define internal noundef i32 @_ZL3foov.[[MODHASH:__uniq\.[0-9]+]]() +// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_foo", linkageName: "_ZL8glob_foo"{{.*}}) // UNIQUE-DAG: distinct !DISubprogram(name: "foo", linkageName: "_ZL3foov.[[MODHASH]]"{{.*}}) -// UNIQUE-DAG: @_ZN12_GLOBAL__N_18glob_barE.[[MODHASH]] = internal global i32 +// UNIQUE-DAG: @_ZN12_GLOBAL__N_18glob_barE = internal global i32 // UNIQUE-DAG: define internal noundef i32 @_ZN12_GLOBAL__N_13barEv.[[MODHASH]]() -// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_bar", linkageName: "_ZN12_GLOBAL__N_18glob_barE.[[MODHASH]]"{{.*}}) +// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_bar", linkageName: "_ZN12_GLOBAL__N_18glob_barE"{{.*}}) // UNIQUE-DAG: distinct !DISubprogram(name: "bar", linkageName: "_ZN12_GLOBAL__N_13barEv.[[MODHASH]]"{{.*}}) -// UNIQUE-DAG: @_ZL8glob_zip.[[MODHASH]] = internal global i32 +// UNIQUE-DAG: @_ZL8glob_zip = internal global i32 // UNIQUE-DAG: define internal noundef i32 @_ZL3zipv.[[MODHASH]]() -// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_zip", linkageName: "_ZL8glob_zip.[[MODHASH]]"{{.*}}) +// UNIQUE-DAG: distinct !DIGlobalVariable(name: "glob_zip", linkageName: "_ZL8glob_zip"{{.*}}) // UNIQUE-DAG: distinct !DISubprogram(name: "zip", linkageName: "_ZL3zipv.[[MODHASH]]"{{.*}}) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
