https://github.com/mustartt updated https://github.com/llvm/llvm-project/pull/202004
>From 697d46601d161c7218b26665cbddb73fa98da042 Mon Sep 17 00:00:00 2001 From: Henry Jiang <[email protected]> Date: Fri, 5 Jun 2026 22:07:16 -0700 Subject: [PATCH] [clang] No unique linkage name when asm lebel present --- clang/lib/CodeGen/CodeGenModule.cpp | 1 + clang/test/CodeGen/unique-internal-linkage-names.c | 11 +++++++++++ clang/test/CodeGen/unique-internal-linkage-names.cpp | 8 ++++++++ 3 files changed, 20 insertions(+) diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 236738e9975d3..b237d8c11f8df 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2258,6 +2258,7 @@ static bool isUniqueInternalLinkageDecl(GlobalDecl GD, CodeGenModule &CGM) { const Decl *D = GD.getDecl(); return !CGM.getModuleNameHash().empty() && isa<FunctionDecl>(D) && + !D->hasAttr<AsmLabelAttr>() && (CGM.getFunctionLinkage(GD) == llvm::GlobalValue::InternalLinkage); } diff --git a/clang/test/CodeGen/unique-internal-linkage-names.c b/clang/test/CodeGen/unique-internal-linkage-names.c index 0fd5e516eec41..888de0e176b81 100644 --- a/clang/test/CodeGen/unique-internal-linkage-names.c +++ b/clang/test/CodeGen/unique-internal-linkage-names.c @@ -5,6 +5,15 @@ inline void overloaded_external() {} extern void overloaded_external(); +// A prototyped static function gets a unique suffix... +// CHECK: define internal i32 @_ZL7uniquedv.__uniq.{{[0-9]+}}( +static int uniqued(void) { return 0; } + +// Check that a static function with asm label keeps its original name. +// CHECK: define internal i32 @"\01custom_label" +static int asm_label(void) asm("custom_label"); +static int asm_label(void) { return 0; } + // CHECK: define internal void @overloaded_internal() [[ATTR:#[0-9]+]] { static void overloaded_internal() {} extern void overloaded_internal(); @@ -12,6 +21,8 @@ extern void overloaded_internal(); void markUsed() { overloaded_external(); overloaded_internal(); + uniqued(); + asm_label(); } // CHECK: attributes [[ATTR]] = diff --git a/clang/test/CodeGen/unique-internal-linkage-names.cpp b/clang/test/CodeGen/unique-internal-linkage-names.cpp index e847cea9d273c..070a6eb4960d6 100644 --- a/clang/test/CodeGen/unique-internal-linkage-names.cpp +++ b/clang/test/CodeGen/unique-internal-linkage-names.cpp @@ -54,6 +54,11 @@ void test() { A a; } +// Check a static function with an asm label must keep original name. +static int asm_label() asm("custom_label"); +static int asm_label() { return 0; } +int call_asm_label() { return asm_label(); } + // PLAIN: @_ZL4glob = internal global // PLAIN: @_ZZ8retAnonMvE5fGlob = internal global // PLAIN: @_ZN12_GLOBAL__N_16anon_mE = internal global @@ -62,6 +67,7 @@ void test() { // PLAIN: define internal ptr @_ZL4mverv.resolver() // PLAIN: define internal void @_ZN12_GLOBAL__N_11AC1Ev // PLAIN: define internal void @_ZN12_GLOBAL__N_11AD1Ev +// PLAIN: define internal noundef i32 @custom_label() // PLAIN: define internal noundef i32 @_ZL4mverv() // PLAIN: define internal noundef i32 @_ZL4mverv.sse4.2() // PLAIN-NOT: "sample-profile-suffix-elision-policy" @@ -73,6 +79,8 @@ void test() { // UNIQUE: define internal ptr @_ZL4mverv.[[MODHASH]].resolver() // UNIQUE: define internal void @_ZN12_GLOBAL__N_11AC1Ev.__uniq.68358509610070717889884130747296293671 // UNIQUE: define internal void @_ZN12_GLOBAL__N_11AD1Ev.__uniq.68358509610070717889884130747296293671 +// An explicit asm label keeps the user-specified name with no unique suffix. +// UNIQUE: define internal noundef i32 @custom_label() // UNIQUE: define internal noundef i32 @_ZL4mverv.[[MODHASH]]() // UNIQUE: define internal noundef i32 @_ZL4mverv.[[MODHASH]].sse4.2 // UNIQUE: attributes #[[#ATTR]] = { {{.*}}"sample-profile-suffix-elision-policy"{{.*}} } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
