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