From 55019e5ab67e96df19f93cfde032b182ccce39fd Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 14 Jun 2019 01:58:56 +0000 Subject: [PATCH] DebugInfo: Include enumerators in pubnames This is consistent with GCC's behavior (which is the defacto standard for pubnames). Though I find the presence of enumerators from enum classes to be a bit confusing, possibly a bug on GCC's end (since they can't be named unqualified, unlike the other names - and names nested in classes don't go in pubnames, for instance - presumably because one must name the class first & that's enough to limit the scope of the search) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363349 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 5 + test/DebugInfo/X86/gnu-public-names.ll | 366 +++++++++++++++---------- 2 files changed, 224 insertions(+), 147 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index b89162cdab0..991ab94b50a 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -1393,6 +1393,9 @@ void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) { addFlag(Buffer, dwarf::DW_AT_enum_class); } + auto *Context = CTy->getScope(); + bool IndexEnumerators = !Context || isa(Context) || isa(Context) || + isa(Context) || isa(Context); DINodeArray Elements = CTy->getElements(); // Add enumerators to enumeration type. @@ -1404,6 +1407,8 @@ void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, const DICompositeType *CTy) { addString(Enumerator, dwarf::DW_AT_name, Name); auto Value = static_cast(Enum->getValue()); addConstantValue(Enumerator, IsUnsigned, Value); + if (IndexEnumerators) + addGlobalName(Name, Enumerator, Context); } } } diff --git a/test/DebugInfo/X86/gnu-public-names.ll b/test/DebugInfo/X86/gnu-public-names.ll index a7ac9e2cb0b..6ea2fd5135c 100644 --- a/test/DebugInfo/X86/gnu-public-names.ll +++ b/test/DebugInfo/X86/gnu-public-names.ll @@ -81,51 +81,64 @@ ; CHECK-NEXT: DW_AT_specification {{.*}} "static_member_variable" ; CHECK: [[C:0x[0-9a-f]+]]: DW_TAG_structure_type -; CHECK-NEXT: DW_AT_name {{.*}} "C" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "C" ; CHECK: DW_TAG_member -; CHECK-NEXT: DW_AT_name {{.*}} "static_member_variable" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "static_member_variable" ; CHECK: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_linkage_name -; CHECK-NEXT: DW_AT_name {{.*}} "member_function" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_linkage_name +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "member_function" ; CHECK: DW_TAG_subprogram -; CHECK-NEXT: DW_AT_linkage_name -; CHECK-NEXT: DW_AT_name {{.*}} "static_member_function" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_linkage_name +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "static_member_function" ; CHECK: [[INT:0x[0-9a-f]+]]: DW_TAG_base_type -; CHECK-NEXT: DW_AT_name {{.*}} "int" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "int" ; CHECK: [[GLOB_VAR:0x[0-9a-f]+]]: DW_TAG_variable -; CHECK-NEXT: DW_AT_name {{.*}} "global_variable" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "global_variable" ; CHECK: [[NS:0x[0-9a-f]+]]: DW_TAG_namespace -; CHECK-NEXT: DW_AT_name {{.*}} "ns" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "ns" ; CHECK: [[GLOB_NS_VAR:0x[0-9a-f]+]]: DW_TAG_variable -; CHECK-NEXT: DW_AT_name {{.*}} "global_namespace_variable" +; CHECK-NOT: {{DW_TAG|NULL|DW_AT_specification}} +; CHECK: DW_AT_name {{.*}} "global_namespace_variable" +; CHECK-NOT: {{DW_TAG|NULL|DW_AT_specification}} ; CHECK-NOT: DW_AT_specification ; CHECK: DW_AT_location ; CHECK-NOT: DW_AT_specification ; CHECK: [[D_VAR:0x[0-9a-f]+]]: DW_TAG_variable -; CHECK-NEXT: DW_AT_name {{.*}} "d" -; CHECK-NOT: DW_AT_specification +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "d" +; CHECK-NOT: {{DW_TAG|NULL|DW_AT_specification}} ; CHECK: DW_AT_location ; CHECK-NOT: DW_AT_specification ; CHECK: [[D:0x[0-9a-f]+]]: DW_TAG_structure_type -; CHECK-NEXT: DW_AT_name {{.*}} "D" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "D" ; CHECK: [[GLOB_NS_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_linkage_name -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_name {{.*}} "global_namespace_function" ; CHECK: DW_TAG_subprogram -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_name {{.*}} "f3" ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: [[F3_Z:.*]]: DW_TAG_variable @@ -140,7 +153,7 @@ ; CHECK: [[ANON:.*]]: DW_TAG_namespace ; CHECK-NOT: DW_AT_name ; CHECK: [[ANON_I:.*]]: DW_TAG_variable -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_name {{.*}} "i" ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: [[ANON_INNER:.*]]: DW_TAG_namespace @@ -157,7 +170,7 @@ ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: [[OUTER:.*]]: DW_TAG_namespace -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_name {{.*}} "outer" ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: [[OUTER_ANON:.*]]: DW_TAG_namespace @@ -169,29 +182,60 @@ ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: NULL ; CHECK-NOT: {{DW_TAG|NULL}} -; FIXME: We probably shouldn't bother describing the implicit -; import of the preceding anonymous namespace. This should be fixed -; in clang. -; CHECK: DW_TAG_imported_module +; CHECK: NULL ; CHECK-NOT: {{DW_TAG|NULL}} -; CHECK: NULL + +; CHECK: DW_TAG_enumeration +; CHECK-NOT: {{DW_AT_name|DW_TAG|NULL}} +; CHECK: [[UNNAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "unnamed_enum_enumerator" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} + +; CHECK: [[UNSIGNED_INT:0x[0-9a-f]+]]: DW_TAG_base_type +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "unsigned int" +; CHECK-NOT: {{DW_TAG|NULL}} + +; CHECK: [[NAMED_ENUM:0x[0-9a-f]+]]: DW_TAG_enumeration +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "named_enum" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[NAMED_ENUM_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "named_enum_enumerator" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL +; CHECK-NOT: {{DW_TAG|NULL}} + +; CHECK: [[NAMED_ENUM_CLASS:0x[0-9a-f]+]]: DW_TAG_enumeration +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "named_enum_class" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: [[NAMED_ENUM_CLASS_ENUMERATOR:0x[0-9a-f]+]]: DW_TAG_enumerator +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: DW_AT_name {{.*}} "named_enum_class_enumerator" +; CHECK-NOT: {{DW_TAG|NULL}} +; CHECK: NULL ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_TAG_imported_declaration ; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: [[MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_specification {{.*}} "_ZN1C15member_functionEv" ; CHECK: [[STATIC_MEM_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_specification {{.*}} "_ZN1C22static_member_functionEv" ; CHECK: [[GLOBAL_FUNC:0x[0-9a-f]+]]: DW_TAG_subprogram -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_linkage_name -; CHECK-NOT: DW_TAG +; CHECK-NOT: {{DW_TAG|NULL}} ; CHECK: DW_AT_name {{.*}} "global_function" ; CHECK-LABEL: .debug_gnu_pubnames contents: @@ -201,6 +245,7 @@ ; CHECK-NEXT: [[NS]] EXTERNAL TYPE "ns" ; CHECK-NEXT: [[OUTER_ANON_C]] STATIC VARIABLE "outer::(anonymous namespace)::c" ; CHECK-NEXT: [[ANON_I]] STATIC VARIABLE "(anonymous namespace)::i" +; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function" ; GCC Doesn't put local statics in pubnames, but it seems not unreasonable and ; comes out naturally from LLVM's implementation, so I'm OK with it for now. If ; it's demonstrated that this is a major size concern or degrades debug info @@ -210,164 +255,191 @@ ; CHECK-NEXT: [[OUTER_ANON]] EXTERNAL TYPE "outer::(anonymous namespace)" ; CHECK-NEXT: [[ANON_INNER_B]] STATIC VARIABLE "(anonymous namespace)::inner::b" ; CHECK-NEXT: [[OUTER]] EXTERNAL TYPE "outer" +; FIXME: GCC produces enumerators as EXTERNAL, not STATIC +; CHECK-NEXT: [[NAMED_ENUM_CLASS_ENUMERATOR]] STATIC VARIABLE "named_enum_class_enumerator" ; CHECK-NEXT: [[MEM_FUNC]] EXTERNAL FUNCTION "C::member_function" ; CHECK-NEXT: [[GLOB_VAR]] EXTERNAL VARIABLE "global_variable" ; CHECK-NEXT: [[GLOB_NS_VAR]] EXTERNAL VARIABLE "ns::global_namespace_variable" ; CHECK-NEXT: [[ANON_INNER]] EXTERNAL TYPE "(anonymous namespace)::inner" ; CHECK-NEXT: [[D_VAR]] EXTERNAL VARIABLE "ns::d" -; CHECK-NEXT: [[GLOB_NS_FUNC]] EXTERNAL FUNCTION "ns::global_namespace_function" +; CHECK-NEXT: [[NAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "named_enum_enumerator" ; CHECK-NEXT: [[STATIC_MEM_VAR]] EXTERNAL VARIABLE "C::static_member_variable" ; CHECK-NEXT: [[STATIC_MEM_FUNC]] EXTERNAL FUNCTION "C::static_member_function" +; CHECK-NEXT: [[UNNAMED_ENUM_ENUMERATOR]] STATIC VARIABLE "unnamed_enum_enumerator" ; CHECK-LABEL: debug_gnu_pubtypes contents: ; CHECK: Offset Linkage Kind Name -; CHECK-DAG: [[C]] EXTERNAL TYPE "C" -; CHECK-DAG: [[D]] EXTERNAL TYPE "ns::D" -; CHECK-DAG: [[INT]] STATIC TYPE "int" - -source_filename = "test/DebugInfo/X86/gnu-public-names.ll" +; CHECK-NEXT: [[C]] EXTERNAL TYPE "C" +; CHECK-NEXT: [[UNSIGNED_INT]] STATIC TYPE "unsigned int" +; CHECK-NEXT: [[D]] EXTERNAL TYPE "ns::D" +; CHECK-NEXT: [[NAMED_ENUM]] EXTERNAL TYPE "named_enum" +; CHECK-NEXT: [[INT]] STATIC TYPE "int" +; CHECK-NEXT: [[NAMED_ENUM_CLASS]] EXTERNAL TYPE "named_enum_class" %struct.C = type { i8 } %"struct.ns::D" = type { i32 } -@_ZN1C22static_member_variableE = global i32 0, align 4, !dbg !0 -@global_variable = global %struct.C zeroinitializer, align 1, !dbg !22 -@_ZN2ns25global_namespace_variableE = global i32 1, align 4, !dbg !24 -@_ZN2ns1dE = global %"struct.ns::D" zeroinitializer, align 4, !dbg !26 -@_ZZ2f3vE1z = internal global i32 0, align 4, !dbg !28 -@_ZN12_GLOBAL__N_11iE = internal global i32 0, align 4, !dbg !34 -@_ZN12_GLOBAL__N_15inner1bE = internal global i32 0, align 4, !dbg !37 -@_ZN5outer12_GLOBAL__N_11cE = internal global i32 0, align 4, !dbg !40 - -; Function Attrs: nounwind uwtable -define void @_ZN1C15member_functionEv(%struct.C* %this) #0 align 2 !dbg !51 { +@_ZN1C22static_member_variableE = dso_local global i32 0, align 4, !dbg !0 +@global_variable = dso_local global %struct.C zeroinitializer, align 1, !dbg !18 +@_ZN2ns25global_namespace_variableE = dso_local global i32 1, align 4, !dbg !29 +@_ZN2ns1dE = dso_local global %"struct.ns::D" zeroinitializer, align 4, !dbg !32 +@_ZZ2f3vE1z = internal global i32 0, align 4, !dbg !37 +@_ZN12_GLOBAL__N_11iE = internal global i32 0, align 4, !dbg !44 +@_ZN12_GLOBAL__N_15inner1bE = internal global i32 0, align 4, !dbg !47 +@_ZN5outer12_GLOBAL__N_11cE = internal global i32 0, align 4, !dbg !50 + +; Function Attrs: noinline nounwind optnone uwtable +define dso_local void @_ZN1C15member_functionEv(%struct.C* %this) #0 align 2 !dbg !61 { entry: %this.addr = alloca %struct.C*, align 8 store %struct.C* %this, %struct.C** %this.addr, align 8 - call void @llvm.dbg.declare(metadata %struct.C** %this.addr, metadata !52, metadata !54), !dbg !55 - %this1 = load %struct.C*, %struct.C** %this.addr - store i32 0, i32* @_ZN1C22static_member_variableE, align 4, !dbg !56 - ret void, !dbg !57 + call void @llvm.dbg.declare(metadata %struct.C** %this.addr, metadata !62, metadata !DIExpression()), !dbg !64 + %this1 = load %struct.C*, %struct.C** %this.addr, align 8 + store i32 0, i32* @_ZN1C22static_member_variableE, align 4, !dbg !65 + ret void, !dbg !66 } -; Function Attrs: nounwind readnone +; Function Attrs: nounwind readnone speculatable declare void @llvm.dbg.declare(metadata, metadata, metadata) #1 -; Function Attrs: nounwind uwtable -define i32 @_ZN1C22static_member_functionEv() #0 align 2 !dbg !58 { +; Function Attrs: noinline nounwind optnone uwtable +define dso_local i32 @_ZN1C22static_member_functionEv() #0 align 2 !dbg !67 { entry: - %0 = load i32, i32* @_ZN1C22static_member_variableE, align 4, !dbg !59 - ret i32 %0, !dbg !59 + %0 = load i32, i32* @_ZN1C22static_member_variableE, align 4, !dbg !68 + ret i32 %0, !dbg !69 } -; Function Attrs: nounwind uwtable -define i32 @_Z15global_functionv() #0 !dbg !60 { +; Function Attrs: noinline nounwind optnone uwtable +define dso_local i32 @_Z15global_functionv() #0 !dbg !70 { entry: - ret i32 -1, !dbg !61 + ret i32 -1, !dbg !71 } -; Function Attrs: nounwind uwtable -define void @_ZN2ns25global_namespace_functionEv() #0 !dbg !62 { +; Function Attrs: noinline nounwind optnone uwtable +define dso_local void @_ZN2ns25global_namespace_functionEv() #0 !dbg !72 { entry: - call void @_ZN1C15member_functionEv(%struct.C* @global_variable), !dbg !65 - ret void, !dbg !66 + call void @_ZN1C15member_functionEv(%struct.C* @global_variable), !dbg !75 + ret void, !dbg !76 } -; Function Attrs: nounwind uwtable -define i32* @_Z2f3v() #0 !dbg !30 { +; Function Attrs: noinline nounwind optnone uwtable +define dso_local i32* @_Z2f3v() #0 !dbg !39 { entry: - ret i32* @_ZZ2f3vE1z, !dbg !67 + ret i32* @_ZZ2f3vE1z, !dbg !77 } -; Function Attrs: nounwind uwtable -define i32 @_Z2f7v() #0 !dbg !68 { +; Function Attrs: noinline nounwind optnone uwtable +define dso_local i32 @_Z2f7v() #0 !dbg !78 { entry: - %0 = load i32, i32* @_ZN12_GLOBAL__N_11iE, align 4, !dbg !69 - %call = call i32* @_Z2f3v(), !dbg !69 - %1 = load i32, i32* %call, align 4, !dbg !69 - %add = add nsw i32 %0, %1, !dbg !69 - %2 = load i32, i32* @_ZN12_GLOBAL__N_15inner1bE, align 4, !dbg !69 - %add1 = add nsw i32 %add, %2, !dbg !69 - %3 = load i32, i32* @_ZN5outer12_GLOBAL__N_11cE, align 4, !dbg !69 - %add2 = add nsw i32 %add1, %3, !dbg !69 - ret i32 %add2, !dbg !69 + %0 = load i32, i32* @_ZN12_GLOBAL__N_11iE, align 4, !dbg !79 + %call = call i32* @_Z2f3v(), !dbg !80 + %1 = load i32, i32* %call, align 4, !dbg !81 + %add = add nsw i32 %0, %1, !dbg !82 + %2 = load i32, i32* @_ZN12_GLOBAL__N_15inner1bE, align 4, !dbg !83 + %add1 = add nsw i32 %add, %2, !dbg !84 + %3 = load i32, i32* @_ZN5outer12_GLOBAL__N_11cE, align 4, !dbg !85 + %add2 = add nsw i32 %add1, %3, !dbg !86 + %add3 = add nsw i32 %add2, 0, !dbg !87 + %add4 = add nsw i32 %add3, 0, !dbg !88 + %add5 = add nsw i32 %add4, 0, !dbg !89 + ret i32 %add5, !dbg !90 } -attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "unsafe-fp-math"="false" "use-soft-float"="false" } -attributes #1 = { nounwind readnone } +attributes #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" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "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" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { nounwind readnone speculatable } !llvm.dbg.cu = !{!2} -!llvm.module.flags = !{!48, !49} -!llvm.ident = !{!50} +!llvm.module.flags = !{!57, !58, !59} +!llvm.ident = !{!60} !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression()) -!1 = !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", scope: !2, file: !3, line: 7, type: !9, isLocal: false, isDefinition: true, declaration: !8) -!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 3.7.0 (trunk 234897) (llvm/trunk 234911)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !5, globals: !21, imports: !44, nameTableKind: GNU) -!3 = !DIFile(filename: "gnu-public-names.cpp", directory: "/tmp/dbginfo") -!4 = !{} -!5 = !{!6, !17} -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !3, line: 1, size: 8, align: 8, elements: !7, identifier: "_ZTS1C") -!7 = !{!8, !10, !14} -!8 = !DIDerivedType(tag: DW_TAG_member, name: "static_member_variable", scope: !6, file: !3, line: 4, baseType: !9, flags: DIFlagStaticMember) -!9 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) -!10 = !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !6, file: !3, line: 2, type: !11, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false) -!11 = !DISubroutineType(types: !12) -!12 = !{null, !13} -!13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer) -!14 = !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !6, file: !3, line: 3, type: !15, isLocal: false, isDefinition: false, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false) -!15 = !DISubroutineType(types: !16) -!16 = !{!9} -!17 = !DICompositeType(tag: DW_TAG_structure_type, name: "D", scope: !18, file: !3, line: 29, size: 32, align: 32, elements: !19, identifier: "_ZTSN2ns1DE") -!18 = !DINamespace(name: "ns", scope: null) -!19 = !{!20} -!20 = !DIDerivedType(tag: DW_TAG_member, name: "A", scope: !17, file: !3, line: 30, baseType: !9, size: 32, align: 32) -!21 = !{!0, !22, !24, !26, !28, !34, !37, !40} -!22 = !DIGlobalVariableExpression(var: !23, expr: !DIExpression()) -!23 = !DIGlobalVariable(name: "global_variable", scope: !2, file: !3, line: 17, type: !6, isLocal: false, isDefinition: true) -!24 = !DIGlobalVariableExpression(var: !25, expr: !DIExpression()) -!25 = !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", scope: !18, file: !3, line: 27, type: !9, isLocal: false, isDefinition: true) -!26 = !DIGlobalVariableExpression(var: !27, expr: !DIExpression()) -!27 = !DIGlobalVariable(name: "d", linkageName: "_ZN2ns1dE", scope: !18, file: !3, line: 31, type: !17, isLocal: false, isDefinition: true) -!28 = !DIGlobalVariableExpression(var: !29, expr: !DIExpression()) -!29 = !DIGlobalVariable(name: "z", scope: !30, file: !3, line: 41, type: !9, isLocal: true, isDefinition: true) -!30 = distinct !DISubprogram(name: "f3", linkageName: "_Z2f3v", scope: !3, file: !3, line: 40, type: !31, isLocal: false, isDefinition: true, scopeLine: 40, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4) -!31 = !DISubroutineType(types: !32) -!32 = !{!33} -!33 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64, align: 64) -!34 = !DIGlobalVariableExpression(var: !35, expr: !DIExpression()) -!35 = !DIGlobalVariable(name: "i", linkageName: "_ZN12_GLOBAL__N_11iE", scope: !36, file: !3, line: 37, type: !9, isLocal: true, isDefinition: true) -!36 = !DINamespace(scope: null) +!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) +!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, 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) +!3 = !DIFile(filename: "names.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch") +!4 = !{!5, !9, !12} +!5 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !3, line: 49, baseType: !6, size: 32, elements: !7) +!6 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned) +!7 = !{!8} +!8 = !DIEnumerator(name: "unnamed_enum_enumerator", value: 0, isUnsigned: true) +!9 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "named_enum", file: !3, line: 52, baseType: !6, size: 32, elements: !10, identifier: "_ZTS10named_enum") +!10 = !{!11} +!11 = !DIEnumerator(name: "named_enum_enumerator", value: 0, isUnsigned: true) +!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") +!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +!14 = !{!15} +!15 = !DIEnumerator(name: "named_enum_class_enumerator", value: 0) +!16 = !{!13} +!17 = !{!0, !18, !29, !32, !37, !44, !47, !50} +!18 = !DIGlobalVariableExpression(var: !19, expr: !DIExpression()) +!19 = distinct !DIGlobalVariable(name: "global_variable", scope: !2, file: !3, line: 13, type: !20, isLocal: false, isDefinition: true) +!20 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", file: !3, line: 1, size: 8, flags: DIFlagTypePassByValue, elements: !21, identifier: "_ZTS1C") +!21 = !{!22, !23, !27} +!22 = !DIDerivedType(tag: DW_TAG_member, name: "static_member_variable", scope: !20, file: !3, line: 4, baseType: !13, flags: DIFlagStaticMember) +!23 = !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !20, file: !3, line: 2, type: !24, scopeLine: 2, flags: DIFlagPrototyped, spFlags: 0) +!24 = !DISubroutineType(types: !25) +!25 = !{null, !26} +!26 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer) +!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) +!28 = !DISubroutineType(types: !16) +!29 = !DIGlobalVariableExpression(var: !30, expr: !DIExpression()) +!30 = distinct !DIGlobalVariable(name: "global_namespace_variable", linkageName: "_ZN2ns25global_namespace_variableE", scope: !31, file: !3, line: 19, type: !13, isLocal: false, isDefinition: true) +!31 = !DINamespace(name: "ns", scope: null) +!32 = !DIGlobalVariableExpression(var: !33, expr: !DIExpression()) +!33 = distinct !DIGlobalVariable(name: "d", linkageName: "_ZN2ns1dE", scope: !31, file: !3, line: 23, type: !34, isLocal: false, isDefinition: true) +!34 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "D", scope: !31, file: !3, line: 21, size: 32, flags: DIFlagTypePassByValue, elements: !35, identifier: "_ZTSN2ns1DE") +!35 = !{!36} +!36 = !DIDerivedType(tag: DW_TAG_member, name: "A", scope: !34, file: !3, line: 22, baseType: !13, size: 32) !37 = !DIGlobalVariableExpression(var: !38, expr: !DIExpression()) -!38 = !DIGlobalVariable(name: "b", linkageName: "_ZN12_GLOBAL__N_15inner1bE", scope: !39, file: !3, line: 47, type: !9, isLocal: true, isDefinition: true) -!39 = !DINamespace(name: "inner", scope: !36) -!40 = !DIGlobalVariableExpression(var: !41, expr: !DIExpression()) -!41 = !DIGlobalVariable(name: "c", linkageName: "_ZN5outer12_GLOBAL__N_11cE", scope: !42, file: !3, line: 53, type: !9, isLocal: true, isDefinition: true) -!42 = !DINamespace(scope: !43) -!43 = !DINamespace(name: "outer", scope: null) -!44 = !{!45, !47} -!45 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !2, entity: !46, file:!3, line: 34) -!46 = !DIGlobalVariable(name: "global_namespace_variable_decl", linkageName: "_ZN2ns30global_namespace_variable_declE", scope: !18, file: !3, line: 28, type: !9, isLocal: false, isDefinition: false) -!47 = !DIImportedEntity(tag: DW_TAG_imported_module, scope: !43, entity: !42, file: !3, line: 43) -!48 = !{i32 2, !"Dwarf Version", i32 4} -!49 = !{i32 2, !"Debug Info Version", i32 3} -!50 = !{!"clang version 3.7.0 (trunk 234897) (llvm/trunk 234911)"} -!51 = distinct !DISubprogram(name: "member_function", linkageName: "_ZN1C15member_functionEv", scope: !6, file: !3, line: 9, type: !11, isLocal: false, isDefinition: true, scopeLine: 9, flags: DIFlagPrototyped, isOptimized: false, unit: !2, declaration: !10, retainedNodes: !4) -!52 = !DILocalVariable(name: "this", arg: 1, scope: !51, type: !53, flags: DIFlagArtificial | DIFlagObjectPointer) -!53 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !6, size: 64, align: 64) -!54 = !DIExpression() -!55 = !DILocation(line: 0, scope: !51) -!56 = !DILocation(line: 10, scope: !51) -!57 = !DILocation(line: 11, scope: !51) -!58 = distinct !DISubprogram(name: "static_member_function", linkageName: "_ZN1C22static_member_functionEv", scope: !6, file: !3, line: 13, type: !15, isLocal: false, isDefinition: true, scopeLine: 13, flags: DIFlagPrototyped, isOptimized: false, unit: !2, declaration: !14, retainedNodes: !4) -!59 = !DILocation(line: 14, scope: !58) -!60 = distinct !DISubprogram(name: "global_function", linkageName: "_Z15global_functionv", scope: !3, file: !3, line: 19, type: !15, isLocal: false, isDefinition: true, scopeLine: 19, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4) -!61 = !DILocation(line: 20, scope: !60) -!62 = distinct !DISubprogram(name: "global_namespace_function", linkageName: "_ZN2ns25global_namespace_functionEv", scope: !18, file: !3, line: 24, type: !63, isLocal: false, isDefinition: true, scopeLine: 24, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4) -!63 = !DISubroutineType(types: !64) -!64 = !{null} -!65 = !DILocation(line: 25, scope: !62) -!66 = !DILocation(line: 26, scope: !62) -!67 = !DILocation(line: 42, scope: !30) -!68 = distinct !DISubprogram(name: "f7", linkageName: "_Z2f7v", scope: !3, file: !3, line: 57, type: !15, isLocal: false, isDefinition: true, scopeLine: 57, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4) -!69 = !DILocation(line: 58, scope: !68) - +!38 = distinct !DIGlobalVariable(name: "z", scope: !39, file: !3, line: 33, type: !13, isLocal: true, isDefinition: true) +!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) +!40 = !DISubroutineType(types: !41) +!41 = !{!42} +!42 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64) +!43 = !{} +!44 = !DIGlobalVariableExpression(var: !45, expr: !DIExpression()) +!45 = distinct !DIGlobalVariable(name: "i", linkageName: "_ZN12_GLOBAL__N_11iE", scope: !46, file: !3, line: 29, type: !13, isLocal: true, isDefinition: true) +!46 = !DINamespace(scope: null) +!47 = !DIGlobalVariableExpression(var: !48, expr: !DIExpression()) +!48 = distinct !DIGlobalVariable(name: "b", linkageName: "_ZN12_GLOBAL__N_15inner1bE", scope: !49, file: !3, line: 39, type: !13, isLocal: true, isDefinition: true) +!49 = !DINamespace(name: "inner", scope: !46) +!50 = !DIGlobalVariableExpression(var: !51, expr: !DIExpression()) +!51 = distinct !DIGlobalVariable(name: "c", linkageName: "_ZN5outer12_GLOBAL__N_11cE", scope: !52, file: !3, line: 45, type: !13, isLocal: true, isDefinition: true) +!52 = !DINamespace(scope: !53) +!53 = !DINamespace(name: "outer", scope: null) +!54 = !{!55} +!55 = !DIImportedEntity(tag: DW_TAG_imported_declaration, scope: !2, entity: !56, file: !3, line: 26) +!56 = !DIGlobalVariable(name: "global_namespace_variable_decl", linkageName: "_ZN2ns30global_namespace_variable_declE", scope: !31, file: !3, line: 20, type: !13, isLocal: false, isDefinition: false) +!57 = !{i32 2, !"Dwarf Version", i32 4} +!58 = !{i32 2, !"Debug Info Version", i32 3} +!59 = !{i32 1, !"wchar_size", i32 4} +!60 = !{!"clang version 9.0.0 (trunk 363288) (llvm/trunk 363294)"} +!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) +!62 = !DILocalVariable(name: "this", arg: 1, scope: !61, type: !63, flags: DIFlagArtificial | DIFlagObjectPointer) +!63 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64) +!64 = !DILocation(line: 0, scope: !61) +!65 = !DILocation(line: 9, column: 52, scope: !61) +!66 = !DILocation(line: 9, column: 57, scope: !61) +!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) +!68 = !DILocation(line: 11, column: 42, scope: !67) +!69 = !DILocation(line: 11, column: 35, scope: !67) +!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) +!71 = !DILocation(line: 15, column: 25, scope: !70) +!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) +!73 = !DISubroutineType(types: !74) +!74 = !{null} +!75 = !DILocation(line: 18, column: 52, scope: !72) +!76 = !DILocation(line: 18, column: 71, scope: !72) +!77 = !DILocation(line: 34, column: 3, scope: !39) +!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) +!79 = !DILocation(line: 59, column: 10, scope: !78) +!80 = !DILocation(line: 59, column: 15, scope: !78) +!81 = !DILocation(line: 59, column: 14, scope: !78) +!82 = !DILocation(line: 59, column: 12, scope: !78) +!83 = !DILocation(line: 59, column: 22, scope: !78) +!84 = !DILocation(line: 59, column: 20, scope: !78) +!85 = !DILocation(line: 59, column: 33, scope: !78) +!86 = !DILocation(line: 59, column: 31, scope: !78) +!87 = !DILocation(line: 59, column: 42, scope: !78) +!88 = !DILocation(line: 59, column: 68, scope: !78) +!89 = !DILocation(line: 60, column: 32, scope: !78) +!90 = !DILocation(line: 59, column: 3, scope: !78) -- 2.40.0