102 lines · plain
1/* Compile with:2 for FILE in `seq 3`; do3 clang -g -c X86/odr-fwd-declaration.cpp -DFILE$FILE -o4 Inputs/odr-fwd-declaration/$FILE.o done5*/6 7// RUN: dsymutil --linker=parallel -f \8// RUN: -oso-prepend-path=%p/../../Inputs/odr-fwd-declaration \9// RUN: -y %p/../dummy-debug-map.map -o %t1.out10// RUN: llvm-dwarfdump -v -debug-info %t1.out | FileCheck %s11 12#ifdef FILE113# 1 "Header.h" 114typedef struct S *Sptr;15typedef Sptr *Sptrptr;16# 3 "Source1.cpp" 217void foo() { Sptrptr ptr1 = 0; }18 19// First we confirm that types are in type table.20//21// CHECK: DW_TAG_compile_unit22// CHECK: DW_AT_name{{.*}}"__artificial_type_unit"23 24// CHECK: DW_TAG_base_type25 26// CHECK: 0x[[PTR_S:[a-f0-9]*]]: DW_TAG_pointer_type27// CHECK-NEXT: DW_AT_type{{.*}}{0x[[STRUCT_S:[a-f0-9]*]]} "S"28 29// CHECK: 0x[[PTR_PTR_S:[a-f0-9]*]]: DW_TAG_pointer_type30// CHECK-NEXT: DW_AT_type{{.*}}{0x[[TYPEDEF_PTR_S:[a-f0-9]*]]} "Sptr"31 32// CHECK: 0x[[STRUCT_S]]: DW_TAG_structure_type33// CHECK-NEXT: DW_AT_name{{.*}}"S"34 35// CHECK: DW_TAG_member36// CHECK-NEXT: DW_AT_name{{.*}}"field"37 38// CHECK: 0x[[TYPEDEF_PTR_PTR_S:[a-f0-9]*]]: DW_TAG_typedef39// CHECK-NEXT: DW_AT_type{{.*}}{0x[[PTR_PTR_S]]} "Sptr *"40// CHECK-NEXT: DW_AT_name{{.*}}"Sptrptr"41 42// CHECK: 0x[[TYPEDEF_PTR_S]]: DW_TAG_typedef43// CHECK-NEXT: DW_AT_type{{.*}}{0x[[PTR_S]]} "S *"44// CHECK-NEXT: DW_AT_name{{.*}}"Sptr"45 46// First we confirm that first compile unit properly references type.47//48// CHECK: DW_TAG_compile_unit49// CHECK: DW_AT_name{{.*}}"X86/odr-fwd-declaration.cpp"50//51// CHECK: TAG_variable52// CHECK-NOT: {{DW_TAG|NULL}}53// CHECK: AT_name{{.*}} "ptr1"54// CHECK-NOT: {{DW_TAG|NULL}}55// CHECK: AT_type{{.*}}0x00000000[[TYPEDEF_PTR_PTR_S]]56 57#elif defined(FILE2)58# 1 "Header.h" 159typedef struct S *Sptr;60typedef Sptr *Sptrptr;61# 3 "Source2.cpp" 262struct S {63 int field;64};65void bar() { Sptrptr ptr2 = 0; }66 67// Next we confirm that the second compile unit properly references types.68//69// CHECK: DW_TAG_compile_unit70// CHECK: DW_AT_name{{.*}}"X86/odr-fwd-declaration.cpp"71//72// CHECK: TAG_variable73// CHECK-NOT: {{DW_TAG|NULL}}74// CHECK: AT_name{{.*}} "ptr2"75// CHECK-NOT: {{DW_TAG|NULL}}76// CHECK: AT_type{{.*}}0x00000000[[TYPEDEF_PTR_PTR_S]]77 78#elif defined(FILE3)79# 1 "Header.h" 180typedef struct S *Sptr;81typedef Sptr *Sptrptr;82# 3 "Source1.cpp" 283void foo() { Sptrptr ptr1 = 0; }84 85// Finally we confirm that third compile unit references types correctly.86//87// CHECK: DW_TAG_compile_unit88// CHECK: DW_AT_name{{.*}}"X86/odr-fwd-declaration.cpp"89//90// CHECK: TAG_variable91// CHECK-NOT: {{DW_TAG|NULL}}92// CHECK: AT_name{{.*}} "ptr1"93// CHECK-NOT: {{DW_TAG|NULL}}94// CHECK: AT_type{{.*}}0x00000000[[TYPEDEF_PTR_PTR_S]]95// CHECK-NOT: TAG_typedef96// CHECK-NOT: TAG_pointer97// CHECK-NOT: TAG_structure_type98 99#else100#error "You must define which file you generate"101#endif102