342 lines · plain
1## This test checks debug info for the case when one compilation unit2## contains a forward declaration of a type and another compilation unit3## contains a definition for that type. The result should contain4## the original definition and the declaration without modifications.5 6# RUN: yaml2obj %s -o %t.o7# RUN: llvm-dwarfutil %t.o - | llvm-dwarfdump -a - | FileCheck %s8 9## CU1:10##11## class class1;12## template<int> class class2;13##14## class1 *var1;15## class2<int> *var2;16##17## CU2:18##19## class class1 {20## char member1;21## float member2;22## };23##24## template<int> class class2 {25## char member1;26## };27##28## class1 *var1;29## class2<int> *var2;30 31# CHECK: file format elf64-x86-6432# CHECK: .debug_info contents:33 34# CHECK: DW_TAG_compile_unit35# CHECK: DW_AT_name{{.*}}"CU1"36 37# CHECK: 0x[[CU1_CLASS1:[0-9a-f]*]]: DW_TAG_class_type{{.*[[:space:]].*}}DW_AT_name{{.*}}"class1"38# CHECK: DW_AT_declaration (true)39 40# CHECK: 0x[[CU1_CLASS2:[0-9a-f]*]]: DW_TAG_class_type{{.*[[:space:]].*}}DW_AT_name{{.*}}"class2"41# CHECK: DW_AT_declaration (true)42# CHECK: DW_TAG_template_type_parameter{{.*[[:space:]].*}}DW_AT_type{{.*}}0x00000000[[CU1_INT:[0-9a-f]*]] "int"43 44# CHECK: 0x[[CU1_INT]]: DW_TAG_base_type45# CHECK: DW_AT_name{{.*}}"int"46 47# CHECK: 0x[[CU1_PTR_CLASS1:[0-9a-f]*]]: DW_TAG_pointer_type{{.*[[:space:]].*}}DW_AT_type{{.*}}0x00000000[[CU1_CLASS1]] "class1"48 49# CHECK: 0x[[CU1_PTR_CLASS2:[0-9a-f]*]]: DW_TAG_pointer_type{{.*[[:space:]].*}}DW_AT_type{{.*}}0x00000000[[CU1_CLASS2]] "class2<int>"50 51# CHECK: DW_TAG_variable52# CHECK: DW_AT_name{{.*}}"var1"53# CHECK: DW_AT_type{{.*}}0x00000000[[CU1_PTR_CLASS1]] "class1 *"54# CHECK: DW_TAG_variable55# CHECK: DW_AT_name{{.*}}"var2"56# CHECK: DW_AT_type{{.*}}0x00000000[[CU1_PTR_CLASS2]] "class2<int> *"57 58# CHECK: DW_TAG_compile_unit59# CHECK: DW_AT_name{{.*}}"CU2"60 61# CHECK: 0x[[CU2_CLASS1:[0-9a-f]*]]: DW_TAG_class_type{{.*[[:space:]].*}}DW_AT_name{{.*}}"class1"62# CHECK: DW_TAG_member63# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_CHAR:[0-9a-f]*]] "char"64# CHECK: DW_AT_name{{.*}}"member1"65 66# CHECK: DW_TAG_member67# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_FLOAT:[0-9a-f]*]] "float"68# CHECK: DW_AT_name{{.*}}"member2"69 70# CHECK: 0x[[CU2_CLASS2:[0-9a-f]*]]: DW_TAG_class_type{{.*[[:space:]].*}}DW_AT_name{{.*}}"class2"71# CHECK: DW_TAG_template_type_parameter{{.*[[:space:]].*}}DW_AT_type{{.*}}0x00000000[[CU2_INT:[0-9a-f]*]] "int"72# CHECK: DW_TAG_member73# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_CHAR]] "char"74# CHECK: DW_AT_name{{.*}}"member1"75 76# CHECK: 0x[[CU2_INT]]: DW_TAG_base_type77# CHECK: DW_AT_name{{.*}}"int"78 79# CHECK: 0x[[CU2_CHAR]]: DW_TAG_base_type80# CHECK: DW_AT_name{{.*}}"char"81 82# CHECK: 0x[[CU2_FLOAT]]: DW_TAG_base_type83# CHECK: DW_AT_name{{.*}}"float"84 85# CHECK: 0x[[CU2_PTR_CLASS1:[0-9a-f]*]]: DW_TAG_pointer_type{{.*[[:space:]].*}}DW_AT_type{{.*}}0x00000000[[CU2_CLASS1]] "class1"86 87# CHECK: 0x[[CU2_PTR_CLASS2:[0-9a-f]*]]: DW_TAG_pointer_type{{.*[[:space:]].*}}DW_AT_type{{.*}}0x00000000[[CU2_CLASS2]] "class2<int>"88 89# CHECK: DW_TAG_variable90# CHECK: DW_AT_name{{.*}}"var1"91# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_PTR_CLASS1]] "class1 *"92# CHECK: DW_TAG_variable93# CHECK: DW_AT_name{{.*}}"var2"94# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_PTR_CLASS2]] "class2<int> *"95 96--- !ELF97FileHeader:98 Class: ELFCLASS6499 Data: ELFDATA2LSB100 Type: ET_REL101 Machine: EM_X86_64102Sections:103 - Name: .text104 Type: SHT_PROGBITS105 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]106 Address: 0x1000107 Size: 0x1b108 - Name: .text2109 Type: SHT_PROGBITS110 Flags: [ SHF_ALLOC, SHF_EXECINSTR ]111 Address: 0x2000112 Size: 0x1b113DWARF:114 debug_abbrev:115 - Table:116 - Tag: DW_TAG_compile_unit117 Children: DW_CHILDREN_yes118 Attributes:119 - Attribute: DW_AT_producer120 Form: DW_FORM_string121 - Attribute: DW_AT_language122 Form: DW_FORM_data2123 - Attribute: DW_AT_name124 Form: DW_FORM_string125 - Attribute: DW_AT_low_pc126 Form: DW_FORM_addr127 - Attribute: DW_AT_high_pc128 Form: DW_FORM_data8129 - Tag: DW_TAG_class_type130 Children: DW_CHILDREN_yes131 Attributes:132 - Attribute: DW_AT_name133 Form: DW_FORM_string134 - Tag: DW_TAG_member135 Children: DW_CHILDREN_no136 Attributes:137 - Attribute: DW_AT_type138 Form: DW_FORM_ref_addr139 - Attribute: DW_AT_name140 Form: DW_FORM_string141 - Tag: DW_TAG_class_type142 Children: DW_CHILDREN_no143 Attributes:144 - Attribute: DW_AT_name145 Form: DW_FORM_string146 - Attribute: DW_AT_declaration147 Form: DW_FORM_flag_present148 - Tag: DW_TAG_class_type149 Children: DW_CHILDREN_yes150 Attributes:151 - Attribute: DW_AT_name152 Form: DW_FORM_string153 - Attribute: DW_AT_declaration154 Form: DW_FORM_flag_present155 - Tag: DW_TAG_template_type_parameter156 Children: DW_CHILDREN_no157 Attributes:158 - Attribute: DW_AT_type159 Form: DW_FORM_ref_addr160 - Tag: DW_TAG_base_type161 Children: DW_CHILDREN_no162 Attributes:163 - Attribute: DW_AT_name164 Form: DW_FORM_string165 - Tag: DW_TAG_pointer_type166 Children: DW_CHILDREN_no167 Attributes:168 - Attribute: DW_AT_type169 Form: DW_FORM_ref_addr170 - Tag: DW_TAG_variable171 Children: DW_CHILDREN_no172 Attributes:173 - Attribute: DW_AT_name174 Form: DW_FORM_string175 - Attribute: DW_AT_const_value176 Form: DW_FORM_data4177 - Attribute: DW_AT_type178 Form: DW_FORM_ref_addr179 - Table:180 - Tag: DW_TAG_compile_unit181 Children: DW_CHILDREN_yes182 Attributes:183 - Attribute: DW_AT_producer184 Form: DW_FORM_string185 - Attribute: DW_AT_language186 Form: DW_FORM_data2187 - Attribute: DW_AT_name188 Form: DW_FORM_string189 - Attribute: DW_AT_low_pc190 Form: DW_FORM_addr191 - Attribute: DW_AT_high_pc192 Form: DW_FORM_data8193 - Tag: DW_TAG_class_type194 Children: DW_CHILDREN_yes195 Attributes:196 - Attribute: DW_AT_name197 Form: DW_FORM_string198 - Tag: DW_TAG_member199 Children: DW_CHILDREN_no200 Attributes:201 - Attribute: DW_AT_type202 Form: DW_FORM_ref_addr203 - Attribute: DW_AT_name204 Form: DW_FORM_string205 - Tag: DW_TAG_class_type206 Children: DW_CHILDREN_no207 Attributes:208 - Attribute: DW_AT_name209 Form: DW_FORM_string210 - Attribute: DW_AT_declaration211 Form: DW_FORM_flag_present212 - Tag: DW_TAG_class_type213 Children: DW_CHILDREN_yes214 Attributes:215 - Attribute: DW_AT_name216 Form: DW_FORM_string217 - Attribute: DW_AT_declaration218 Form: DW_FORM_flag_present219 - Tag: DW_TAG_template_type_parameter220 Children: DW_CHILDREN_no221 Attributes:222 - Attribute: DW_AT_type223 Form: DW_FORM_ref_addr224 - Tag: DW_TAG_base_type225 Children: DW_CHILDREN_no226 Attributes:227 - Attribute: DW_AT_name228 Form: DW_FORM_string229 - Tag: DW_TAG_pointer_type230 Children: DW_CHILDREN_no231 Attributes:232 - Attribute: DW_AT_type233 Form: DW_FORM_ref_addr234 - Tag: DW_TAG_variable235 Children: DW_CHILDREN_no236 Attributes:237 - Attribute: DW_AT_name238 Form: DW_FORM_string239 - Attribute: DW_AT_const_value240 Form: DW_FORM_data4241 - Attribute: DW_AT_type242 Form: DW_FORM_ref_addr243 debug_info:244 - Version: 4245 Entries:246 - AbbrCode: 1247 Values:248 - CStr: by_hand249 - Value: 0x04250 - CStr: CU1251 - Value: 0x1000252 - Value: 0x1b253 - AbbrCode: 4254 Values:255 - CStr: class1256 - AbbrCode: 5257 Values:258 - CStr: class2259 - AbbrCode: 6260 Values:261 - Value: 0x00000040262 - AbbrCode: 0263 - AbbrCode: 7264 Values:265 - CStr: int266 - AbbrCode: 8267 Values:268 - Value: 0x0000002a269 - AbbrCode: 8270 Values:271 - Value: 0x00000032272 - AbbrCode: 9273 Values:274 - CStr: var1275 - Value: 0x00000000276 - Value: 0x00000045277 - AbbrCode: 9278 Values:279 - CStr: var2280 - Value: 0x00000000281 - Value: 0x0000004a282 - AbbrCode: 0283 - Version: 4284 Entries:285 - AbbrCode: 1286 Values:287 - CStr: by_hand288 - Value: 0x04289 - CStr: CU2290 - Value: 0x2000291 - Value: 0x1b292 - AbbrCode: 2293 Values:294 - CStr: class1295 - AbbrCode: 3296 Values:297 - Value: 0x000000d9298 - CStr: member1299 - AbbrCode: 3300 Values:301 - Value: 0x000000df302 - CStr: member2303 - AbbrCode: 0304 - AbbrCode: 2305 Values:306 - CStr: class2307 - AbbrCode: 6308 Values:309 - Value: 0x000000d4310 - AbbrCode: 3311 Values:312 - Value: 0x000000d9313 - CStr: member1314 - AbbrCode: 0315 - AbbrCode: 7316 Values:317 - CStr: int318 - AbbrCode: 7319 Values:320 - CStr: char321 - AbbrCode: 7322 Values:323 - CStr: float324 - AbbrCode: 8325 Values:326 - Value: 0x00000096327 - AbbrCode: 8328 Values:329 - Value: 0x000000b9330 - AbbrCode: 9331 Values:332 - CStr: var1333 - Value: 0x00000000334 - Value: 0x000000e6335 - AbbrCode: 9336 Values:337 - CStr: var2338 - Value: 0x00000000339 - Value: 0x000000eb340 - AbbrCode: 0341...342