1## This test checks debug info for the case when one compilation unit 2## contains a forward declaration of a type and another compilation unit 3## contains a definition for that type. The result should contain 4## the original definition and the declaration without modifications. 5 6# RUN: yaml2obj %s -o %t.o 7# RUN: llvm-dwarfutil %t.o - | llvm-dwarfdump -a - | FileCheck %s 8 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-64 32# CHECK: .debug_info contents: 33 34# CHECK: DW_TAG_compile_unit 35# 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_type 45# 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_variable 52# CHECK: DW_AT_name{{.*}}"var1" 53# CHECK: DW_AT_type{{.*}}0x00000000[[CU1_PTR_CLASS1]] "class1 *" 54# CHECK: DW_TAG_variable 55# CHECK: DW_AT_name{{.*}}"var2" 56# CHECK: DW_AT_type{{.*}}0x00000000[[CU1_PTR_CLASS2]] "class2<int> *" 57 58# CHECK: DW_TAG_compile_unit 59# 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_member 63# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_CHAR:[0-9a-f]*]] "char" 64# CHECK: DW_AT_name{{.*}}"member1" 65 66# CHECK: DW_TAG_member 67# 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_member 73# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_CHAR]] "char" 74# CHECK: DW_AT_name{{.*}}"member1" 75 76# CHECK: 0x[[CU2_INT]]: DW_TAG_base_type 77# CHECK: DW_AT_name{{.*}}"int" 78 79# CHECK: 0x[[CU2_CHAR]]: DW_TAG_base_type 80# CHECK: DW_AT_name{{.*}}"char" 81 82# CHECK: 0x[[CU2_FLOAT]]: DW_TAG_base_type 83# 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_variable 90# CHECK: DW_AT_name{{.*}}"var1" 91# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_PTR_CLASS1]] "class1 *" 92# CHECK: DW_TAG_variable 93# CHECK: DW_AT_name{{.*}}"var2" 94# CHECK: DW_AT_type{{.*}}0x00000000[[CU2_PTR_CLASS2]] "class2<int> *" 95 96--- !ELF 97FileHeader: 98 Class: ELFCLASS64 99 Data: ELFDATA2LSB 100 Type: ET_REL 101 Machine: EM_X86_64 102Sections: 103 - Name: .text 104 Type: SHT_PROGBITS 105 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 106 Address: 0x1000 107 Size: 0x1b 108 - Name: .text2 109 Type: SHT_PROGBITS 110 Flags: [ SHF_ALLOC, SHF_EXECINSTR ] 111 Address: 0x2000 112 Size: 0x1b 113DWARF: 114 debug_abbrev: 115 - Table: 116 - Tag: DW_TAG_compile_unit 117 Children: DW_CHILDREN_yes 118 Attributes: 119 - Attribute: DW_AT_producer 120 Form: DW_FORM_string 121 - Attribute: DW_AT_language 122 Form: DW_FORM_data2 123 - Attribute: DW_AT_name 124 Form: DW_FORM_string 125 - Attribute: DW_AT_low_pc 126 Form: DW_FORM_addr 127 - Attribute: DW_AT_high_pc 128 Form: DW_FORM_data8 129 - Tag: DW_TAG_class_type 130 Children: DW_CHILDREN_yes 131 Attributes: 132 - Attribute: DW_AT_name 133 Form: DW_FORM_string 134 - Tag: DW_TAG_member 135 Children: DW_CHILDREN_no 136 Attributes: 137 - Attribute: DW_AT_type 138 Form: DW_FORM_ref_addr 139 - Attribute: DW_AT_name 140 Form: DW_FORM_string 141 - Tag: DW_TAG_class_type 142 Children: DW_CHILDREN_no 143 Attributes: 144 - Attribute: DW_AT_name 145 Form: DW_FORM_string 146 - Attribute: DW_AT_declaration 147 Form: DW_FORM_flag_present 148 - Tag: DW_TAG_class_type 149 Children: DW_CHILDREN_yes 150 Attributes: 151 - Attribute: DW_AT_name 152 Form: DW_FORM_string 153 - Attribute: DW_AT_declaration 154 Form: DW_FORM_flag_present 155 - Tag: DW_TAG_template_type_parameter 156 Children: DW_CHILDREN_no 157 Attributes: 158 - Attribute: DW_AT_type 159 Form: DW_FORM_ref_addr 160 - Tag: DW_TAG_base_type 161 Children: DW_CHILDREN_no 162 Attributes: 163 - Attribute: DW_AT_name 164 Form: DW_FORM_string 165 - Tag: DW_TAG_pointer_type 166 Children: DW_CHILDREN_no 167 Attributes: 168 - Attribute: DW_AT_type 169 Form: DW_FORM_ref_addr 170 - Tag: DW_TAG_variable 171 Children: DW_CHILDREN_no 172 Attributes: 173 - Attribute: DW_AT_name 174 Form: DW_FORM_string 175 - Attribute: DW_AT_const_value 176 Form: DW_FORM_data4 177 - Attribute: DW_AT_type 178 Form: DW_FORM_ref_addr 179 - Table: 180 - Tag: DW_TAG_compile_unit 181 Children: DW_CHILDREN_yes 182 Attributes: 183 - Attribute: DW_AT_producer 184 Form: DW_FORM_string 185 - Attribute: DW_AT_language 186 Form: DW_FORM_data2 187 - Attribute: DW_AT_name 188 Form: DW_FORM_string 189 - Attribute: DW_AT_low_pc 190 Form: DW_FORM_addr 191 - Attribute: DW_AT_high_pc 192 Form: DW_FORM_data8 193 - Tag: DW_TAG_class_type 194 Children: DW_CHILDREN_yes 195 Attributes: 196 - Attribute: DW_AT_name 197 Form: DW_FORM_string 198 - Tag: DW_TAG_member 199 Children: DW_CHILDREN_no 200 Attributes: 201 - Attribute: DW_AT_type 202 Form: DW_FORM_ref_addr 203 - Attribute: DW_AT_name 204 Form: DW_FORM_string 205 - Tag: DW_TAG_class_type 206 Children: DW_CHILDREN_no 207 Attributes: 208 - Attribute: DW_AT_name 209 Form: DW_FORM_string 210 - Attribute: DW_AT_declaration 211 Form: DW_FORM_flag_present 212 - Tag: DW_TAG_class_type 213 Children: DW_CHILDREN_yes 214 Attributes: 215 - Attribute: DW_AT_name 216 Form: DW_FORM_string 217 - Attribute: DW_AT_declaration 218 Form: DW_FORM_flag_present 219 - Tag: DW_TAG_template_type_parameter 220 Children: DW_CHILDREN_no 221 Attributes: 222 - Attribute: DW_AT_type 223 Form: DW_FORM_ref_addr 224 - Tag: DW_TAG_base_type 225 Children: DW_CHILDREN_no 226 Attributes: 227 - Attribute: DW_AT_name 228 Form: DW_FORM_string 229 - Tag: DW_TAG_pointer_type 230 Children: DW_CHILDREN_no 231 Attributes: 232 - Attribute: DW_AT_type 233 Form: DW_FORM_ref_addr 234 - Tag: DW_TAG_variable 235 Children: DW_CHILDREN_no 236 Attributes: 237 - Attribute: DW_AT_name 238 Form: DW_FORM_string 239 - Attribute: DW_AT_const_value 240 Form: DW_FORM_data4 241 - Attribute: DW_AT_type 242 Form: DW_FORM_ref_addr 243 debug_info: 244 - Version: 4 245 Entries: 246 - AbbrCode: 1 247 Values: 248 - CStr: by_hand 249 - Value: 0x04 250 - CStr: CU1 251 - Value: 0x1000 252 - Value: 0x1b 253 - AbbrCode: 4 254 Values: 255 - CStr: class1 256 - AbbrCode: 5 257 Values: 258 - CStr: class2 259 - AbbrCode: 6 260 Values: 261 - Value: 0x00000040 262 - AbbrCode: 0 263 - AbbrCode: 7 264 Values: 265 - CStr: int 266 - AbbrCode: 8 267 Values: 268 - Value: 0x0000002a 269 - AbbrCode: 8 270 Values: 271 - Value: 0x00000032 272 - AbbrCode: 9 273 Values: 274 - CStr: var1 275 - Value: 0x00000000 276 - Value: 0x00000045 277 - AbbrCode: 9 278 Values: 279 - CStr: var2 280 - Value: 0x00000000 281 - Value: 0x0000004a 282 - AbbrCode: 0 283 - Version: 4 284 Entries: 285 - AbbrCode: 1 286 Values: 287 - CStr: by_hand 288 - Value: 0x04 289 - CStr: CU2 290 - Value: 0x2000 291 - Value: 0x1b 292 - AbbrCode: 2 293 Values: 294 - CStr: class1 295 - AbbrCode: 3 296 Values: 297 - Value: 0x000000d9 298 - CStr: member1 299 - AbbrCode: 3 300 Values: 301 - Value: 0x000000df 302 - CStr: member2 303 - AbbrCode: 0 304 - AbbrCode: 2 305 Values: 306 - CStr: class2 307 - AbbrCode: 6 308 Values: 309 - Value: 0x000000d4 310 - AbbrCode: 3 311 Values: 312 - Value: 0x000000d9 313 - CStr: member1 314 - AbbrCode: 0 315 - AbbrCode: 7 316 Values: 317 - CStr: int 318 - AbbrCode: 7 319 Values: 320 - CStr: char 321 - AbbrCode: 7 322 Values: 323 - CStr: float 324 - AbbrCode: 8 325 Values: 326 - Value: 0x00000096 327 - AbbrCode: 8 328 Values: 329 - Value: 0x000000b9 330 - AbbrCode: 9 331 Values: 332 - CStr: var1 333 - Value: 0x00000000 334 - Value: 0x000000e6 335 - AbbrCode: 9 336 Values: 337 - CStr: var2 338 - Value: 0x00000000 339 - Value: 0x000000eb 340 - AbbrCode: 0 341... 342