blob: e81077e7f4e7363c4f7314f2805d53ddd9d7fdb7 [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
183define void @_Z3foov() #0 {
184entry:
185 %b = alloca %struct.baz, align 1
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000186 call void @llvm.dbg.declare(metadata %struct.baz* %b, metadata !46, metadata !{!"0x102"}), !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
Eric Christophere414ece2013-07-29 23:53:08 +0000193define internal void @__cxx_global_var_init() section ".text.startup" {
194entry:
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
200define internal void @_ZN12_GLOBAL__N_16walrusC2Ev(%"struct.<anonymous namespace>::walrus"* %this) unnamed_addr #0 align 2 {
201entry:
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 Smithbe7ea192014-12-15 19:07:53 +0000204 call void @llvm.dbg.declare(metadata %"struct.<anonymous namespace>::walrus"** %this.addr, metadata !51, metadata !{!"0x102"}), !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
209define internal void @_GLOBAL__I_a() section ".text.startup" {
210entry:
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
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000222!0 = !{!"0x11\004\00clang version 3.5 \000\00\000\00bar.dwo\000", !1, !2, !3, !21, !38, !2} ; [ DW_TAG_compile_unit ] [/tmp/dbginfo/bar.cpp] [DW_LANG_C_plus_plus]
223!1 = !{!"bar.cpp", !"/tmp/dbginfo"}
224!2 = !{}
225!3 = !{!4, !6, !14, !17}
226!4 = !{!"0x13\00bar\001\008\008\000\000\000", !5, null, null, !2, null, null, !"_ZTS3bar"} ; [ DW_TAG_structure_type ] [bar] [line 1, size 8, align 8, offset 0] [def] [from ]
227!5 = !{!"bar.h", !"/tmp/dbginfo"}
228!6 = !{!"0x2\00fluffy\0013\0064\0032\000\000\000", !1, !7, null, !10, null, null, !"_ZTSN7echidna8capybara8mongoose6fluffyE"} ; [ DW_TAG_class_type ] [fluffy] [line 13, size 64, align 32, offset 0] [def] [from ]
229!7 = !{!"0x39\00mongoose\0012", !1, !8} ; [ DW_TAG_namespace ] [mongoose] [line 12]
230!8 = !{!"0x39\00capybara\0011", !1, !9} ; [ DW_TAG_namespace ] [capybara] [line 11]
231!9 = !{!"0x39\00echidna\0010", !1, null} ; [ DW_TAG_namespace ] [echidna] [line 10]
232!10 = !{!11, !13}
233!11 = !{!"0xd\00a\0014\0032\0032\000\001", !1, !"_ZTSN7echidna8capybara8mongoose6fluffyE", !12} ; [ DW_TAG_member ] [a] [line 14, size 32, align 32, offset 0] [private] [from int]
234!12 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
235!13 = !{!"0xd\00b\0015\0032\0032\0032\001", !1, !"_ZTSN7echidna8capybara8mongoose6fluffyE", !12} ; [ DW_TAG_member ] [b] [line 15, size 32, align 32, offset 32] [private] [from int]
236!14 = !{!"0x13\00wombat\0031\0064\0032\000\000\000", !1, null, null, !15, null, null, !"_ZTS6wombat"} ; [ DW_TAG_structure_type ] [wombat] [line 31, size 64, align 32, offset 0] [def] [from ]
237!15 = !{!16}
238!16 = !{!"0xd\00a_b\0035\0064\0032\000\000", !1, !"_ZTS6wombat", !"_ZTSN6wombatUt_E"} ; [ DW_TAG_member ] [a_b] [line 35, size 64, align 32, offset 0] [from _ZTSN6wombatUt_E]
239!17 = !{!"0x13\00\0032\0064\0032\000\000\000", !1, !"_ZTS6wombat", null, !18, null, null, !"_ZTSN6wombatUt_E"} ; [ DW_TAG_structure_type ] [line 32, size 64, align 32, offset 0] [def] [from ]
240!18 = !{!19, !20}
241!19 = !{!"0xd\00a\0033\0032\0032\000\000", !1, !"_ZTSN6wombatUt_E", !12} ; [ DW_TAG_member ] [a] [line 33, size 32, align 32, offset 0] [from int]
242!20 = !{!"0xd\00b\0034\0032\0032\0032\000", !1, !"_ZTSN6wombatUt_E", !12} ; [ DW_TAG_member ] [b] [line 34, size 32, align 32, offset 32] [from int]
243!21 = !{!22, !26, !27, !36}
244!22 = !{!"0x2e\00foo\00foo\00_Z3foov\005\000\001\000\006\00256\000\005", !1, !23, !24, null, void ()* @_Z3foov, null, null, !2} ; [ DW_TAG_subprogram ] [line 5] [def] [foo]
245!23 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/tmp/dbginfo/bar.cpp]
246!24 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !25, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
247!25 = !{null}
248!26 = !{!"0x2e\00__cxx_global_var_init\00__cxx_global_var_init\00\0029\001\001\000\006\00256\000\0029", !1, !23, !24, null, void ()* @__cxx_global_var_init, null, null, !2} ; [ DW_TAG_subprogram ] [line 29] [local] [def] [__cxx_global_var_init]
249!27 = !{!"0x2e\00walrus\00walrus\00_ZN12_GLOBAL__N_16walrusC2Ev\0025\001\001\000\006\00256\000\0025", !1, !28, !32, null, void (%"struct.<anonymous namespace>::walrus"*)* @_ZN12_GLOBAL__N_16walrusC2Ev, null, !31, !2} ; [ DW_TAG_subprogram ] [line 25] [local] [def] [walrus]
250!28 = !{!"0x13\00walrus\0024\008\008\000\000\000", !1, !29, null, !30, null, null, null} ; [ DW_TAG_structure_type ] [walrus] [line 24, size 8, align 8, offset 0] [def] [from ]
251!29 = !{!"0x39\00\0023", !1, null} ; [ DW_TAG_namespace ] [line 23]
252!30 = !{!31}
253!31 = !{!"0x2e\00walrus\00walrus\00\0025\000\000\000\006\00256\000\0025", !1, !28, !32, null, null, null, i32 0, !35} ; [ DW_TAG_subprogram ] [line 25] [walrus]
254!32 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !33, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
255!33 = !{null, !34}
256!34 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !28} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from walrus]
257!35 = !{i32 786468}
258!36 = !{!"0x2e\00\00\00_GLOBAL__I_a\0025\001\001\000\006\0064\000\0025", !1, !23, !37, null, void ()* @_GLOBAL__I_a, null, null, !2} ; [ DW_TAG_subprogram ] [line 25] [local] [def]
259!37 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !2, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
260!38 = !{!39, !40, !41, !42}
261!39 = !{!"0x34\00b\00b\00\003\000\001", null, !23, !4, %struct.bar* @b, null} ; [ DW_TAG_variable ] [b] [line 3] [def]
262!40 = !{!"0x34\00animal\00animal\00_ZN7echidna8capybara8mongoose6animalE\0018\000\001", !7, !23, !6, %"class.echidna::capybara::mongoose::fluffy"* @_ZN7echidna8capybara8mongoose6animalE, null} ; [ DW_TAG_variable ] [animal] [line 18] [def]
263!41 = !{!"0x34\00w\00w\00\0029\001\001", null, !23, !28, %"struct.<anonymous namespace>::walrus"* @w, null} ; [ DW_TAG_variable ] [w] [line 29] [local] [def]
264!42 = !{!"0x34\00wom\00wom\00\0038\000\001", null, !23, !14, %struct.wombat* @wom, null} ; [ DW_TAG_variable ] [wom] [line 38] [def]
265!43 = !{i32 2, !"Dwarf Version", i32 4}
266!44 = !{i32 1, !"Debug Info Version", i32 2}
267!45 = !{!"clang version 3.5 "}
268!46 = !{!"0x100\00b\007\000", !22, !23, !47} ; [ DW_TAG_auto_variable ] [b] [line 7]
269!47 = !{!"0x13\00baz\006\008\008\000\000\000", !1, !22, null, !2, null, null, null} ; [ DW_TAG_structure_type ] [baz] [line 6, size 8, align 8, offset 0] [def] [from ]
Duncan P. N. Exon Smith98854692015-01-14 22:27:36 +0000270!48 = !MDLocation(line: 7, scope: !22)
271!49 = !MDLocation(line: 8, scope: !22)
272!50 = !MDLocation(line: 29, scope: !26)
Duncan P. N. Exon Smithbe7ea192014-12-15 19:07:53 +0000273!51 = !{!"0x101\00this\0016777216\001088", !27, null, !52} ; [ DW_TAG_arg_variable ] [this] [line 0]
274!52 = !{!"0xf\00\000\0064\0064\000\000", null, null, !28} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from walrus]
Duncan P. N. Exon Smith98854692015-01-14 22:27:36 +0000275!53 = !MDLocation(line: 0, scope: !27)
276!54 = !MDLocation(line: 25, scope: !27)
277!55 = !MDLocation(line: 25, scope: !36)