xref: /llvm-project/llvm/test/tools/dsymutil/X86/DWARFLinkerParallel/odr-uniquing.cpp (revision f1fdfe6888f93b9f6dfb4689e1f3206de584ff5b)
1b61ac4a8Savl-llvm /* Compile with:
2b61ac4a8Savl-llvm    clang -g -c  odr-uniquing.cpp -o odr-uniquing/1.o
3b61ac4a8Savl-llvm    cp odr-uniquing/1.o odr-uniquing/2.o
4b61ac4a8Savl-llvm    The aim of these test is to check that all the 'type types' that
5b61ac4a8Savl-llvm    should be uniqued through the ODR really are.
6b61ac4a8Savl-llvm 
7b61ac4a8Savl-llvm    The resulting object file is linked against itself using a fake
8b61ac4a8Savl-llvm    debug map. The end result is:
9b61ac4a8Savl-llvm     - with ODR uniquing: all types in second and third CUs should point back
10b61ac4a8Savl-llvm    to the types of the first CU(except types from anonymous namespace).
11b61ac4a8Savl-llvm     - without ODR uniquing: all types are re-emited in the second CU.
12b61ac4a8Savl-llvm  */
13b61ac4a8Savl-llvm 
14b61ac4a8Savl-llvm /* Check by llvm-dwarfdump --verify */
15*f1fdfe68SAlexey Lapshin // RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
16b61ac4a8Savl-llvm // RUN: -y %p/../dummy-debug-map.map -o - | llvm-dwarfdump --verify - | \
17b61ac4a8Savl-llvm // RUN: FileCheck -check-prefixes=VERIFY %s
18*f1fdfe68SAlexey Lapshin // RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
19b61ac4a8Savl-llvm // RUN: -y %p/../dummy-debug-map.map -no-odr -o - | llvm-dwarfdump --verify - | \
20b61ac4a8Savl-llvm // RUN: FileCheck -check-prefixes=VERIFY %s
21b61ac4a8Savl-llvm 
22b61ac4a8Savl-llvm /* Check for llvm-dwarfdump -a output */
23*f1fdfe68SAlexey Lapshin // RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
24b61ac4a8Savl-llvm // RUN: -y %p/../dummy-debug-map.map -o - | llvm-dwarfdump -v -a - | \
25b61ac4a8Savl-llvm // RUN: FileCheck -check-prefixes=CHECK %s
26*f1fdfe68SAlexey Lapshin // RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
27b61ac4a8Savl-llvm // RUN: -y %p/../dummy-debug-map.map -no-odr -o - | llvm-dwarfdump -v -a - | \
28b61ac4a8Savl-llvm // RUN: FileCheck -check-prefixes=CHECK-NOODR %s
29b61ac4a8Savl-llvm 
30b61ac4a8Savl-llvm struct S {
31b61ac4a8Savl-llvm   struct Nested {};
32b61ac4a8Savl-llvm };
33b61ac4a8Savl-llvm 
34b61ac4a8Savl-llvm namespace N {
35b61ac4a8Savl-llvm class C {};
36b61ac4a8Savl-llvm } // namespace N
37b61ac4a8Savl-llvm 
38b61ac4a8Savl-llvm union U {
39b61ac4a8Savl-llvm   class C {
40b61ac4a8Savl-llvm   } C;
41b61ac4a8Savl-llvm   struct S {
42b61ac4a8Savl-llvm   } S;
43b61ac4a8Savl-llvm };
44b61ac4a8Savl-llvm 
45b61ac4a8Savl-llvm typedef S AliasForS;
46b61ac4a8Savl-llvm 
47b61ac4a8Savl-llvm namespace {
48b61ac4a8Savl-llvm class AnonC {};
49b61ac4a8Savl-llvm } // namespace
50b61ac4a8Savl-llvm 
51b61ac4a8Savl-llvm // This function is only here to hold objects that refer to the above types.
foo()52b61ac4a8Savl-llvm void foo() {
53b61ac4a8Savl-llvm   AliasForS s;
54b61ac4a8Savl-llvm   S::Nested n;
55b61ac4a8Savl-llvm   N::C nc;
56b61ac4a8Savl-llvm   AnonC ac;
57b61ac4a8Savl-llvm   U u;
58b61ac4a8Savl-llvm }
59b61ac4a8Savl-llvm 
60b61ac4a8Savl-llvm // VERIFY: Verifying .debug_abbrev...
61b61ac4a8Savl-llvm // VERIFY: Verifying .debug_info Unit Header Chain...
62b61ac4a8Savl-llvm // VERIFY: Verifying .debug_types Unit Header Chain...
63b61ac4a8Savl-llvm // VERIFY: Verifying .apple_names...
64b61ac4a8Savl-llvm // VERIFY: Verifying .apple_types...
65b61ac4a8Savl-llvm // VERIFY: Verifying .apple_namespaces...
66b61ac4a8Savl-llvm // VERIFY: Verifying .apple_objc...
67b61ac4a8Savl-llvm // VERIFY: No errors.
68b61ac4a8Savl-llvm 
69b61ac4a8Savl-llvm // The first compile unit contains all the types:
70b61ac4a8Savl-llvm // CHECK: .debug_info contents
71b61ac4a8Savl-llvm // CHECK: DW_TAG_compile_unit
72b61ac4a8Savl-llvm // CHECK: DW_AT_language{{.*}} (DW_LANG_C_plus_plus)
73b61ac4a8Savl-llvm // CHECK: DW_AT_name{{.*}}"__artificial_type_unit")
74b61ac4a8Savl-llvm // CHECK: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF1:[0-9a-f]*]])
75b61ac4a8Savl-llvm 
76b61ac4a8Savl-llvm // CHECK:0x[[N_NAMESPACE:[0-9a-f]*]]:{{.*}}DW_TAG_namespace
77b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"N"
78b61ac4a8Savl-llvm 
79b61ac4a8Savl-llvm // CHECK:0x[[C_CLASS:[0-9a-f]*]]:{{.*}}DW_TAG_class_type
80b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"C"
81b61ac4a8Savl-llvm // CHECK:DW_AT_byte_size [DW_FORM_data1] (0x01)
82b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
83b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (35)
84b61ac4a8Savl-llvm 
85b61ac4a8Savl-llvm // CHECK:0x[[S_STRUCTURE:[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
86b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"S"
87b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
88b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (22)
89b61ac4a8Savl-llvm 
90b61ac4a8Savl-llvm // CHECK:0x[[S_STRUCTURE_NESTED:[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
91b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"Nested"
92b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp")
93b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1]       (23)
94b61ac4a8Savl-llvm 
95b61ac4a8Savl-llvm // CHECK:0x[[TYPEDEF_ALIASFORS:[0-9a-f]*]]:{{.*}}DW_TAG_typedef
96b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"AliasForS"
97b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
98b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (58)
99b61ac4a8Savl-llvm 
100b61ac4a8Savl-llvm // CHECK:0x[[U_UNION:[0-9a-f]*]]:{{.*}}DW_TAG_union_type
101b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"U"
102b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
103b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (45)
104b61ac4a8Savl-llvm 
105b61ac4a8Savl-llvm // CHECK:0x[[U_C_CLASS:[0-9a-f]*]]:{{.*}}DW_TAG_class_type
106b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"C"
107b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
108b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (46)
109b61ac4a8Savl-llvm 
110b61ac4a8Savl-llvm // CHECK:0x[[U_C_MEMBER:[0-9a-f]*]]:{{.*}}DW_TAG_member
111b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"C"
112b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
113b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (46)
114b61ac4a8Savl-llvm 
115b61ac4a8Savl-llvm // CHECK:0x[[U_S_MEMBER:[0-9a-f]*]]:{{.*}}DW_TAG_member
116b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"S"
117b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
118b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (47)
119b61ac4a8Savl-llvm 
120b61ac4a8Savl-llvm // CHECK:0x[[U_S_STRUCT:[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
121b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"S"
122b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
123b61ac4a8Savl-llvm // CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (47)
124b61ac4a8Savl-llvm 
125b61ac4a8Savl-llvm // The second compile unit contains subprogram and its variables:
126b61ac4a8Savl-llvm // CHECK:DW_TAG_compile_unit
127b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"odr-uniquing.cpp"
128b61ac4a8Savl-llvm // CHECK-NEXT: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF2:[0-9a-f]*]])
129b61ac4a8Savl-llvm 
130b61ac4a8Savl-llvm // CHECK:DW_TAG_subprogram
131b61ac4a8Savl-llvm // CHECK:DW_AT_low_pc
132b61ac4a8Savl-llvm // CHECK:DW_AT_high_pc
133b61ac4a8Savl-llvm // CHECK:DW_AT_frame_base
134b61ac4a8Savl-llvm // CHECK:DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
135b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"foo"
136b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
137b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (74)
138b61ac4a8Savl-llvm // CHECK:DW_AT_external
139b61ac4a8Savl-llvm 
140b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
141b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"s"
142b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
143b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (75)
144b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[TYPEDEF_ALIASFORS]] "AliasForS
145b61ac4a8Savl-llvm 
146b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
147b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"n"
148b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
149b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (76)
150b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[S_STRUCTURE_NESTED]] "S::Neste
151b61ac4a8Savl-llvm 
152b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
153b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"nc"
154b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
155b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (77)
156b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[C_CLASS]] "N::C"
157b61ac4a8Savl-llvm 
158b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
159b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"ac"
160b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
161b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (78)
162b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref4]{{.*}} {0x[[ANON_CLASS1:[0-9a-f]*]]} "(anonymous namespace)::AnonC")
163b61ac4a8Savl-llvm 
164b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
165b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"u"
166b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
167b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (79)
168b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[U_UNION]] "U"
169b61ac4a8Savl-llvm 
170b61ac4a8Savl-llvm // CHECK:0x[[ANON_NAMESPACE1:[0-9a-f]*]]:{{.*}}DW_TAG_namespace
171b61ac4a8Savl-llvm // CHECK-NEXT:DW_AT_decl_file{{.*}}"{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp"
172b61ac4a8Savl-llvm 
173b61ac4a8Savl-llvm // CHECK:0x[[ANON_CLASS1]]:{{.*}}DW_TAG_class_type
174b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"AnonC"
175b61ac4a8Savl-llvm // CHECK:DW_AT_byte_size [DW_FORM_data1] (0x01)
176b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
177b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (65)
178b61ac4a8Savl-llvm 
179b61ac4a8Savl-llvm // The third compile unit contains subprogram and its variables:
180b61ac4a8Savl-llvm // CHECK:DW_TAG_compile_unit
181b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"odr-uniquing.cpp"
182b61ac4a8Savl-llvm // CHECK-NEXT:DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF3:[0-9a-f]*]])
183b61ac4a8Savl-llvm 
184b61ac4a8Savl-llvm // CHECK:DW_TAG_subprogram
185b61ac4a8Savl-llvm // CHECK:DW_AT_low_pc
186b61ac4a8Savl-llvm // CHECK:DW_AT_high_pc
187b61ac4a8Savl-llvm // CHECK:DW_AT_frame_base
188b61ac4a8Savl-llvm // CHECK:DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
189b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"foo"
190b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
191b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (74)
192b61ac4a8Savl-llvm // CHECK:DW_AT_external
193b61ac4a8Savl-llvm 
194b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
195b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"s"
196b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
197b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (75)
198b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[TYPEDEF_ALIASFORS]] "AliasForS
199b61ac4a8Savl-llvm 
200b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
201b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"n"
202b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
203b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (76)
204b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[S_STRUCTURE_NESTED]] "S::Neste
205b61ac4a8Savl-llvm 
206b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
207b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"nc"
208b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
209b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (77)
210b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[C_CLASS]] "N::C"
211b61ac4a8Savl-llvm 
212b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
213b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"ac"
214b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
215b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (78)
216b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref4]{{.*}} {0x[[ANON_CLASS2:[0-9a-f]*]]} "(anonymous namespace)::AnonC")
217b61ac4a8Savl-llvm 
218b61ac4a8Savl-llvm // CHECK:DW_TAG_variable
219b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"u"
220b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
221b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (79)
222b61ac4a8Savl-llvm // CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[U_UNION]] "U"
223b61ac4a8Savl-llvm 
224b61ac4a8Savl-llvm // CHECK:0x[[ANON_NAMESPACE2:[0-9a-f]*]]:{{.*}}DW_TAG_namespace
225b61ac4a8Savl-llvm // CHECK-NEXT:DW_AT_decl_file{{.*}}"{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp"
226b61ac4a8Savl-llvm 
227b61ac4a8Savl-llvm // CHECK:0x[[ANON_CLASS2]]:{{.*}}DW_TAG_class_type
228b61ac4a8Savl-llvm // CHECK:DW_AT_name{{.*}}"AnonC"
229b61ac4a8Savl-llvm // CHECK:DW_AT_byte_size [DW_FORM_data1] (0x01)
230b61ac4a8Savl-llvm // CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
231b61ac4a8Savl-llvm // CHECK:DW_AT_decl_line [DW_FORM_data1] (65)
232b61ac4a8Savl-llvm 
233b61ac4a8Savl-llvm // CHECK:.debug_aranges contents
234b61ac4a8Savl-llvm 
235b61ac4a8Savl-llvm // CHECK:debug_line[0x[[LINE_TABLE_OFF1]]]
236b61ac4a8Savl-llvm 
237b61ac4a8Savl-llvm // CHECK:debug_line[0x[[LINE_TABLE_OFF2]]]
238b61ac4a8Savl-llvm 
239b61ac4a8Savl-llvm // CHECK:debug_line[0x[[LINE_TABLE_OFF3]]]
240b61ac4a8Savl-llvm 
241b61ac4a8Savl-llvm // CHECK:.debug_str contents:
242b61ac4a8Savl-llvm // CHECK:0x00000000: ""
243b61ac4a8Savl-llvm // CHECK:0x00000001: "clang version 3.8.0 (trunk 244290) (llvm/trunk 244270)"
244b61ac4a8Savl-llvm // CHECK:0x00000038: "odr-uniquing.cpp"
245b61ac4a8Savl-llvm // CHECK:0x00000049: "/tmp"
246b61ac4a8Savl-llvm // CHECK:0x0000004e: "_Z3foov"
247b61ac4a8Savl-llvm // CHECK:0x00000056: "foo"
248b61ac4a8Savl-llvm // CHECK:0x0000005a: "s"
249b61ac4a8Savl-llvm // CHECK:0x0000005c: "n"
250b61ac4a8Savl-llvm // CHECK:0x0000005e: "nc"
251b61ac4a8Savl-llvm // CHECK:0x00000061: "ac"
252b61ac4a8Savl-llvm // CHECK:0x00000064: "u"
253b61ac4a8Savl-llvm // CHECK:0x00000066: "AnonC"
254b61ac4a8Savl-llvm // CHECK:0x0000006c: "(anonymous namespace)"
255b61ac4a8Savl-llvm // CHECK:0x00000082: "llvm DWARFLinkerParallel library version "
256b61ac4a8Savl-llvm // CHECK:0x000000ac: "__artificial_type_unit"
257b61ac4a8Savl-llvm // CHECK:0x000000c3: ""
258b61ac4a8Savl-llvm // CHECK:0x000000c4: "AliasForS"
259b61ac4a8Savl-llvm // CHECK:0x000000ce: "C"
260b61ac4a8Savl-llvm // CHECK:0x000000d0: "N"
261b61ac4a8Savl-llvm // CHECK:0x000000d2: "Nested"
262b61ac4a8Savl-llvm // CHECK:0x000000d9: "S"
263b61ac4a8Savl-llvm // CHECK:0x000000db: "U"
264b61ac4a8Savl-llvm 
265b61ac4a8Savl-llvm 
266b61ac4a8Savl-llvm // CHECK:.apple_names
267b61ac4a8Savl-llvm // CHECK: Bucket count: 2
268b61ac4a8Savl-llvm // CHECK: String: {{.*}} "foo"
269b61ac4a8Savl-llvm // CHECK: String: {{.*}} "_Z3foov"
270b61ac4a8Savl-llvm 
271b61ac4a8Savl-llvm // CHECK:.apple_types
272b61ac4a8Savl-llvm // CHECK: Bucket count: 6
273b61ac4a8Savl-llvm // CHECK: String: {{.*}} "AnonC"
274b61ac4a8Savl-llvm // CHECK: String: {{.*}} "Nested"
275b61ac4a8Savl-llvm // CHECK: String: {{.*}} "S"
276b61ac4a8Savl-llvm // CHECK: String: {{.*}} "C"
277b61ac4a8Savl-llvm // CHECK: String: {{.*}} "U"
278b61ac4a8Savl-llvm // CHECK: String: {{.*}} "AliasForS"
279b61ac4a8Savl-llvm 
280b61ac4a8Savl-llvm // CHECK:.apple_namespaces
281b61ac4a8Savl-llvm // CHECK: Bucket count: 2
282b61ac4a8Savl-llvm // CHECK: String: {{.*}} "(anonymous namespace)"
283b61ac4a8Savl-llvm // CHECK: String: {{.*}} "N"
284b61ac4a8Savl-llvm 
285b61ac4a8Savl-llvm // CHECK:.apple_objc
286b61ac4a8Savl-llvm // CHECK:Bucket count: 1
287b61ac4a8Savl-llvm 
288b61ac4a8Savl-llvm // CHECK-NOODR: .debug_info contents
289b61ac4a8Savl-llvm 
290b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_compile_unit
291b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"odr-uniquing.cpp"
292b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF1:[0-9a-f]*]])
293b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_low_pc{{.*}}(0x{{0*}}[[LOW_PC1:[0-9a-f]*]])
294b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_high_pc{{.*}}(0x{{0*}}[[HIGH_PC1:[0-9a-f]*]])
295b61ac4a8Savl-llvm 
296b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_structure_type
297b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"S"
298b61ac4a8Savl-llvm 
299b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_structure_type
300b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"Nested"
301b61ac4a8Savl-llvm 
302b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_namespace
303b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"N"
304b61ac4a8Savl-llvm 
305b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_class_type
306b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"C"
307b61ac4a8Savl-llvm 
308b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_union_type
309b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"U"
310b61ac4a8Savl-llvm 
311b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_member
312b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"C"
313b61ac4a8Savl-llvm 
314b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_class_type
315b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"C"
316b61ac4a8Savl-llvm 
317b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_member
318b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"S"
319b61ac4a8Savl-llvm 
320b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_structure_type
321b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"S"
322b61ac4a8Savl-llvm 
323b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_subprogram
324b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_low_pc
325b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_high_pc
326b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
327b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_name{{.*}}"foo"
328b61ac4a8Savl-llvm 
329b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
330b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"s"
331b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"AliasForS"
332b61ac4a8Savl-llvm 
333b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
334b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"n"
335b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"S::Nested"
336b61ac4a8Savl-llvm 
337b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
338b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"nc"
339b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"N::C"
340b61ac4a8Savl-llvm 
341b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
342b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"ac"
343b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"(anonymous namespace)::AnonC"
344b61ac4a8Savl-llvm 
345b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
346b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"u"
347b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"U"
348b61ac4a8Savl-llvm 
349b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_typedef
350b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"S"
351b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"AliasForS"
352b61ac4a8Savl-llvm 
353b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_namespace
354b61ac4a8Savl-llvm 
355b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_class_type
356b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"AnonC"
357b61ac4a8Savl-llvm 
358b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_compile_unit
359b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"odr-uniquing.cpp"
360b61ac4a8Savl-llvm // CHECK-NOODR-NEXT: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF2:[0-9a-f]*]])
361b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_low_pc
362b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_high_pc
363b61ac4a8Savl-llvm 
364b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_structure_type
365b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"S"
366b61ac4a8Savl-llvm 
367b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_structure_type
368b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"Nested"
369b61ac4a8Savl-llvm 
370b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_namespace
371b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"N"
372b61ac4a8Savl-llvm 
373b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_class_type
374b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"C"
375b61ac4a8Savl-llvm 
376b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_union_type
377b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"U"
378b61ac4a8Savl-llvm 
379b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_member
380b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"C"
381b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"U::C"
382b61ac4a8Savl-llvm 
383b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_class_type
384b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"C"
385b61ac4a8Savl-llvm 
386b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_member
387b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"S"
388b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"U::S"
389b61ac4a8Savl-llvm 
390b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_structure_type
391b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"S"
392b61ac4a8Savl-llvm 
393b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_subprogram
394b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_low_pc
395b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_high_pc
396b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
397b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"foo"
398b61ac4a8Savl-llvm 
399b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
400b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"s"
401b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"AliasForS"
402b61ac4a8Savl-llvm 
403b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
404b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"n"
405b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"S::Nested"
406b61ac4a8Savl-llvm 
407b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
408b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"nc"
409b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}} "N::C"
410b61ac4a8Savl-llvm 
411b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
412b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"ac"
413b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"(anonymous namespace)::AnonC"
414b61ac4a8Savl-llvm 
415b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_variable
416b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"u"
417b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"U"
418b61ac4a8Savl-llvm 
419b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_typedef
420b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_type{{.*}}"S"
421b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"AliasForS"
422b61ac4a8Savl-llvm 
423b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_namespace
424b61ac4a8Savl-llvm 
425b61ac4a8Savl-llvm // CHECK-NOODR: DW_TAG_class_type
426b61ac4a8Savl-llvm // CHECK-NOODR: DW_AT_name{{.*}}"AnonC"
427b61ac4a8Savl-llvm 
428b61ac4a8Savl-llvm // CHECK-NOODR:.debug_aranges contents
429b61ac4a8Savl-llvm 
430b61ac4a8Savl-llvm // CHECK-NOODR:debug_line[0x[[LINE_TABLE_OFF1]]]
431b61ac4a8Savl-llvm 
432b61ac4a8Savl-llvm // CHECK-NOODR:debug_line[0x[[LINE_TABLE_OFF2]]]
433b61ac4a8Savl-llvm 
434b61ac4a8Savl-llvm // CHECK-NOODR:.debug_str contents:
435b61ac4a8Savl-llvm // CHECK-NOODR:0x00000000: ""
436b61ac4a8Savl-llvm // CHECK-NOODR:0x00000001: "clang version 3.8.0 (trunk 244290) (llvm/trunk 244270)"
437b61ac4a8Savl-llvm // CHECK-NOODR:0x00000038: "odr-uniquing.cpp"
438b61ac4a8Savl-llvm // CHECK-NOODR:0x00000049: "/tmp"
439b61ac4a8Savl-llvm // CHECK-NOODR:0x0000004e: "S"
440b61ac4a8Savl-llvm // CHECK-NOODR:0x00000050: "Nested"
441b61ac4a8Savl-llvm // CHECK-NOODR:0x00000057: "N"
442b61ac4a8Savl-llvm // CHECK-NOODR:0x00000059: "C"
443b61ac4a8Savl-llvm // CHECK-NOODR:0x0000005b: "U"
444b61ac4a8Savl-llvm // CHECK-NOODR:0x0000005d: "_Z3foov"
445b61ac4a8Savl-llvm // CHECK-NOODR:0x00000065: "foo"
446b61ac4a8Savl-llvm // CHECK-NOODR:0x00000069: "s"
447b61ac4a8Savl-llvm // CHECK-NOODR:0x0000006b: "n"
448b61ac4a8Savl-llvm // CHECK-NOODR:0x0000006d: "nc"
449b61ac4a8Savl-llvm // CHECK-NOODR:0x00000070: "ac"
450b61ac4a8Savl-llvm // CHECK-NOODR:0x00000073: "u"
451b61ac4a8Savl-llvm // CHECK-NOODR:0x00000075: "AliasForS"
452b61ac4a8Savl-llvm // CHECK-NOODR:0x0000007f: "AnonC"
453b61ac4a8Savl-llvm // CHECK-NOODR:0x00000085: "(anonymous namespace)"
454b61ac4a8Savl-llvm 
455b61ac4a8Savl-llvm // CHECK-NOODR: .apple_names
456b61ac4a8Savl-llvm // CHECK-NOODR: Bucket count: 2
457b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "foo"
458b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "_Z3foov"
459b61ac4a8Savl-llvm 
460b61ac4a8Savl-llvm // CHECK-NOODR: .apple_types
461b61ac4a8Savl-llvm // CHECK-NOODR: Bucket count: 6
462b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "AnonC"
463b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "Nested"
464b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "S"
465b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "C"
466b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "U"
467b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "AliasForS"
468b61ac4a8Savl-llvm 
469b61ac4a8Savl-llvm // CHECK-NOODR: .apple_namespaces
470b61ac4a8Savl-llvm // CHECK-NOODR: Bucket count: 2
471b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "(anonymous namespace)"
472b61ac4a8Savl-llvm // CHECK-NOODR: String: {{.*}} "N"
473b61ac4a8Savl-llvm 
474b61ac4a8Savl-llvm // CHECK-NOODR: .apple_objc
475b61ac4a8Savl-llvm // CHECK-NOODR:Bucket count: 1
476