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