1*0e44ffe8SOrlando Cazalet-Hyams; RUN: llc %s --filetype=obj -o - -dwarf-linkage-names=Abstract -add-linkage-names-to-declaration-call-origins=false \ 2*0e44ffe8SOrlando Cazalet-Hyams; RUN: | llvm-dwarfdump - | FileCheck %s --check-prefixes=COMMON,DISABLE --implicit-check-not=DW_AT_linkage_name 3*0e44ffe8SOrlando Cazalet-Hyams; RUN: llc %s --filetype=obj -o - -dwarf-linkage-names=Abstract -add-linkage-names-to-declaration-call-origins=true \ 4*0e44ffe8SOrlando Cazalet-Hyams; RUN: | llvm-dwarfdump - | FileCheck %s --check-prefixes=COMMON,ENABLE --implicit-check-not=DW_AT_linkage_name 5*0e44ffe8SOrlando Cazalet-Hyams 6*0e44ffe8SOrlando Cazalet-Hyams;; Check that -add-linkage-names-to-declaration-call-origins controls whether 7*0e44ffe8SOrlando Cazalet-Hyams;; linkage names are added to declarations referenced by DW_AT_call_origin 8*0e44ffe8SOrlando Cazalet-Hyams;; attributes. 9*0e44ffe8SOrlando Cazalet-Hyams;; 10*0e44ffe8SOrlando Cazalet-Hyams;; $ cat test.cpp 11*0e44ffe8SOrlando Cazalet-Hyams;; void a(); 12*0e44ffe8SOrlando Cazalet-Hyams;; __attribute__((optnone)) 13*0e44ffe8SOrlando Cazalet-Hyams;; void b() {} 14*0e44ffe8SOrlando Cazalet-Hyams;; void c(); 15*0e44ffe8SOrlando Cazalet-Hyams;; extern "C" { 16*0e44ffe8SOrlando Cazalet-Hyams;; void d(); 17*0e44ffe8SOrlando Cazalet-Hyams;; } 18*0e44ffe8SOrlando Cazalet-Hyams;; 19*0e44ffe8SOrlando Cazalet-Hyams;; void e() { 20*0e44ffe8SOrlando Cazalet-Hyams;; a(); //< Reference declaration DIE (add linkage name). 21*0e44ffe8SOrlando Cazalet-Hyams;; b(); //< Reference definition DIE (don't add linkage name). 22*0e44ffe8SOrlando Cazalet-Hyams;; c(); //< Reference definition DIE (don't add linkage name). 23*0e44ffe8SOrlando Cazalet-Hyams;; d(); //< Reference declaration DIE, but there's no linkage name. 24*0e44ffe8SOrlando Cazalet-Hyams;; } 25*0e44ffe8SOrlando Cazalet-Hyams;; 26*0e44ffe8SOrlando Cazalet-Hyams;; __attribute__((optnone)) 27*0e44ffe8SOrlando Cazalet-Hyams;; void c() {} 28*0e44ffe8SOrlando Cazalet-Hyams;; $ clang++ -emit-llvm -S -O1 -g 29*0e44ffe8SOrlando Cazalet-Hyams 30*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_TAG_call_site 31*0e44ffe8SOrlando Cazalet-Hyams; ENABLE-NEXT: DW_AT_call_origin (0x[[a:[a-z0-9]+]] "_Z1av") 32*0e44ffe8SOrlando Cazalet-Hyams; DISABLE-NEXT: DW_AT_call_origin (0x[[a:[a-z0-9]+]] "a") 33*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_TAG_call_site 34*0e44ffe8SOrlando Cazalet-Hyams; COMMON-NEXT: DW_AT_call_origin (0x[[b:[a-z0-9]+]] "b") 35*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_TAG_call_site 36*0e44ffe8SOrlando Cazalet-Hyams; COMMON-NEXT: DW_AT_call_origin (0x[[c:[a-z0-9]+]] "c") 37*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_TAG_call_site 38*0e44ffe8SOrlando Cazalet-Hyams; COMMON-NEXT: DW_AT_call_origin (0x[[d:[a-z0-9]+]] "d") 39*0e44ffe8SOrlando Cazalet-Hyams 40*0e44ffe8SOrlando Cazalet-Hyams; COMMON: 0x[[a]]: DW_TAG_subprogram 41*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_AT_name ("a") 42*0e44ffe8SOrlando Cazalet-Hyams; ENABLE: DW_AT_linkage_name ("_Z1av") 43*0e44ffe8SOrlando Cazalet-Hyams; COMMON: 0x[[b]]: DW_TAG_subprogram 44*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_AT_name ("b") 45*0e44ffe8SOrlando Cazalet-Hyams; COMMON: 0x[[c]]: DW_TAG_subprogram 46*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_AT_name ("c") 47*0e44ffe8SOrlando Cazalet-Hyams; COMMON: 0x[[d]]: DW_TAG_subprogram 48*0e44ffe8SOrlando Cazalet-Hyams; COMMON: DW_AT_name ("d") 49*0e44ffe8SOrlando Cazalet-Hyams 50*0e44ffe8SOrlando Cazalet-Hyamstarget triple = "x86_64-unknown-linux-gnu" 51*0e44ffe8SOrlando Cazalet-Hyams 52*0e44ffe8SOrlando Cazalet-Hyamsdefine dso_local void @_Z1ev() local_unnamed_addr !dbg !13 { 53*0e44ffe8SOrlando Cazalet-Hyamsentry: 54*0e44ffe8SOrlando Cazalet-Hyams tail call void @_Z1av(), !dbg !14 55*0e44ffe8SOrlando Cazalet-Hyams tail call void @_Z1bv(), !dbg !15 56*0e44ffe8SOrlando Cazalet-Hyams tail call void @_Z1cv(), !dbg !16 57*0e44ffe8SOrlando Cazalet-Hyams tail call void @d(), !dbg !17 58*0e44ffe8SOrlando Cazalet-Hyams ret void, !dbg !18 59*0e44ffe8SOrlando Cazalet-Hyams} 60*0e44ffe8SOrlando Cazalet-Hyams 61*0e44ffe8SOrlando Cazalet-Hyamsdefine dso_local void @_Z1bv() local_unnamed_addr !dbg !9 { 62*0e44ffe8SOrlando Cazalet-Hyamsentry: 63*0e44ffe8SOrlando Cazalet-Hyams ret void, !dbg !12 64*0e44ffe8SOrlando Cazalet-Hyams} 65*0e44ffe8SOrlando Cazalet-Hyams 66*0e44ffe8SOrlando Cazalet-Hyamsdeclare !dbg !19 void @_Z1av() local_unnamed_addr 67*0e44ffe8SOrlando Cazalet-Hyams 68*0e44ffe8SOrlando Cazalet-Hyamsdefine dso_local void @_Z1cv() local_unnamed_addr !dbg !20 { 69*0e44ffe8SOrlando Cazalet-Hyamsentry: 70*0e44ffe8SOrlando Cazalet-Hyams ret void, !dbg !21 71*0e44ffe8SOrlando Cazalet-Hyams} 72*0e44ffe8SOrlando Cazalet-Hyamsdeclare !dbg !22 void @d() local_unnamed_addr 73*0e44ffe8SOrlando Cazalet-Hyams 74*0e44ffe8SOrlando Cazalet-Hyams!llvm.dbg.cu = !{!0} 75*0e44ffe8SOrlando Cazalet-Hyams!llvm.module.flags = !{!2, !3} 76*0e44ffe8SOrlando Cazalet-Hyams!llvm.ident = !{!8} 77*0e44ffe8SOrlando Cazalet-Hyams 78*0e44ffe8SOrlando Cazalet-Hyams!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 19.0.0git", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None) 79*0e44ffe8SOrlando Cazalet-Hyams!1 = !DIFile(filename: "test.cpp", directory: "/") 80*0e44ffe8SOrlando Cazalet-Hyams!2 = !{i32 7, !"Dwarf Version", i32 5} 81*0e44ffe8SOrlando Cazalet-Hyams!3 = !{i32 2, !"Debug Info Version", i32 3} 82*0e44ffe8SOrlando Cazalet-Hyams!8 = !{!"clang version 19.0.0"} 83*0e44ffe8SOrlando Cazalet-Hyams!9 = distinct !DISubprogram(name: "b", linkageName: "_Z1bv", scope: !1, file: !1, line: 3, type: !10, scopeLine: 3, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0) 84*0e44ffe8SOrlando Cazalet-Hyams!10 = !DISubroutineType(types: !11) 85*0e44ffe8SOrlando Cazalet-Hyams!11 = !{null} 86*0e44ffe8SOrlando Cazalet-Hyams!12 = !DILocation(line: 3, column: 11, scope: !9) 87*0e44ffe8SOrlando Cazalet-Hyams!13 = distinct !DISubprogram(name: "e", linkageName: "_Z1ev", scope: !1, file: !1, line: 9, type: !10, scopeLine: 9, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0) 88*0e44ffe8SOrlando Cazalet-Hyams!14 = !DILocation(line: 10, column: 3, scope: !13) 89*0e44ffe8SOrlando Cazalet-Hyams!15 = !DILocation(line: 11, column: 3, scope: !13) 90*0e44ffe8SOrlando Cazalet-Hyams!16 = !DILocation(line: 12, column: 3, scope: !13) 91*0e44ffe8SOrlando Cazalet-Hyams!17 = !DILocation(line: 13, column: 3, scope: !13) 92*0e44ffe8SOrlando Cazalet-Hyams!18 = !DILocation(line: 14, column: 1, scope: !13) 93*0e44ffe8SOrlando Cazalet-Hyams!19 = !DISubprogram(name: "a", linkageName: "_Z1av", scope: !1, file: !1, line: 1, type: !10, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) 94*0e44ffe8SOrlando Cazalet-Hyams!20 = distinct !DISubprogram(name: "c", linkageName: "_Z1cv", scope: !1, file: !1, line: 17, type: !10, scopeLine: 17, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0) 95*0e44ffe8SOrlando Cazalet-Hyams!21 = !DILocation(line: 17, column: 11, scope: !20) 96*0e44ffe8SOrlando Cazalet-Hyams!22 = !DISubprogram(name: "d", scope: !1, file: !1, line: 6, type: !10, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized) 97