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-llvmvoid 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