Files
TheRock/compiler/amd-llvm/llvm/test/tools/dsymutil/X86/DWARFLinkerParallel/odr-uniquing.cpp
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07: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_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_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_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