blob: f156023fd0a9531e7d9f73bd2a16115fdc3afcba [file] [log] [blame]
/* 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