brintos

brintos / llvm-project-archived public Read only

0
0
Text · 19.2 KiB · 6b1279b Raw
405 lines · plain
1; RUN: llc -mtriple=x86_64-pc-linux-gnu < %s | FileCheck -check-prefix=ASM %s2; RUN: llc -mtriple=x86_64-pc-linux-gnu -filetype=obj < %s | llvm-dwarfdump --debug-info --debug-gnu-pubnames --debug-gnu-pubtypes - | FileCheck %s --implicit-check-not "{{DW_TAG|NULL}}"3; ModuleID = 'dwarf-public-names.cpp'4;5; Generated from:6;7; struct C {8;   void member_function();9;   static int static_member_function();10;   static int static_member_variable;11; };12;13; int C::static_member_variable = 0;14;15; void C::member_function() {16;   static_member_variable = 0;17; }18;19; int C::static_member_function() {20;   return static_member_variable;21; }22;23; C global_variable;24;25; int global_function() {26;   return -1;27; }28;29; namespace ns {30;   void global_namespace_function() {31;     global_variable.member_function();32;   }33;   int global_namespace_variable = 1;34;   extern int global_namespace_variable_decl;35;   struct D {36;     int A;37;   } d;38; }39;40; using ns::global_namespace_variable_decl;41;42; namespace {43; int i;44; }45;46; int *f3() {47;   static int z;48;   return &z;49; }50;51; namespace {52; namespace inner {53; int b;54; }55; }56;57; namespace outer {58; namespace {59; int c;60; }61; }62;63; int f7() {64;   return i + *f3() + inner::b + outer::c;65; }66 67; ASM: .section        .debug_gnu_pubnames68; ASM: .byte   32                      # Attributes: VARIABLE, EXTERNAL69; ASM-NEXT: .asciz  "C::static_member_variable"           # External Name70; ASM: .byte   32                      # Attributes: VARIABLE, EXTERNAL71; ASM-NEXT: .asciz  "global_variable"       # External Name72; ASM: .byte   32                      # Attributes: VARIABLE, EXTERNAL73; ASM-NEXT: .asciz  "ns::global_namespace_variable"       # External Name74 75; ASM: .section        .debug_gnu_pubtypes76; ASM: .byte   16                      # Attributes: TYPE, EXTERNAL77; ASM-NEXT: .asciz  "C"                     # External Name78 79; CHECK: .debug_info contents:80; CHECK: DW_TAG_compile_unit81; CHECK:   DW_AT_GNU_pubnames (true)82; CHECK-NOT: DW_AT_GNU_pubtypes [83 84; CHECK:   [[STATIC_MEM_VAR:0x[0-9a-f]+]]: DW_TAG_variable85; CHECK:     DW_AT_specification {{.*}} "static_member_variable"86 87; CHECK:   [[C:0x[0-9a-f]+]]: DW_TAG_structure_type88; CHECK:     DW_AT_name ("C")89; CHECK:     DW_TAG_member90; CHECK:       DW_AT_name ("static_member_variable")91; CHECK:     DW_TAG_subprogram92; CHECK:       DW_AT_linkage_name93; CHECK:       DW_AT_name ("member_function")94; CHECK:       DW_TAG_formal_parameter95; CHECK:       NULL96; CHECK:     DW_TAG_subprogram97; CHECK:       DW_AT_linkage_name98; CHECK:       DW_AT_name ("static_member_function")99; CHECK:     NULL100 101; CHECK:   [[INT:0x[0-9a-f]+]]: DW_TAG_base_type102; CHECK:     DW_AT_name ("int")103; CHECK:   DW_TAG_pointer_type104 105; CHECK:   [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable106; CHECK:     DW_AT_name ("global_variable")107 108; CHECK:   [[NS:0x[0-9a-f]+]]: DW_TAG_namespace109; CHECK:     DW_AT_name ("ns")110; CHECK:     [[GLOB_NS_VAR:0x[0-9a-f]+]]: DW_TAG_variable111; CHECK:       DW_AT_name ("global_namespace_variable")112; CHECK-NOT:   DW_AT_specification113; CHECK:       DW_AT_location114; CHECK-NOT:   DW_AT_specification115; CHECK:     [[D_VAR:0x[0-9a-f]+]]: DW_TAG_variable116; CHECK:       DW_AT_name ("d")117; CHECK-NOT:   DW_AT_specification118; CHECK:       DW_AT_location119; CHECK-NOT:   DW_AT_specification120; CHECK:     [[D:0x[0-9a-f]+]]: DW_TAG_structure_type121; CHECK:       DW_AT_name ("D")122; CHECK:       DW_TAG_member123; CHECK:       NULL124; CHECK:     [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram125; CHECK:       DW_AT_linkage_name126; CHECK:       DW_AT_name ("global_namespace_function")127; CHECK:     DW_TAG_variable128; CHECK:     NULL129 130; CHECK:   [[F3:0x[0-9a-f]+]]: DW_TAG_subprogram131; CHECK:     DW_AT_name ("f3")132; CHECK:     [[F3_Z:.*]]: DW_TAG_variable133; CHECK:       DW_AT_name ("z")134; CHECK:       DW_AT_location135; CHECK:     NULL136 137; CHECK:   [[ANON:.*]]: DW_TAG_namespace138; CHECK-NOT: DW_AT_name139; CHECK:     [[ANON_I:.*]]: DW_TAG_variable140; CHECK:       DW_AT_name ("i")141; CHECK:       [[ANON_INNER:.*]]:  DW_TAG_namespace142; CHECK:         DW_AT_name ("inner")143; CHECK:         [[ANON_INNER_B:.*]]: DW_TAG_variable144; CHECK:           DW_AT_name ("b")145; CHECK:         NULL146; CHECK:     NULL147 148; CHECK:   [[OUTER:.*]]: DW_TAG_namespace149; CHECK:     DW_AT_name ("outer")150; CHECK:     [[OUTER_ANON:.*]]:  DW_TAG_namespace151; CHECK-NOT:   DW_AT_name152; CHECK:       [[OUTER_ANON_C:.*]]: DW_TAG_variable153; CHECK:         DW_AT_name ("c")154; CHECK:       NULL155; CHECK:     NULL156 157; CHECK:   DW_TAG_enumeration158; CHECK:     [[UNNAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator159; CHECK:       DW_AT_name ("unnamed_enum_enumerator")160; CHECK:     NULL161 162; CHECK:   [[UNSIGNED_INT:0x[0-9a-f]+]]: DW_TAG_base_type163; CHECK:     DW_AT_name ("unsigned int")164 165; CHECK:   [[NAMED_ENUM:0x[0-9a-f]+]]: DW_TAG_enumeration166; CHECK:     DW_AT_name ("named_enum")167; CHECK:     [[NAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator168; CHECK:       DW_AT_name ("named_enum_enumerator")169; CHECK:     NULL170 171; CHECK:   [[NAMED_ENUM_CLASS:0x[0-9a-f]+]]: DW_TAG_enumeration172; CHECK:     DW_AT_name ("named_enum_class")173; CHECK:     [[NAMED_ENUM_CLASS_ENUMERATOR:0x[0-9a-f]+]]:  DW_TAG_enumerator174; CHECK:       DW_AT_name ("named_enum_class_enumerator")175; CHECK:     NULL176 177; CHECK:   [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram178; CHECK:     DW_AT_specification {{.*}} "_ZN1C15member_functionEv"179; CHECK:     DW_TAG_formal_parameter180; CHECK:     NULL181 182; CHECK:   [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram183; CHECK:     DW_AT_specification {{.*}} "_ZN1C22static_member_functionEv"184 185; CHECK:   [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram186; CHECK:     DW_AT_linkage_name187; CHECK:     DW_AT_name ("global_function")188 189; CHECK:   [[GLOBAL_F7:0x[0-9a-f]+]]: DW_TAG_subprogram190; CHECK:     DW_AT_linkage_name191; CHECK:     DW_AT_name ("f7")192 193; CHECK:   DW_TAG_imported_declaration194; CHECK:   DW_TAG_pointer_type195; CHECK:   DW_TAG_pointer_type196; CHECK:   NULL197 198; CHECK-LABEL: .debug_gnu_pubnames contents:199; CHECK-NEXT: length = {{.*}}, version = 0x0002, unit_offset = 0x00000000, unit_size = {{.*}}200; CHECK-NEXT: Offset     Linkage  Kind     Name201; CHECK-NEXT:  [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable"202; CHECK-NEXT:  [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable"203; CHECK-NEXT:  [[NS]] EXTERNAL TYPE     "ns"204; CHECK-NEXT:  [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable"205; CHECK-NEXT:  [[D_VAR]] EXTERNAL VARIABLE "ns::d"206; CHECK-NEXT:  [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function"207; CHECK-NEXT:  [[F3]] EXTERNAL FUNCTION "f3"208; GCC Doesn't put local statics in pubnames, but it seems not unreasonable and209; comes out naturally from LLVM's implementation, so I'm OK with it for now. If210; it's demonstrated that this is a major size concern or degrades debug info211; consumer behavior, feel free to change it.212; CHECK-NEXT:  [[F3_Z]] STATIC VARIABLE "f3::z"213; CHECK-NEXT:  [[ANON]] EXTERNAL TYPE "(anonymous namespace)"214; CHECK-NEXT:  [[ANON_I]] STATIC VARIABLE "(anonymous namespace)::i"215; CHECK-NEXT:  [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner"216; CHECK-NEXT:  [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b"217; CHECK-NEXT:  [[OUTER]] EXTERNAL TYPE "outer"218; CHECK-NEXT:  [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)"219; CHECK-NEXT:  [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c"220; CHECK-NEXT:  [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE  "unnamed_enum_enumerator"221; CHECK-NEXT:  [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE  "named_enum_enumerator"222; CHECK-NEXT:  [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE  "named_enum_class_enumerator"223; CHECK-NEXT:  [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function"224; CHECK-NEXT:  [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function"225; FIXME: GCC produces enumerators as EXTERNAL, not STATIC226; CHECK-NEXT:  [[GLOBAL_FUNC]] EXTERNAL FUNCTION "global_function"227; CHECK-NEXT:  [[GLOBAL_F7]] EXTERNAL FUNCTION "f7"228 229; CHECK-LABEL: debug_gnu_pubtypes contents:230; CHECK: Offset     Linkage  Kind     Name231; CHECK-NEXT:  [[C]] EXTERNAL TYPE     "C"232; CHECK-NEXT:  [[INT]] STATIC   TYPE     "int"233; CHECK-NEXT:  [[D]] EXTERNAL TYPE     "ns::D"234; CHECK-NEXT:  [[UNSIGNED_INT]] STATIC   TYPE     "unsigned int"235; CHECK-NEXT:  [[NAMED_ENUM]] EXTERNAL TYPE     "named_enum"236; CHECK-NEXT:  [[NAMED_ENUM_CLASS]] EXTERNAL TYPE     "named_enum_class"237 238%struct.C = type { i8 }239%"struct.ns::D" = type { i32 }240 241@_ZN1C22static_member_variableE = dso_local global i32 0, align 4, !dbg !0242@global_variable = dso_local global %struct.C zeroinitializer, align 1, !dbg !18243@_ZN2ns25global_namespace_variableE = dso_local global i32 1, align 4, !dbg !29244@_ZN2ns1dE = dso_local global %"struct.ns::D" zeroinitializer, align 4, !dbg !32245@_ZZ2f3vE1z = internal global i32 0, align 4, !dbg !37246@_ZN12_GLOBAL__N_11iE = internal global i32 0, align 4, !dbg !44247@_ZN12_GLOBAL__N_15inner1bE = internal global i32 0, align 4, !dbg !47248@_ZN5outer12_GLOBAL__N_11cE = internal global i32 0, align 4, !dbg !50249 250; Function Attrs: noinline nounwind optnone uwtable251define dso_local void @_ZN1C15member_functionEv(ptr %this) #0 align 2 !dbg !61 {252entry:253  %this.addr = alloca ptr, align 8254  store ptr %this, ptr %this.addr, align 8255  call void @llvm.dbg.declare(metadata ptr %this.addr, metadata !62, metadata !DIExpression()), !dbg !64256  %this1 = load ptr, ptr %this.addr, align 8257  store i32 0, ptr @_ZN1C22static_member_variableE, align 4, !dbg !65258  ret void, !dbg !66259}260 261; Function Attrs: nounwind readnone speculatable262declare void @llvm.dbg.declare(metadata, metadata, metadata) #1263 264; Function Attrs: noinline nounwind optnone uwtable265define dso_local i32 @_ZN1C22static_member_functionEv() #0 align 2 !dbg !67 {266entry:267  %0 = load i32, ptr @_ZN1C22static_member_variableE, align 4, !dbg !68268  ret i32 %0, !dbg !69269}270 271; Function Attrs: noinline nounwind optnone uwtable272define dso_local i32 @_Z15global_functionv() #0 !dbg !70 {273entry:274  ret i32 -1, !dbg !71275}276 277; Function Attrs: noinline nounwind optnone uwtable278define dso_local void @_ZN2ns25global_namespace_functionEv() #0 !dbg !72 {279entry:280  call void @_ZN1C15member_functionEv(ptr @global_variable), !dbg !75281  ret void, !dbg !76282}283 284; Function Attrs: noinline nounwind optnone uwtable285define dso_local ptr @_Z2f3v() #0 !dbg !39 {286entry:287  ret ptr @_ZZ2f3vE1z, !dbg !77288}289 290; Function Attrs: noinline nounwind optnone uwtable291define dso_local i32 @_Z2f7v() #0 !dbg !78 {292entry:293  %0 = load i32, ptr @_ZN12_GLOBAL__N_11iE, align 4, !dbg !79294  %call = call ptr @_Z2f3v(), !dbg !80295  %1 = load i32, ptr %call, align 4, !dbg !81296  %add = add nsw i32 %0, %1, !dbg !82297  %2 = load i32, ptr @_ZN12_GLOBAL__N_15inner1bE, align 4, !dbg !83298  %add1 = add nsw i32 %add, %2, !dbg !84299  %3 = load i32, ptr @_ZN5outer12_GLOBAL__N_11cE, align 4, !dbg !85300  %add2 = add nsw i32 %add1, %3, !dbg !86301  %add3 = add nsw i32 %add2, 0, !dbg !87302  %add4 = add nsw i32 %add3, 0, !dbg !88303  %add5 = add nsw i32 %add4, 0, !dbg !89304  ret i32 %add5, !dbg !90305}306 307attributes #0 = { noinline nounwind optnone uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "frame-pointer"="all" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }308attributes #1 = { nounwind readnone speculatable }309 310!llvm.dbg.cu = !{!2}311!llvm.module.flags = !{!57, !58, !59}312!llvm.ident = !{!60}313 314!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())315!1 = distinct !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", scope: !2, file: !3, line: 7, type: !13, isLocal: false, isDefinition: true, declaration: !22)316!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_03, file: !3, producer: "clang version 9.0.0 (trunk 363288) (llvm/trunk 363294)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !16, globals: !17, imports: !54, nameTableKind: GNU)317!3 = !DIFile(filename: "names.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch")318!4 = !{!5, !9, !12}319!5 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !3, line: 49, baseType: !6, size: 32, elements: !7)320!6 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)321!7 = !{!8}322!8 = !DIEnumerator(name: "unnamed_enum_enumerator", value: 0, isUnsigned: true)323!9 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "named_enum", file: !3, line: 52, baseType: !6, size: 32, elements: !10, identifier: "_ZTS10named_enum")324!10 = !{!11}325!11 = !DIEnumerator(name: "named_enum_enumerator", value: 0, isUnsigned: true)326!12 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "named_enum_class", file: !3, line: 55, baseType: !13, size: 32, flags: DIFlagEnumClass, elements: !14, identifier: "_ZTS16named_enum_class")327!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)328!14 = !{!15}329!15 = !DIEnumerator(name: "named_enum_class_enumerator", value: 0)330!16 = !{!13}331!17 = !{!0, !18, !29, !32, !37, !44, !47, !50}332!18 = !DIGlobalVariableExpression(var: !19, expr: !DIExpression())333!19 = distinct !DIGlobalVariable(name: "global_variable", scope: !2, file: !3, line: 13, type: !20, isLocal: false, isDefinition: true)334!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !3, line: 1, size: 8, flags: DIFlagTypePassByValue, elements: !21, identifier: "_ZTS1C")335!21 = !{!22, !23, !27}336!22 = !DIDerivedType(tag: DW_TAG_member, name: "static_member_variable", scope: !20, file: !3, line: 4, baseType: !13, flags: DIFlagStaticMember)337!23 = !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !20, file: !3, line: 2, type: !24, scopeLine: 2, flags: DIFlagPrototyped, spFlags: 0)338!24 = !DISubroutineType(types: !25)339!25 = !{null, !26}340!26 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)341!27 = !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !20, file: !3, line: 3, type: !28, scopeLine: 3, flags: DIFlagPrototyped | DIFlagStaticMember, spFlags: 0)342!28 = !DISubroutineType(types: !16)343!29 = !DIGlobalVariableExpression(var: !30, expr: !DIExpression())344!30 = distinct !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", scope: !31, file: !3, line: 19, type: !13, isLocal: false, isDefinition: true)345!31 = !DINamespace(name: "ns", scope: null)346!32 = !DIGlobalVariableExpression(var: !33, expr: !DIExpression())347!33 = distinct !DIGlobalVariable(name: "d", linkageName: "_ZN2ns1dE", scope: !31, file: !3, line: 23, type: !34, isLocal: false, isDefinition: true)348!34 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "D", scope: !31, file: !3, line: 21, size: 32, flags: DIFlagTypePassByValue, elements: !35, identifier: "_ZTSN2ns1DE")349!35 = !{!36}350!36 = !DIDerivedType(tag: DW_TAG_member, name: "A", scope: !34, file: !3, line: 22, baseType: !13, size: 32)351!37 = !DIGlobalVariableExpression(var: !38, expr: !DIExpression())352!38 = distinct !DIGlobalVariable(name: "z", scope: !39, file: !3, line: 33, type: !13, isLocal: true, isDefinition: true)353!39 = distinct !DISubprogram(name: "f3", linkageName: "_Z2f3v", scope: !3, file: !3, line: 32, type: !40, scopeLine: 32, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !43)354!40 = !DISubroutineType(types: !41)355!41 = !{!42}356!42 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64)357!43 = !{}358!44 = !DIGlobalVariableExpression(var: !45, expr: !DIExpression())359!45 = distinct !DIGlobalVariable(name: "i", linkageName: "_ZN12_GLOBAL__N_11iE", scope: !46, file: !3, line: 29, type: !13, isLocal: true, isDefinition: true)360!46 = !DINamespace(scope: null)361!47 = !DIGlobalVariableExpression(var: !48, expr: !DIExpression())362!48 = distinct !DIGlobalVariable(name: "b", linkageName: "_ZN12_GLOBAL__N_15inner1bE", scope: !49, file: !3, line: 39, type: !13, isLocal: true, isDefinition: true)363!49 = !DINamespace(name: "inner", scope: !46)364!50 = !DIGlobalVariableExpression(var: !51, expr: !DIExpression())365!51 = distinct !DIGlobalVariable(name: "c", linkageName: "_ZN5outer12_GLOBAL__N_11cE", scope: !52, file: !3, line: 45, type: !13, isLocal: true, isDefinition: true)366!52 = !DINamespace(scope: !53)367!53 = !DINamespace(name: "outer", scope: null)368!54 = !{!55}369!55 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !2, entity: !56, file: !3, line: 26)370!56 = !DIGlobalVariable(name: "global_namespace_variable_decl", linkageName: "_ZN2ns30global_namespace_variable_declE", scope: !31, file: !3, line: 20, type: !13, isLocal: false, isDefinition: false)371!57 = !{i32 2, !"Dwarf Version", i32 4}372!58 = !{i32 2, !"Debug Info Version", i32 3}373!59 = !{i32 1, !"wchar_size", i32 4}374!60 = !{!"clang version 9.0.0 (trunk 363288) (llvm/trunk 363294)"}375!61 = distinct !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !20, file: !3, line: 9, type: !24, scopeLine: 9, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, declaration: !23, retainedNodes: !43)376!62 = !DILocalVariable(name: "this", arg: 1, scope: !61, type: !63, flags: DIFlagArtificial | DIFlagObjectPointer)377!63 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)378!64 = !DILocation(line: 0, scope: !61)379!65 = !DILocation(line: 9, column: 52, scope: !61)380!66 = !DILocation(line: 9, column: 57, scope: !61)381!67 = distinct !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !20, file: !3, line: 11, type: !28, scopeLine: 11, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, declaration: !27, retainedNodes: !43)382!68 = !DILocation(line: 11, column: 42, scope: !67)383!69 = !DILocation(line: 11, column: 35, scope: !67)384!70 = distinct !DISubprogram(name: "global_function", linkageName: "_Z15global_functionv", scope: !3, file: !3, line: 15, type: !28, scopeLine: 15, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !43)385!71 = !DILocation(line: 15, column: 25, scope: !70)386!72 = distinct !DISubprogram(name: "global_namespace_function", linkageName: "_ZN2ns25global_namespace_functionEv", scope: !31, file: !3, line: 18, type: !73, scopeLine: 18, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !43)387!73 = !DISubroutineType(types: !74)388!74 = !{null}389!75 = !DILocation(line: 18, column: 52, scope: !72)390!76 = !DILocation(line: 18, column: 71, scope: !72)391!77 = !DILocation(line: 34, column: 3, scope: !39)392!78 = distinct !DISubprogram(name: "f7", linkageName: "_Z2f7v", scope: !3, file: !3, line: 58, type: !28, scopeLine: 58, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, retainedNodes: !43)393!79 = !DILocation(line: 59, column: 10, scope: !78)394!80 = !DILocation(line: 59, column: 15, scope: !78)395!81 = !DILocation(line: 59, column: 14, scope: !78)396!82 = !DILocation(line: 59, column: 12, scope: !78)397!83 = !DILocation(line: 59, column: 22, scope: !78)398!84 = !DILocation(line: 59, column: 20, scope: !78)399!85 = !DILocation(line: 59, column: 33, scope: !78)400!86 = !DILocation(line: 59, column: 31, scope: !78)401!87 = !DILocation(line: 59, column: 42, scope: !78)402!88 = !DILocation(line: 59, column: 68, scope: !78)403!89 = !DILocation(line: 60, column: 32, scope: !78)404!90 = !DILocation(line: 59, column: 3, scope: !78)405