Files
clang-p2996/llvm/test/tools/dsymutil/X86/DWARFLinkerParallel/odr-uniquing.cpp
Alexey Lapshin f1fdfe6888 [dsymutil][llvm-dwarfutil] Rename command line options to avoid using vendor names. (#78135)
This patch renames values of dsymutil/llvm-dwarfutil options:

--linker apple -> --linker classic
--linker llvm -> --linker parallel

The purpose to rename options is to avoid using vendor names and to
match with library names. It should be safe to rename options at current
stage as they are not seemed widely used(we may not preserve backward
compatibility).
2024-01-18 12:55:04 +03:00

476 lines
16 KiB
C++

/* Compile with:
clang -g -c odr-uniquing.cpp -o odr-uniquing/1.o
cp odr-uniquing/1.o odr-uniquing/2.o
The aim of these test is to check that all the 'type types' that
should be uniqued through the ODR really are.
The resulting object file is linked against itself using a fake
debug map. The end result is:
- with ODR uniquing: all types in second and third CUs should point back
to the types of the first CU(except types from anonymous namespace).
- without ODR uniquing: all types are re-emited in the second CU.
*/
/* Check by llvm-dwarfdump --verify */
// RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
// RUN: -y %p/../dummy-debug-map.map -o - | llvm-dwarfdump --verify - | \
// RUN: FileCheck -check-prefixes=VERIFY %s
// RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
// RUN: -y %p/../dummy-debug-map.map -no-odr -o - | llvm-dwarfdump --verify - | \
// RUN: FileCheck -check-prefixes=VERIFY %s
/* Check for llvm-dwarfdump -a output */
// RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
// RUN: -y %p/../dummy-debug-map.map -o - | llvm-dwarfdump -v -a - | \
// RUN: FileCheck -check-prefixes=CHECK %s
// RUN: dsymutil --linker=parallel -f -oso-prepend-path=%p/../../Inputs/odr-uniquing \
// RUN: -y %p/../dummy-debug-map.map -no-odr -o - | llvm-dwarfdump -v -a - | \
// RUN: FileCheck -check-prefixes=CHECK-NOODR %s
struct S {
struct Nested {};
};
namespace N {
class C {};
} // namespace N
union U {
class C {
} C;
struct S {
} S;
};
typedef S AliasForS;
namespace {
class AnonC {};
} // namespace
// This function is only here to hold objects that refer to the above types.
void foo() {
AliasForS s;
S::Nested n;
N::C nc;
AnonC ac;
U u;
}
// VERIFY: Verifying .debug_abbrev...
// VERIFY: Verifying .debug_info Unit Header Chain...
// VERIFY: Verifying .debug_types Unit Header Chain...
// VERIFY: Verifying .apple_names...
// VERIFY: Verifying .apple_types...
// VERIFY: Verifying .apple_namespaces...
// VERIFY: Verifying .apple_objc...
// VERIFY: No errors.
// The first compile unit contains all the types:
// CHECK: .debug_info contents
// CHECK: DW_TAG_compile_unit
// CHECK: DW_AT_language{{.*}} (DW_LANG_C_plus_plus)
// CHECK: DW_AT_name{{.*}}"__artificial_type_unit")
// CHECK: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF1:[0-9a-f]*]])
// CHECK:0x[[N_NAMESPACE:[0-9a-f]*]]:{{.*}}DW_TAG_namespace
// CHECK:DW_AT_name{{.*}}"N"
// CHECK:0x[[C_CLASS:[0-9a-f]*]]:{{.*}}DW_TAG_class_type
// CHECK:DW_AT_name{{.*}}"C"
// CHECK:DW_AT_byte_size [DW_FORM_data1] (0x01)
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (35)
// CHECK:0x[[S_STRUCTURE:[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
// CHECK:DW_AT_name{{.*}}"S"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (22)
// CHECK:0x[[S_STRUCTURE_NESTED:[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
// CHECK:DW_AT_name{{.*}}"Nested"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp")
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (23)
// CHECK:0x[[TYPEDEF_ALIASFORS:[0-9a-f]*]]:{{.*}}DW_TAG_typedef
// CHECK:DW_AT_name{{.*}}"AliasForS"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (58)
// CHECK:0x[[U_UNION:[0-9a-f]*]]:{{.*}}DW_TAG_union_type
// CHECK:DW_AT_name{{.*}}"U"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (45)
// CHECK:0x[[U_C_CLASS:[0-9a-f]*]]:{{.*}}DW_TAG_class_type
// CHECK:DW_AT_name{{.*}}"C"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (46)
// CHECK:0x[[U_C_MEMBER:[0-9a-f]*]]:{{.*}}DW_TAG_member
// CHECK:DW_AT_name{{.*}}"C"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (46)
// CHECK:0x[[U_S_MEMBER:[0-9a-f]*]]:{{.*}}DW_TAG_member
// CHECK:DW_AT_name{{.*}}"S"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (47)
// CHECK:0x[[U_S_STRUCT:[0-9a-f]*]]:{{.*}}DW_TAG_structure_type
// CHECK:DW_AT_name{{.*}}"S"
// CHECK-DAG:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK-DAG:DW_AT_decl_line [DW_FORM_data1] (47)
// The second compile unit contains subprogram and its variables:
// CHECK:DW_TAG_compile_unit
// CHECK:DW_AT_name{{.*}}"odr-uniquing.cpp"
// CHECK-NEXT: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF2:[0-9a-f]*]])
// CHECK:DW_TAG_subprogram
// CHECK:DW_AT_low_pc
// CHECK:DW_AT_high_pc
// CHECK:DW_AT_frame_base
// CHECK:DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
// CHECK:DW_AT_name{{.*}}"foo"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (74)
// CHECK:DW_AT_external
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"s"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (75)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[TYPEDEF_ALIASFORS]] "AliasForS
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"n"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (76)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[S_STRUCTURE_NESTED]] "S::Neste
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"nc"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (77)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[C_CLASS]] "N::C"
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"ac"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (78)
// CHECK:DW_AT_type [DW_FORM_ref4]{{.*}} {0x[[ANON_CLASS1:[0-9a-f]*]]} "(anonymous namespace)::AnonC")
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"u"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (79)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[U_UNION]] "U"
// CHECK:0x[[ANON_NAMESPACE1:[0-9a-f]*]]:{{.*}}DW_TAG_namespace
// CHECK-NEXT:DW_AT_decl_file{{.*}}"{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp"
// CHECK:0x[[ANON_CLASS1]]:{{.*}}DW_TAG_class_type
// CHECK:DW_AT_name{{.*}}"AnonC"
// CHECK:DW_AT_byte_size [DW_FORM_data1] (0x01)
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (65)
// The third compile unit contains subprogram and its variables:
// CHECK:DW_TAG_compile_unit
// CHECK:DW_AT_name{{.*}}"odr-uniquing.cpp"
// CHECK-NEXT:DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF3:[0-9a-f]*]])
// CHECK:DW_TAG_subprogram
// CHECK:DW_AT_low_pc
// CHECK:DW_AT_high_pc
// CHECK:DW_AT_frame_base
// CHECK:DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
// CHECK:DW_AT_name{{.*}}"foo"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (74)
// CHECK:DW_AT_external
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"s"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (75)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[TYPEDEF_ALIASFORS]] "AliasForS
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"n"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (76)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[S_STRUCTURE_NESTED]] "S::Neste
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"nc"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (77)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[C_CLASS]] "N::C"
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"ac"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (78)
// CHECK:DW_AT_type [DW_FORM_ref4]{{.*}} {0x[[ANON_CLASS2:[0-9a-f]*]]} "(anonymous namespace)::AnonC")
// CHECK:DW_TAG_variable
// CHECK:DW_AT_name{{.*}}"u"
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (79)
// CHECK:DW_AT_type [DW_FORM_ref_addr] (0x{{0*}}[[U_UNION]] "U"
// CHECK:0x[[ANON_NAMESPACE2:[0-9a-f]*]]:{{.*}}DW_TAG_namespace
// CHECK-NEXT:DW_AT_decl_file{{.*}}"{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp"
// CHECK:0x[[ANON_CLASS2]]:{{.*}}DW_TAG_class_type
// CHECK:DW_AT_name{{.*}}"AnonC"
// CHECK:DW_AT_byte_size [DW_FORM_data1] (0x01)
// CHECK:DW_AT_decl_file [DW_FORM_data1] ("{{[\\/]}}tmp{{[\\/]}}odr-uniquing.cpp
// CHECK:DW_AT_decl_line [DW_FORM_data1] (65)
// CHECK:.debug_aranges contents
// CHECK:debug_line[0x[[LINE_TABLE_OFF1]]]
// CHECK:debug_line[0x[[LINE_TABLE_OFF2]]]
// CHECK:debug_line[0x[[LINE_TABLE_OFF3]]]
// CHECK:.debug_str contents:
// CHECK:0x00000000: ""
// CHECK:0x00000001: "clang version 3.8.0 (trunk 244290) (llvm/trunk 244270)"
// CHECK:0x00000038: "odr-uniquing.cpp"
// CHECK:0x00000049: "/tmp"
// CHECK:0x0000004e: "_Z3foov"
// CHECK:0x00000056: "foo"
// CHECK:0x0000005a: "s"
// CHECK:0x0000005c: "n"
// CHECK:0x0000005e: "nc"
// CHECK:0x00000061: "ac"
// CHECK:0x00000064: "u"
// CHECK:0x00000066: "AnonC"
// CHECK:0x0000006c: "(anonymous namespace)"
// CHECK:0x00000082: "llvm DWARFLinkerParallel library version "
// CHECK:0x000000ac: "__artificial_type_unit"
// CHECK:0x000000c3: ""
// CHECK:0x000000c4: "AliasForS"
// CHECK:0x000000ce: "C"
// CHECK:0x000000d0: "N"
// CHECK:0x000000d2: "Nested"
// CHECK:0x000000d9: "S"
// CHECK:0x000000db: "U"
// CHECK:.apple_names
// CHECK: Bucket count: 2
// CHECK: String: {{.*}} "foo"
// CHECK: String: {{.*}} "_Z3foov"
// CHECK:.apple_types
// CHECK: Bucket count: 6
// CHECK: String: {{.*}} "AnonC"
// CHECK: String: {{.*}} "Nested"
// CHECK: String: {{.*}} "S"
// CHECK: String: {{.*}} "C"
// CHECK: String: {{.*}} "U"
// CHECK: String: {{.*}} "AliasForS"
// CHECK:.apple_namespaces
// CHECK: Bucket count: 2
// CHECK: String: {{.*}} "(anonymous namespace)"
// CHECK: String: {{.*}} "N"
// CHECK:.apple_objc
// CHECK:Bucket count: 1
// CHECK-NOODR: .debug_info contents
// CHECK-NOODR: DW_TAG_compile_unit
// CHECK-NOODR: DW_AT_name{{.*}}"odr-uniquing.cpp"
// CHECK-NOODR-NEXT: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF1:[0-9a-f]*]])
// CHECK-NOODR: DW_AT_low_pc{{.*}}(0x{{0*}}[[LOW_PC1:[0-9a-f]*]])
// CHECK-NOODR-NEXT: DW_AT_high_pc{{.*}}(0x{{0*}}[[HIGH_PC1:[0-9a-f]*]])
// CHECK-NOODR: DW_TAG_structure_type
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"S"
// CHECK-NOODR: DW_TAG_structure_type
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"Nested"
// CHECK-NOODR: DW_TAG_namespace
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"N"
// CHECK-NOODR: DW_TAG_class_type
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"C"
// CHECK-NOODR: DW_TAG_union_type
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"U"
// CHECK-NOODR: DW_TAG_member
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"C"
// CHECK-NOODR: DW_TAG_class_type
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"C"
// CHECK-NOODR: DW_TAG_member
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"S"
// CHECK-NOODR: DW_TAG_structure_type
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"S"
// CHECK-NOODR: DW_TAG_subprogram
// CHECK-NOODR-NEXT: DW_AT_low_pc
// CHECK-NOODR-NEXT: DW_AT_high_pc
// CHECK-NOODR: DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
// CHECK-NOODR-NEXT: DW_AT_name{{.*}}"foo"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"s"
// CHECK-NOODR: DW_AT_type{{.*}}"AliasForS"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"n"
// CHECK-NOODR: DW_AT_type{{.*}}"S::Nested"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"nc"
// CHECK-NOODR: DW_AT_type{{.*}}"N::C"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"ac"
// CHECK-NOODR: DW_AT_type{{.*}}"(anonymous namespace)::AnonC"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"u"
// CHECK-NOODR: DW_AT_type{{.*}}"U"
// CHECK-NOODR: DW_TAG_typedef
// CHECK-NOODR: DW_AT_type{{.*}}"S"
// CHECK-NOODR: DW_AT_name{{.*}}"AliasForS"
// CHECK-NOODR: DW_TAG_namespace
// CHECK-NOODR: DW_TAG_class_type
// CHECK-NOODR: DW_AT_name{{.*}}"AnonC"
// CHECK-NOODR: DW_TAG_compile_unit
// CHECK-NOODR: DW_AT_name{{.*}}"odr-uniquing.cpp"
// CHECK-NOODR-NEXT: DW_AT_stmt_list{{.*}}(0x[[LINE_TABLE_OFF2:[0-9a-f]*]])
// CHECK-NOODR: DW_AT_low_pc
// CHECK-NOODR: DW_AT_high_pc
// CHECK-NOODR: DW_TAG_structure_type
// CHECK-NOODR: DW_AT_name{{.*}}"S"
// CHECK-NOODR: DW_TAG_structure_type
// CHECK-NOODR: DW_AT_name{{.*}}"Nested"
// CHECK-NOODR: DW_TAG_namespace
// CHECK-NOODR: DW_AT_name{{.*}}"N"
// CHECK-NOODR: DW_TAG_class_type
// CHECK-NOODR: DW_AT_name{{.*}}"C"
// CHECK-NOODR: DW_TAG_union_type
// CHECK-NOODR: DW_AT_name{{.*}}"U"
// CHECK-NOODR: DW_TAG_member
// CHECK-NOODR: DW_AT_name{{.*}}"C"
// CHECK-NOODR: DW_AT_type{{.*}}"U::C"
// CHECK-NOODR: DW_TAG_class_type
// CHECK-NOODR: DW_AT_name{{.*}}"C"
// CHECK-NOODR: DW_TAG_member
// CHECK-NOODR: DW_AT_name{{.*}}"S"
// CHECK-NOODR: DW_AT_type{{.*}}"U::S"
// CHECK-NOODR: DW_TAG_structure_type
// CHECK-NOODR: DW_AT_name{{.*}}"S"
// CHECK-NOODR: DW_TAG_subprogram
// CHECK-NOODR: DW_AT_low_pc
// CHECK-NOODR: DW_AT_high_pc
// CHECK-NOODR: DW_AT_MIPS_linkage_name{{.*}}"_Z3foov"
// CHECK-NOODR: DW_AT_name{{.*}}"foo"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"s"
// CHECK-NOODR: DW_AT_type{{.*}}"AliasForS"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"n"
// CHECK-NOODR: DW_AT_type{{.*}}"S::Nested"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"nc"
// CHECK-NOODR: DW_AT_type{{.*}} "N::C"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"ac"
// CHECK-NOODR: DW_AT_type{{.*}}"(anonymous namespace)::AnonC"
// CHECK-NOODR: DW_TAG_variable
// CHECK-NOODR: DW_AT_name{{.*}}"u"
// CHECK-NOODR: DW_AT_type{{.*}}"U"
// CHECK-NOODR: DW_TAG_typedef
// CHECK-NOODR: DW_AT_type{{.*}}"S"
// CHECK-NOODR: DW_AT_name{{.*}}"AliasForS"
// CHECK-NOODR: DW_TAG_namespace
// CHECK-NOODR: DW_TAG_class_type
// CHECK-NOODR: DW_AT_name{{.*}}"AnonC"
// CHECK-NOODR:.debug_aranges contents
// CHECK-NOODR:debug_line[0x[[LINE_TABLE_OFF1]]]
// CHECK-NOODR:debug_line[0x[[LINE_TABLE_OFF2]]]
// CHECK-NOODR:.debug_str contents:
// CHECK-NOODR:0x00000000: ""
// CHECK-NOODR:0x00000001: "clang version 3.8.0 (trunk 244290) (llvm/trunk 244270)"
// CHECK-NOODR:0x00000038: "odr-uniquing.cpp"
// CHECK-NOODR:0x00000049: "/tmp"
// CHECK-NOODR:0x0000004e: "S"
// CHECK-NOODR:0x00000050: "Nested"
// CHECK-NOODR:0x00000057: "N"
// CHECK-NOODR:0x00000059: "C"
// CHECK-NOODR:0x0000005b: "U"
// CHECK-NOODR:0x0000005d: "_Z3foov"
// CHECK-NOODR:0x00000065: "foo"
// CHECK-NOODR:0x00000069: "s"
// CHECK-NOODR:0x0000006b: "n"
// CHECK-NOODR:0x0000006d: "nc"
// CHECK-NOODR:0x00000070: "ac"
// CHECK-NOODR:0x00000073: "u"
// CHECK-NOODR:0x00000075: "AliasForS"
// CHECK-NOODR:0x0000007f: "AnonC"
// CHECK-NOODR:0x00000085: "(anonymous namespace)"
// CHECK-NOODR: .apple_names
// CHECK-NOODR: Bucket count: 2
// CHECK-NOODR: String: {{.*}} "foo"
// CHECK-NOODR: String: {{.*}} "_Z3foov"
// CHECK-NOODR: .apple_types
// CHECK-NOODR: Bucket count: 6
// CHECK-NOODR: String: {{.*}} "AnonC"
// CHECK-NOODR: String: {{.*}} "Nested"
// CHECK-NOODR: String: {{.*}} "S"
// CHECK-NOODR: String: {{.*}} "C"
// CHECK-NOODR: String: {{.*}} "U"
// CHECK-NOODR: String: {{.*}} "AliasForS"
// CHECK-NOODR: .apple_namespaces
// CHECK-NOODR: Bucket count: 2
// CHECK-NOODR: String: {{.*}} "(anonymous namespace)"
// CHECK-NOODR: String: {{.*}} "N"
// CHECK-NOODR: .apple_objc
// CHECK-NOODR:Bucket count: 1