xref: /llvm-project/llvm/test/tools/dsymutil/X86/DWARFLinkerParallel/odr-anon-namespace.cpp (revision f1fdfe6888f93b9f6dfb4689e1f3206de584ff5b)
1b61ac4a8Savl-llvm /* Compile with:
2b61ac4a8Savl-llvm    for FILE in `seq 2`; do
3b61ac4a8Savl-llvm      clang -g -c  odr-anon-namespace.cpp -DFILE$FILE -o odr-anon-namespace/$FILE.o
4b61ac4a8Savl-llvm    done
5b61ac4a8Savl-llvm  */
6b61ac4a8Savl-llvm 
7*f1fdfe68SAlexey Lapshin // RUN: dsymutil --linker parallel -f \
8b61ac4a8Savl-llvm // RUN:   -oso-prepend-path=%p/../../Inputs/odr-anon-namespace \
9b61ac4a8Savl-llvm // RUN:   -y %p/../dummy-debug-map.map -o - | \
10b61ac4a8Savl-llvm // RUN:   llvm-dwarfdump -debug-info - | FileCheck %s
11b61ac4a8Savl-llvm 
12b61ac4a8Savl-llvm #ifdef FILE1
13b61ac4a8Savl-llvm // Currently dsymutil will unique the contents of anonymous
14b61ac4a8Savl-llvm // namespaces if they are from the same file/line. Force this
15b61ac4a8Savl-llvm // namespace to appear different eventhough it's the same (this
16b61ac4a8Savl-llvm // uniquing is actually a bug kept for backward compatibility, see the
17b61ac4a8Savl-llvm // comments in DeclContextTree::getChildDeclContext()).
18b61ac4a8Savl-llvm #line 42
19b61ac4a8Savl-llvm #endif
20b61ac4a8Savl-llvm namespace {
21b61ac4a8Savl-llvm class C {};
22b61ac4a8Savl-llvm }
23b61ac4a8Savl-llvm 
foo()24b61ac4a8Savl-llvm void foo() {
25b61ac4a8Savl-llvm   C c;
26b61ac4a8Savl-llvm }
27b61ac4a8Savl-llvm 
28b61ac4a8Savl-llvm // Keep the ifdef guards for FILE1 and FILE2 even if all the code is
29b61ac4a8Savl-llvm // above to clearly show what the CHECK lines are testing.
30b61ac4a8Savl-llvm #ifdef FILE1
31b61ac4a8Savl-llvm 
32b61ac4a8Savl-llvm // CHECK: TAG_compile_unit
33b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
34b61ac4a8Savl-llvm // CHECK: AT_name{{.*}}"odr-anon-namespace.cpp"
35b61ac4a8Savl-llvm 
36b61ac4a8Savl-llvm // CHECK: DW_TAG_variable
37b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
38b61ac4a8Savl-llvm // CHECK: DW_AT_name {{.*}}"c"
39b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
40b61ac4a8Savl-llvm // CHECK: DW_AT_type {{.*}}0x[[C_FILE1:[0-9a-f]*]]
41b61ac4a8Savl-llvm 
42b61ac4a8Savl-llvm // CHECK: DW_TAG_namespace
43b61ac4a8Savl-llvm // CHECK-NOT: {{DW_AT_name|NULL|DW_TAG}}
44b61ac4a8Savl-llvm // CHECK: 0x[[C_FILE1]]:{{.*}}DW_TAG_class_type
45b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
46b61ac4a8Savl-llvm // CHECK: DW_AT_name{{.*}}"C"
47b61ac4a8Savl-llvm 
48b61ac4a8Savl-llvm #elif defined(FILE2)
49b61ac4a8Savl-llvm 
50b61ac4a8Savl-llvm // CHECK: TAG_compile_unit
51b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
52b61ac4a8Savl-llvm // CHECK: AT_name{{.*}}"odr-anon-namespace.cpp"
53b61ac4a8Savl-llvm 
54b61ac4a8Savl-llvm // CHECK: DW_TAG_variable
55b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
56b61ac4a8Savl-llvm // CHECK: DW_AT_name {{.*}}"c"
57b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
58b61ac4a8Savl-llvm // CHECK: DW_AT_type {{.*}}0x[[C_FILE2:[0-9a-f]*]]
59b61ac4a8Savl-llvm 
60b61ac4a8Savl-llvm // CHECK: DW_TAG_namespace
61b61ac4a8Savl-llvm // CHECK-NOT: {{DW_AT_name|NULL|DW_TAG}}
62b61ac4a8Savl-llvm // CHECK: 0x[[C_FILE2]]:{{.*}}DW_TAG_class_type
63b61ac4a8Savl-llvm // CHECK-NOT: DW_TAG
64b61ac4a8Savl-llvm // CHECK: DW_AT_name{{.*}}"C"
65b61ac4a8Savl-llvm 
66b61ac4a8Savl-llvm #else
67b61ac4a8Savl-llvm #error "You must define which file you generate"
68b61ac4a8Savl-llvm #endif
69