blob: a2ee2b9d3e72bf223a5507862659b6ab172ca65a [file] [log] [blame]
Eric Christopher67646432013-07-26 17:02:41 +00001; REQUIRES: object-emission
2
David Blaikie29459ae2014-07-25 17:11:58 +00003; RUN: llc < %s -o %t -filetype=obj -O0 -generate-type-units -mtriple=x86_64-unknown-linux-gnu
David Blaikie15ed5eb2014-01-10 01:38:41 +00004; RUN: llvm-dwarfdump %t | FileCheck --check-prefix=CHECK --check-prefix=SINGLE %s
David Blaikiec13bc972014-08-27 05:04:14 +00005; RUN: llvm-readobj -s -t %t | FileCheck --check-prefix=OBJ_SINGLE %s
David Blaikie15ed5eb2014-01-10 01:38:41 +00006
David Blaikie29459ae2014-07-25 17:11:58 +00007; RUN: llc < %s -split-dwarf=Enable -o %t -filetype=obj -O0 -generate-type-units -mtriple=x86_64-unknown-linux-gnu
David Blaikie15ed5eb2014-01-10 01:38:41 +00008; RUN: llvm-dwarfdump %t | FileCheck --check-prefix=CHECK --check-prefix=FISSION %s
David Blaikiec13bc972014-08-27 05:04:14 +00009; RUN: llvm-readobj -s -t %t | FileCheck --check-prefix=OBJ_FISSION %s
David Blaikie8a263cb2013-11-26 00:22:37 +000010
David Blaikie5b858582014-02-12 00:40:47 +000011; Generated from bar.cpp:
12
13; #line 1 "bar.h"
Eric Christopher67646432013-07-26 17:02:41 +000014; struct bar {};
David Blaikie5b858582014-02-12 00:40:47 +000015; #line 2 "bar.cpp"
Eric Christophere414ece2013-07-29 23:53:08 +000016
Eric Christopher67646432013-07-26 17:02:41 +000017; struct bar b;
Eric Christophere414ece2013-07-29 23:53:08 +000018
Eric Christopher67646432013-07-26 17:02:41 +000019; void foo(void) {
20; struct baz {};
21; baz b;
22; }
Eric Christophere414ece2013-07-29 23:53:08 +000023
Eric Christopher67646432013-07-26 17:02:41 +000024; namespace echidna {
25; namespace capybara {
26; namespace mongoose {
27; class fluffy {
28; int a;
29; int b;
30; };
Eric Christophere414ece2013-07-29 23:53:08 +000031
Eric Christopher67646432013-07-26 17:02:41 +000032; fluffy animal;
33; }
34; }
35; }
Eric Christophere414ece2013-07-29 23:53:08 +000036
Eric Christopher67646432013-07-26 17:02:41 +000037; namespace {
Eric Christophere414ece2013-07-29 23:53:08 +000038; struct walrus {
39; walrus() {}
40; };
Eric Christopher67646432013-07-26 17:02:41 +000041; }
Eric Christophere414ece2013-07-29 23:53:08 +000042
Eric Christopher67646432013-07-26 17:02:41 +000043; walrus w;
Eric Christophere414ece2013-07-29 23:53:08 +000044
Eric Christopherd853ea32013-07-29 23:53:05 +000045; struct wombat {
46; struct {
Eric Christophere414ece2013-07-29 23:53:08 +000047; int a;
48; int b;
Eric Christopherd853ea32013-07-29 23:53:05 +000049; } a_b;
50; };
Eric Christophere414ece2013-07-29 23:53:08 +000051
Eric Christopherd853ea32013-07-29 23:53:05 +000052; wombat wom;
Eric Christopher67646432013-07-26 17:02:41 +000053
David Blaikie15ed5eb2014-01-10 01:38:41 +000054; SINGLE-LABEL: .debug_info contents:
55; FISSION-LABEL: .debug_info.dwo contents:
Eric Christopherc4dd56b2013-12-05 01:00:12 +000056; CHECK: Compile Unit: length = [[CU_SIZE:[0-9a-f]+]]
David Blaikiebc563272013-12-13 21:33:40 +000057
David Blaikiec3d9e9e2014-03-06 01:42:00 +000058; CHECK: [[BAR:^0x........]]: DW_TAG_structure_type
David Blaikie322d79b2014-01-31 19:52:26 +000059; CHECK-NEXT: DW_AT_declaration
David Blaikiec3d9e9e2014-03-06 01:42:00 +000060; CHECK-NEXT: DW_AT_signature {{.*}} (0x1d02f3be30cc5688)
61; CHECK: [[FLUFFY:^0x........]]: DW_TAG_class_type
David Blaikie322d79b2014-01-31 19:52:26 +000062; CHECK-NEXT: DW_AT_declaration
David Blaikiec3d9e9e2014-03-06 01:42:00 +000063; CHECK-NEXT: DW_AT_signature {{.*}} (0xb04af47397402e77)
David Blaikiecfb21152014-01-03 18:59:42 +000064
65; Ensure the CU-local type 'walrus' is not placed in a type unit.
David Blaikiec3d9e9e2014-03-06 01:42:00 +000066; CHECK: [[WALRUS:^0x........]]: DW_TAG_structure_type
David Blaikie15ed5eb2014-01-10 01:38:41 +000067; CHECK-NEXT: DW_AT_name{{.*}}"walrus"
David Blaikiecfb21152014-01-03 18:59:42 +000068; CHECK-NEXT: DW_AT_byte_size
69; CHECK-NEXT: DW_AT_decl_file
70; CHECK-NEXT: DW_AT_decl_line
71
David Blaikiec3d9e9e2014-03-06 01:42:00 +000072
73; CHECK: [[WOMBAT:^0x........]]: DW_TAG_structure_type
74; CHECK-NEXT: DW_AT_declaration
75; CHECK-NEXT: DW_AT_signature {{.*}} (0xfd756cee88f8a118)
76
David Blaikie15ed5eb2014-01-10 01:38:41 +000077; SINGLE-LABEL: .debug_types contents:
David Blaikiec13bc972014-08-27 05:04:14 +000078; FISSION-NOT: .debug_types contents:
David Blaikie15ed5eb2014-01-10 01:38:41 +000079; FISSION-LABEL: .debug_types.dwo contents:
David Blaikiebc563272013-12-13 21:33:40 +000080
David Blaikie62017122013-12-13 01:24:54 +000081; Check that we generate a hash for bar and the value.
David Blaikiecfb21152014-01-03 18:59:42 +000082; CHECK-NOT: type_signature
83; CHECK-LABEL: type_signature = 0x1d02f3be30cc5688
David Blaikie62017122013-12-13 01:24:54 +000084; CHECK: DW_TAG_structure_type
David Blaikie3a443c22014-11-04 22:12:25 +000085; FISSION-NEXT: DW_AT_name {{.*}} ( indexed {{.*}} "bar"
86; SINGLE-NEXT: DW_AT_name {{.*}} "bar"
David Blaikie409dd9c2013-11-19 23:08:21 +000087
David Blaikiebc563272013-12-13 21:33:40 +000088
David Blaikie409dd9c2013-11-19 23:08:21 +000089; Check that we generate a hash for fluffy and the value.
David Blaikiecfb21152014-01-03 18:59:42 +000090; CHECK-NOT: type_signature
91; CHECK-LABEL: type_signature = 0xb04af47397402e77
92; CHECK-NOT: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x9a0124d5a0c21c52)
Eric Christopher67646432013-07-26 17:02:41 +000093; CHECK: DW_TAG_namespace
David Blaikie15ed5eb2014-01-10 01:38:41 +000094; CHECK-NEXT: DW_AT_name{{.*}}"echidna"
Eric Christopher67646432013-07-26 17:02:41 +000095; CHECK: DW_TAG_namespace
David Blaikie15ed5eb2014-01-10 01:38:41 +000096; CHECK-NEXT: DW_AT_name{{.*}}"capybara"
Eric Christopher67646432013-07-26 17:02:41 +000097; CHECK: DW_TAG_namespace
David Blaikie15ed5eb2014-01-10 01:38:41 +000098; CHECK-NEXT: DW_AT_name{{.*}}"mongoose"
Eric Christopher67646432013-07-26 17:02:41 +000099; CHECK: DW_TAG_class_type
David Blaikie15ed5eb2014-01-10 01:38:41 +0000100; CHECK-NEXT: DW_AT_name{{.*}}"fluffy"
Eric Christopherd853ea32013-07-29 23:53:05 +0000101
David Blaikie62017122013-12-13 01:24:54 +0000102; Check that we generate a hash for wombat and the value, but not for the
103; anonymous type contained within.
David Blaikiecfb21152014-01-03 18:59:42 +0000104; CHECK-NOT: type_signature
105; CHECK-LABEL: type_signature = 0xfd756cee88f8a118
106; CHECK-NOT: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x685bcc220141e9d7)
David Blaikie62017122013-12-13 01:24:54 +0000107; CHECK: DW_TAG_structure_type
David Blaikie15ed5eb2014-01-10 01:38:41 +0000108; CHECK-NEXT: DW_AT_name{{.*}}"wombat"
David Blaikiebc563272013-12-13 21:33:40 +0000109
David Blaikiecfb21152014-01-03 18:59:42 +0000110; CHECK-NOT: type_signature
111; CHECK-LABEL: type_signature = 0xe94f6d3843e62d6b
David Blaikie62017122013-12-13 01:24:54 +0000112; CHECK: DW_TAG_type_unit
David Blaikie4a2f95f2014-03-18 01:17:26 +0000113; CHECK: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000)
David Blaikiebc563272013-12-13 21:33:40 +0000114; CHECK-NOT: NULL
David Blaikiebc563272013-12-13 21:33:40 +0000115; CHECK-NOT: DW_AT_GNU_odr_signature
David Blaikie62017122013-12-13 01:24:54 +0000116; CHECK: DW_TAG_structure_type
David Blaikiebc563272013-12-13 21:33:40 +0000117; The signature for the outer 'wombat' type
David Blaikiecfb21152014-01-03 18:59:42 +0000118; CHECK: DW_AT_signature [DW_FORM_ref_sig8] (0xfd756cee88f8a118)
Eric Christopherd853ea32013-07-29 23:53:05 +0000119; CHECK: DW_TAG_structure_type
David Blaikie409dd9c2013-11-19 23:08:21 +0000120; CHECK-NOT: DW_AT_name
121; CHECK-NOT: DW_AT_GNU_odr_signature
Eric Christopherd853ea32013-07-29 23:53:05 +0000122; CHECK: DW_TAG_member
David Blaikie15ed5eb2014-01-10 01:38:41 +0000123; CHECK-NEXT: DW_AT_name{{.*}}"a"
Eric Christopherd853ea32013-07-29 23:53:05 +0000124
David Blaikie9acebfd2014-02-14 19:51:35 +0000125; CHECK-LABEL: .debug_line contents:
126; CHECK: Line table prologue
127; CHECK-NOT: file_names[
David Blaikie4a2f95f2014-03-18 01:17:26 +0000128; SINGLE: file_names{{.*}} bar.h
David Blaikie9acebfd2014-02-14 19:51:35 +0000129; CHECK: file_names{{.*}} bar.cpp
130; CHECK-NOT: file_names[
David Blaikie4a2f95f2014-03-18 01:17:26 +0000131
132; CHECK-LABEL: .debug_line.dwo contents:
133; FISSION: Line table prologue
David Blaikie8287aff2014-03-18 02:13:23 +0000134; FISSION: opcode_base: 1
135; FISSION-NOT: standard_opcode_lengths
David Blaikie47f4b822014-03-19 00:11:28 +0000136; FISSION-NOT: include_directories
David Blaikie4a2f95f2014-03-18 01:17:26 +0000137; FISSION-NOT: file_names[
138; FISSION: file_names{{.*}} bar.h
139; FISSION: file_names{{.*}} bar.cpp
140; FISSION-NOT: file_names[
141
David Blaikie9acebfd2014-02-14 19:51:35 +0000142; CHECK-LABEL: .debug_str contents:
143
David Blaikiefd1eff52013-11-26 19:14:34 +0000144; Use the unit size as a rough hash/identifier for the unit we're dealing with
145; it happens to be unambiguous at the moment, but it's hardly ideal.
David Blaikie8a263cb2013-11-26 00:22:37 +0000146; CHECK-LABEL: .debug_pubtypes contents:
David Blaikiefd1eff52013-11-26 19:14:34 +0000147; Don't emit pubtype entries for type DIEs in the compile unit that just indirect to a type unit.
Eric Christopherc4dd56b2013-12-05 01:00:12 +0000148; CHECK-NEXT: unit_size = [[CU_SIZE]]
David Blaikiefd1eff52013-11-26 19:14:34 +0000149; CHECK-NEXT: Offset Name
David Blaikie553eb4a2014-06-06 22:16:56 +0000150; CHECK-DAG: [[BAR]] "bar"
151; CHECK-DAG: [[WALRUS]] "(anonymous namespace)::walrus"
152; CHECK-DAG: [[WOMBAT]] "wombat"
153; CHECK-DAG: [[FLUFFY]] "echidna::capybara::mongoose::fluffy"
David Blaikie8a263cb2013-11-26 00:22:37 +0000154
David Blaikie29459ae2014-07-25 17:11:58 +0000155; Make sure debug_types are in comdat groups. This could be more rigid to check
156; that they're the right comdat groups (each type in a separate comdat group,
157; etc)
David Blaikiec13bc972014-08-27 05:04:14 +0000158; OBJ_SINGLE: Name: .debug_types (
159; OBJ_SINGLE-NOT: }
160; OBJ_SINGLE: SHF_GROUP
David Blaikie29459ae2014-07-25 17:11:58 +0000161
162; Fission type units don't go in comdat groups, since their linker is debug
163; aware it's handled using the debug info semantics rather than raw ELF object
164; semantics.
165; OBJ_FISSION: Name: .debug_types.dwo (
166; OBJ_FISSION-NOT: SHF_GROUP
167; OBJ_FISSION: }
168
Eric Christopher67646432013-07-26 17:02:41 +0000169%struct.bar = type { i8 }
170%"class.echidna::capybara::mongoose::fluffy" = type { i32, i32 }
Eric Christophere414ece2013-07-29 23:53:08 +0000171%"struct.<anonymous namespace>::walrus" = type { i8 }
Eric Christopherd853ea32013-07-29 23:53:05 +0000172%struct.wombat = type { %struct.anon }
173%struct.anon = type { i32, i32 }
Eric Christopher67646432013-07-26 17:02:41 +0000174%struct.baz = type { i8 }
175
176@b = global %struct.bar zeroinitializer, align 1
177@_ZN7echidna8capybara8mongoose6animalE = global %"class.echidna::capybara::mongoose::fluffy" zeroinitializer, align 4
Eric Christophere414ece2013-07-29 23:53:08 +0000178@w = internal global %"struct.<anonymous namespace>::walrus" zeroinitializer, align 1
Eric Christopherd853ea32013-07-29 23:53:05 +0000179@wom = global %struct.wombat zeroinitializer, align 4
Eric Christophere414ece2013-07-29 23:53:08 +0000180@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]
181
Eric Christopher67646432013-07-26 17:02:41 +0000182; Function Attrs: nounwind uwtable
Peter Collingbourned4bff302015-11-05 22:03:56 +0000183define void @_Z3foov() #0 !dbg !22 {
Eric Christopher67646432013-07-26 17:02:41 +0000184entry:
185 %b = alloca %struct.baz, align 1
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000186 call void @llvm.dbg.declare(metadata %struct.baz* %b, metadata !46, metadata !DIExpression()), !dbg !48
David Blaikie5b858582014-02-12 00:40:47 +0000187 ret void, !dbg !49
Eric Christopher67646432013-07-26 17:02:41 +0000188}
189
190; Function Attrs: nounwind readnone
Adrian Prantl87b7eb92014-10-01 18:55:02 +0000191declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
Eric Christopher67646432013-07-26 17:02:41 +0000192
Peter Collingbourned4bff302015-11-05 22:03:56 +0000193define internal void @__cxx_global_var_init() section ".text.startup" !dbg !26 {
Eric Christophere414ece2013-07-29 23:53:08 +0000194entry:
David Blaikie5b858582014-02-12 00:40:47 +0000195 call void @_ZN12_GLOBAL__N_16walrusC2Ev(%"struct.<anonymous namespace>::walrus"* @w), !dbg !50
196 ret void, !dbg !50
Eric Christophere414ece2013-07-29 23:53:08 +0000197}
198
199; Function Attrs: nounwind uwtable
Peter Collingbourned4bff302015-11-05 22:03:56 +0000200define internal void @_ZN12_GLOBAL__N_16walrusC2Ev(%"struct.<anonymous namespace>::walrus"* %this) unnamed_addr #0 align 2 !dbg !27 {
Eric Christophere414ece2013-07-29 23:53:08 +0000201entry:
202 %this.addr = alloca %"struct.<anonymous namespace>::walrus"*, align 8
203 store %"struct.<anonymous namespace>::walrus"* %this, %"struct.<anonymous namespace>::walrus"** %this.addr, align 8
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000204 call void @llvm.dbg.declare(metadata %"struct.<anonymous namespace>::walrus"** %this.addr, metadata !51, metadata !DIExpression()), !dbg !53
David Blaikiea79ac142015-02-27 21:17:42 +0000205 %this1 = load %"struct.<anonymous namespace>::walrus"*, %"struct.<anonymous namespace>::walrus"** %this.addr
David Blaikie5b858582014-02-12 00:40:47 +0000206 ret void, !dbg !54
Eric Christophere414ece2013-07-29 23:53:08 +0000207}
208
Peter Collingbourned4bff302015-11-05 22:03:56 +0000209define internal void @_GLOBAL__I_a() section ".text.startup" !dbg !36 {
Eric Christophere414ece2013-07-29 23:53:08 +0000210entry:
David Blaikie5b858582014-02-12 00:40:47 +0000211 call void @__cxx_global_var_init(), !dbg !55
212 ret void, !dbg !55
Eric Christophere414ece2013-07-29 23:53:08 +0000213}
214
David Blaikieba8125d2013-11-01 22:29:28 +0000215attributes #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" "unsafe-fp-math"="false" "use-soft-float"="false" }
Eric Christopher67646432013-07-26 17:02:41 +0000216attributes #1 = { nounwind readnone }
217
218!llvm.dbg.cu = !{!0}
David Blaikie5b858582014-02-12 00:40:47 +0000219!llvm.module.flags = !{!43, !44}
220!llvm.ident = !{!45}
Eric Christopher67646432013-07-26 17:02:41 +0000221
Adrian Prantl75819ae2016-04-15 15:57:41 +0000222!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, producer: "clang version 3.5 ", isOptimized: false, splitDebugFilename: "bar.dwo", emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !3, globals: !38, imports: !2)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000223!1 = !DIFile(filename: "bar.cpp", directory: "/tmp/dbginfo")
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000224!2 = !{}
225!3 = !{!4, !6, !14, !17}
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000226!4 = !DICompositeType(tag: DW_TAG_structure_type, name: "bar", line: 1, size: 8, align: 8, file: !5, elements: !2, identifier: "_ZTS3bar")
227!5 = !DIFile(filename: "bar.h", directory: "/tmp/dbginfo")
228!6 = !DICompositeType(tag: DW_TAG_class_type, name: "fluffy", line: 13, size: 64, align: 32, file: !1, scope: !7, elements: !10, identifier: "_ZTSN7echidna8capybara8mongoose6fluffyE")
229!7 = !DINamespace(name: "mongoose", line: 12, file: !1, scope: !8)
230!8 = !DINamespace(name: "capybara", line: 11, file: !1, scope: !9)
231!9 = !DINamespace(name: "echidna", line: 10, file: !1, scope: null)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000232!10 = !{!11, !13}
Duncan P. N. Exon Smitha59d3e52016-04-23 21:08:00 +0000233!11 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 14, size: 32, align: 32, flags: DIFlagPrivate, file: !1, scope: !6, baseType: !12)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000234!12 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
Duncan P. N. Exon Smitha59d3e52016-04-23 21:08:00 +0000235!13 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 15, size: 32, align: 32, offset: 32, flags: DIFlagPrivate, file: !1, scope: !6, baseType: !12)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000236!14 = !DICompositeType(tag: DW_TAG_structure_type, name: "wombat", line: 31, size: 64, align: 32, file: !1, elements: !15, identifier: "_ZTS6wombat")
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000237!15 = !{!16}
Duncan P. N. Exon Smitha59d3e52016-04-23 21:08:00 +0000238!16 = !DIDerivedType(tag: DW_TAG_member, name: "a_b", line: 35, size: 64, align: 32, file: !1, scope: !14, baseType: !17)
239!17 = !DICompositeType(tag: DW_TAG_structure_type, line: 32, size: 64, align: 32, file: !1, scope: !14, elements: !18, identifier: "_ZTSN6wombatUt_E")
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000240!18 = !{!19, !20}
Duncan P. N. Exon Smitha59d3e52016-04-23 21:08:00 +0000241!19 = !DIDerivedType(tag: DW_TAG_member, name: "a", line: 33, size: 32, align: 32, file: !1, scope: !17, baseType: !12)
242!20 = !DIDerivedType(tag: DW_TAG_member, name: "b", line: 34, size: 32, align: 32, offset: 32, file: !1, scope: !17, baseType: !12)
Adrian Prantl75819ae2016-04-15 15:57:41 +0000243!22 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 5, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 5, file: !1, scope: !23, type: !24, variables: !2)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000244!23 = !DIFile(filename: "bar.cpp", directory: "/tmp/dbginfo")
245!24 = !DISubroutineType(types: !25)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000246!25 = !{null}
Adrian Prantl75819ae2016-04-15 15:57:41 +0000247!26 = distinct !DISubprogram(name: "__cxx_global_var_init", line: 29, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 29, file: !1, scope: !23, type: !24, variables: !2)
248!27 = distinct !DISubprogram(name: "walrus", linkageName: "_ZN12_GLOBAL__N_16walrusC2Ev", line: 25, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 25, file: !1, scope: !28, type: !32, declaration: !31, variables: !2)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000249!28 = !DICompositeType(tag: DW_TAG_structure_type, name: "walrus", line: 24, size: 8, align: 8, file: !1, scope: !29, elements: !30)
250!29 = !DINamespace(line: 23, file: !1, scope: null)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000251!30 = !{!31}
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000252!31 = !DISubprogram(name: "walrus", line: 25, isLocal: false, isDefinition: false, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 25, file: !1, scope: !28, type: !32)
253!32 = !DISubroutineType(types: !33)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000254!33 = !{null, !34}
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000255!34 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, flags: DIFlagArtificial | DIFlagObjectPointer, baseType: !28)
Adrian Prantl75819ae2016-04-15 15:57:41 +0000256!36 = distinct !DISubprogram(name: "", linkageName: "_GLOBAL__I_a", line: 25, isLocal: true, isDefinition: true, virtualIndex: 6, flags: DIFlagArtificial, isOptimized: false, unit: !0, scopeLine: 25, file: !1, scope: !23, type: !37, variables: !2)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000257!37 = !DISubroutineType(types: !2)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000258!38 = !{!39, !40, !41, !42}
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000259!39 = !DIGlobalVariable(name: "b", line: 3, isLocal: false, isDefinition: true, scope: null, file: !23, type: !4, variable: %struct.bar* @b)
260!40 = !DIGlobalVariable(name: "animal", linkageName: "_ZN7echidna8capybara8mongoose6animalE", line: 18, isLocal: false, isDefinition: true, scope: !7, file: !23, type: !6, variable: %"class.echidna::capybara::mongoose::fluffy"* @_ZN7echidna8capybara8mongoose6animalE)
261!41 = !DIGlobalVariable(name: "w", line: 29, isLocal: true, isDefinition: true, scope: null, file: !23, type: !28, variable: %"struct.<anonymous namespace>::walrus"* @w)
262!42 = !DIGlobalVariable(name: "wom", line: 38, isLocal: false, isDefinition: true, scope: null, file: !23, type: !14, variable: %struct.wombat* @wom)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000263!43 = !{i32 2, !"Dwarf Version", i32 4}
Duncan P. N. Exon Smithe2741802015-03-03 17:24:31 +0000264!44 = !{i32 1, !"Debug Info Version", i32 3}
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000265!45 = !{!"clang version 3.5 "}
Duncan P. N. Exon Smithed013cd2015-07-31 18:58:39 +0000266!46 = !DILocalVariable(name: "b", line: 7, scope: !22, file: !23, type: !47)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000267!47 = !DICompositeType(tag: DW_TAG_structure_type, name: "baz", line: 6, size: 8, align: 8, file: !1, scope: !22, elements: !2)
268!48 = !DILocation(line: 7, scope: !22)
269!49 = !DILocation(line: 8, scope: !22)
270!50 = !DILocation(line: 29, scope: !26)
Duncan P. N. Exon Smithed013cd2015-07-31 18:58:39 +0000271!51 = !DILocalVariable(name: "this", arg: 1, flags: DIFlagArtificial | DIFlagObjectPointer, scope: !27, type: !52)
Duncan P. N. Exon Smitha9308c42015-04-29 16:38:44 +0000272!52 = !DIDerivedType(tag: DW_TAG_pointer_type, size: 64, align: 64, baseType: !28)
273!53 = !DILocation(line: 0, scope: !27)
274!54 = !DILocation(line: 25, scope: !27)
275!55 = !DILocation(line: 25, scope: !36)