blob: c3bcb4febc8ff0f248a671821e25aed8c416ef5a [file] [log] [blame]
Eric Christopher67646432013-07-26 17:02:41 +00001; REQUIRES: object-emission
2
3; RUN: llc %s -o %t -filetype=obj -O0 -generate-odr-hash
4; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
5;
6; Generated from:
7;
8; struct bar {};
9; struct bar b;
10; void foo(void) {
11; struct baz {};
12; baz b;
13; }
14; namespace echidna {
15; namespace capybara {
16; namespace mongoose {
17; class fluffy {
18; int a;
19; int b;
20; };
21; fluffy animal;
22; }
23; }
24; }
25; namespace {
26; struct walrus {};
27; }
28; walrus w;
Eric Christopherd853ea32013-07-29 23:53:05 +000029; struct wombat {
30; struct {
31; int a;
32; int b;
33; } a_b;
34; };
35; wombat wom;
Eric Christopher67646432013-07-26 17:02:41 +000036
Eric Christopherd853ea32013-07-29 23:53:05 +000037; Check that we generate a hash for bar and the value.
Eric Christopher67646432013-07-26 17:02:41 +000038; CHECK: DW_TAG_structure_type
39; CHECK-NEXT: debug_str{{.*}}"bar"
40; CHECK: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x200520c0d5b90eff)
41; CHECK: DW_TAG_namespace
42; CHECK-NEXT: debug_str{{.*}}"echidna"
43; CHECK: DW_TAG_namespace
44; CHECK-NEXT: debug_str{{.*}}"capybara"
45; CHECK: DW_TAG_namespace
46; CHECK-NEXT: debug_str{{.*}}"mongoose"
47; CHECK: DW_TAG_class_type
48; CHECK-NEXT: debug_str{{.*}}"fluffy"
49; CHECK: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x9a0124d5a0c21c52)
Eric Christopherd853ea32013-07-29 23:53:05 +000050
51; Check that we generate a hash for wombat and the value, but not for the
52; anonymous type contained within.
53; CHECK: DW_TAG_structure_type
54; CHECK-NEXT: debug_str{{.*}}wombat
55; CHECK: DW_AT_GNU_odr_signature [DW_FORM_data8] (0x685bcc220141e9d7)
56; CHECK: DW_TAG_structure_type
57; CHECK-NEXT: DW_AT_byte_size
58; CHECK-NEXT: DW_AT_decl_file
59; CHECK-NEXT: DW_AT_decl_line
60; CHECK: DW_TAG_member
61; CHECK-NEXT: debug_str{{.*}}"a"
62
63; Check that we don't generate a hash for baz.
Eric Christopher67646432013-07-26 17:02:41 +000064; CHECK: DW_TAG_structure_type
65; CHECK-NEXT: debug_str{{.*}}"baz"
66; CHECK-NOT: DW_AT_GNU_odr_signature
Eric Christopherd853ea32013-07-29 23:53:05 +000067
Eric Christopher32d15312013-07-29 23:53:01 +000068; FIXME: PR16740 we may want to generate debug info for walrus, but still no hash since
69; the type is contained in an anonymous namespace and not visible externally even if
70; the variable is...
Eric Christopher67646432013-07-26 17:02:41 +000071; CHECK-NOT: debug_str{{.*}}"walrus"
72
Eric Christopher67646432013-07-26 17:02:41 +000073%struct.bar = type { i8 }
74%"class.echidna::capybara::mongoose::fluffy" = type { i32, i32 }
Eric Christopherd853ea32013-07-29 23:53:05 +000075%struct.wombat = type { %struct.anon }
76%struct.anon = type { i32, i32 }
Eric Christopher67646432013-07-26 17:02:41 +000077%struct.baz = type { i8 }
78
79@b = global %struct.bar zeroinitializer, align 1
80@_ZN7echidna8capybara8mongoose6animalE = global %"class.echidna::capybara::mongoose::fluffy" zeroinitializer, align 4
Eric Christopherd853ea32013-07-29 23:53:05 +000081@wom = global %struct.wombat zeroinitializer, align 4
Eric Christopher67646432013-07-26 17:02:41 +000082
83; Function Attrs: nounwind uwtable
84define void @_Z3foov() #0 {
85entry:
86 %b = alloca %struct.baz, align 1
Eric Christopherd853ea32013-07-29 23:53:05 +000087 call void @llvm.dbg.declare(metadata !{%struct.baz* %b}, metadata !50), !dbg !58
88 ret void, !dbg !59
Eric Christopher67646432013-07-26 17:02:41 +000089}
90
91; Function Attrs: nounwind readnone
92declare void @llvm.dbg.declare(metadata, metadata) #1
93
94attributes #0 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
95attributes #1 = { nounwind readnone }
96
97!llvm.dbg.cu = !{!0}
Eric Christopherd853ea32013-07-29 23:53:05 +000098!llvm.module.flags = !{!49}
Eric Christopher67646432013-07-26 17:02:41 +000099
Eric Christopherd853ea32013-07-29 23:53:05 +0000100!0 = metadata !{i32 786449, metadata !1, i32 4, metadata !"clang version 3.4 (trunk 187387) (llvm/trunk 187385)", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !8, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [/usr/local/google/home/echristo/tmp/bar.cpp] [DW_LANG_C_plus_plus]
Eric Christopher67646432013-07-26 17:02:41 +0000101!1 = metadata !{metadata !"bar.cpp", metadata !"/usr/local/google/home/echristo/tmp"}
102!2 = metadata !{i32 0}
103!3 = metadata !{metadata !4}
104!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"foo", metadata !"foo", metadata !"_Z3foov", i32 6, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @_Z3foov, null, null, metadata !2, i32 6} ; [ DW_TAG_subprogram ] [line 6] [def] [foo]
105!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/usr/local/google/home/echristo/tmp/bar.cpp]
106!6 = metadata !{i32 786453, i32 0, i32 0, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
107!7 = metadata !{null}
Eric Christopherd853ea32013-07-29 23:53:05 +0000108!8 = metadata !{metadata !9, metadata !17, metadata !31}
Eric Christopher67646432013-07-26 17:02:41 +0000109!9 = metadata !{i32 786484, i32 0, null, metadata !"b", metadata !"b", metadata !"", metadata !5, i32 4, metadata !10, i32 0, i32 1, %struct.bar* @b, null} ; [ DW_TAG_variable ] [b] [line 4] [def]
110!10 = metadata !{i32 786451, metadata !1, null, metadata !"bar", i32 1, i64 8, i64 8, i32 0, i32 0, null, metadata !11, i32 0, null, null} ; [ DW_TAG_structure_type ] [bar] [line 1, size 8, align 8, offset 0] [def] [from ]
111!11 = metadata !{metadata !12}
112!12 = metadata !{i32 786478, metadata !1, metadata !10, metadata !"bar", metadata !"bar", metadata !"", i32 1, metadata !13, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false, null, null, i32 0, metadata !16, i32 1} ; [ DW_TAG_subprogram ] [line 1] [bar]
113!13 = metadata !{i32 786453, i32 0, i32 0, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !14, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
114!14 = metadata !{null, metadata !15}
115!15 = metadata !{i32 786447, i32 0, i32 0, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from bar]
116!16 = metadata !{i32 786468}
117!17 = metadata !{i32 786484, i32 0, metadata !18, metadata !"animal", metadata !"animal", metadata !"_ZN7echidna8capybara8mongoose6animalE", metadata !5, i32 20, metadata !21, i32 0, i32 1, %"class.echidna::capybara::mongoose::fluffy"* @_ZN7echidna8capybara8mongoose6animalE, null} ; [ DW_TAG_variable ] [animal] [line 20] [def]
118!18 = metadata !{i32 786489, metadata !1, metadata !19, metadata !"mongoose", i32 14} ; [ DW_TAG_namespace ] [mongoose] [line 14]
119!19 = metadata !{i32 786489, metadata !1, metadata !20, metadata !"capybara", i32 13} ; [ DW_TAG_namespace ] [capybara] [line 13]
120!20 = metadata !{i32 786489, metadata !1, null, metadata !"echidna", i32 12} ; [ DW_TAG_namespace ] [echidna] [line 12]
121!21 = metadata !{i32 786434, metadata !1, metadata !18, metadata !"fluffy", i32 15, i64 64, i64 32, i32 0, i32 0, null, metadata !22, i32 0, null, null} ; [ DW_TAG_class_type ] [fluffy] [line 15, size 64, align 32, offset 0] [def] [from ]
122!22 = metadata !{metadata !23, metadata !25, metadata !26}
123!23 = metadata !{i32 786445, metadata !1, metadata !21, metadata !"a", i32 16, i64 32, i64 32, i64 0, i32 1, metadata !24} ; [ DW_TAG_member ] [a] [line 16, size 32, align 32, offset 0] [private] [from int]
124!24 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
125!25 = metadata !{i32 786445, metadata !1, metadata !21, metadata !"b", i32 17, i64 32, i64 32, i64 32, i32 1, metadata !24} ; [ DW_TAG_member ] [b] [line 17, size 32, align 32, offset 32] [private] [from int]
126!26 = metadata !{i32 786478, metadata !1, metadata !21, metadata !"fluffy", metadata !"fluffy", metadata !"", i32 15, metadata !27, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false, null, null, i32 0, metadata !30, i32 15} ; [ DW_TAG_subprogram ] [line 15] [fluffy]
127!27 = metadata !{i32 786453, i32 0, i32 0, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !28, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
128!28 = metadata !{null, metadata !29}
129!29 = metadata !{i32 786447, i32 0, i32 0, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !21} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from fluffy]
130!30 = metadata !{i32 786468}
Eric Christopherd853ea32013-07-29 23:53:05 +0000131!31 = metadata !{i32 786484, i32 0, null, metadata !"wom", metadata !"wom", metadata !"", metadata !5, i32 39, metadata !32, i32 0, i32 1, %struct.wombat* @wom, null} ; [ DW_TAG_variable ] [wom] [line 39] [def]
132!32 = metadata !{i32 786451, metadata !1, null, metadata !"wombat", i32 32, i64 64, i64 32, i32 0, i32 0, null, metadata !33, i32 0, null, null} ; [ DW_TAG_structure_type ] [wombat] [line 32, size 64, align 32, offset 0] [def] [from ]
133!33 = metadata !{metadata !34, metadata !44}
134!34 = metadata !{i32 786445, metadata !1, metadata !32, metadata !"a_b", i32 36, i64 64, i64 32, i64 0, i32 0, metadata !35} ; [ DW_TAG_member ] [a_b] [line 36, size 64, align 32, offset 0] [from ]
135!35 = metadata !{i32 786451, metadata !1, metadata !32, metadata !"", i32 33, i64 64, i64 32, i32 0, i32 0, null, metadata !36, i32 0, null, null} ; [ DW_TAG_structure_type ] [line 33, size 64, align 32, offset 0] [def] [from ]
136!36 = metadata !{metadata !37, metadata !38, metadata !39}
137!37 = metadata !{i32 786445, metadata !1, metadata !35, metadata !"a", i32 34, i64 32, i64 32, i64 0, i32 0, metadata !24} ; [ DW_TAG_member ] [a] [line 34, size 32, align 32, offset 0] [from int]
138!38 = metadata !{i32 786445, metadata !1, metadata !35, metadata !"b", i32 35, i64 32, i64 32, i64 32, i32 0, metadata !24} ; [ DW_TAG_member ] [b] [line 35, size 32, align 32, offset 32] [from int]
139!39 = metadata !{i32 786478, metadata !1, metadata !35, metadata !"", metadata !"", metadata !"", i32 33, metadata !40, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false, null, null, i32 0, metadata !43, i32 33} ; [ DW_TAG_subprogram ] [line 33]
140!40 = metadata !{i32 786453, i32 0, i32 0, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !41, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
141!41 = metadata !{null, metadata !42}
142!42 = metadata !{i32 786447, i32 0, i32 0, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !35} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from ]
143!43 = metadata !{i32 786468}
144!44 = metadata !{i32 786478, metadata !1, metadata !32, metadata !"wombat", metadata !"wombat", metadata !"", i32 32, metadata !45, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false, null, null, i32 0, metadata !48, i32 32} ; [ DW_TAG_subprogram ] [line 32] [wombat]
145!45 = metadata !{i32 786453, i32 0, i32 0, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !46, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
146!46 = metadata !{null, metadata !47}
147!47 = metadata !{i32 786447, i32 0, i32 0, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !32} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from wombat]
148!48 = metadata !{i32 786468}
149!49 = metadata !{i32 2, metadata !"Dwarf Version", i32 3}
150!50 = metadata !{i32 786688, metadata !4, metadata !"b", metadata !5, i32 9, metadata !51, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [b] [line 9]
151!51 = metadata !{i32 786451, metadata !1, metadata !4, metadata !"baz", i32 7, i64 8, i64 8, i32 0, i32 0, null, metadata !52, i32 0, null, null} ; [ DW_TAG_structure_type ] [baz] [line 7, size 8, align 8, offset 0] [def] [from ]
152!52 = metadata !{metadata !53}
153!53 = metadata !{i32 786478, metadata !1, metadata !51, metadata !"baz", metadata !"baz", metadata !"", i32 7, metadata !54, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false, null, null, i32 0, metadata !57, i32 7} ; [ DW_TAG_subprogram ] [line 7] [baz]
154!54 = metadata !{i32 786453, i32 0, i32 0, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !55, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
155!55 = metadata !{null, metadata !56}
156!56 = metadata !{i32 786447, i32 0, i32 0, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !51} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from baz]
157!57 = metadata !{i32 786468}
158!58 = metadata !{i32 9, i32 0, metadata !4, null}
159!59 = metadata !{i32 10, i32 0, metadata !4, null}