llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
27.9k stars 11.51k forks source link

Linker/subprogram-linkonce-weak.ll FAILs #46475

Open rorth opened 4 years ago

rorth commented 4 years ago
Bugzilla Link 47131
Version trunk
OS All
CC @dwblaikie

Extended Description

The Linker/subprogram-linkonce-weak.ll test FAILs on Sparc, both sparcv9-sun-solaris2.11 and sparc64-unknown-linux-gnu. So this seems like a generic Sparc issue rather than being related to Solaris.

Command Output (stderr):

warning: failed to compute relocation: R_SPARC_DISP32, Invalid data was encountered while parsing the file warning: failed to compute relocation: R_SPARC_DISP32, Invalid data was encountered while parsing the file /vol/llvm/src/llvm-project/local/llvm/test/Linker/subprogram-linkonce-weak.ll:97:13: error: DWLW-NOT: excluded string found in input ; DWLW-NOT: DW_AT_low_pc ^

:39:2: note: found here DW_AT_low_pc (0x0000000000000000) ^~~~~~~~~~~~ /vol/llvm/src/llvm-project/local/llvm/test/Linker/subprogram-linkonce-weak.ll:151:9: error: DWLW: expected string not found in input ; DWLW: 2 0 1 0 0 is_stmt prologue_end ^ :132:2: note: scanning from here dir_index: 0 ^ :139:21: note: possible intended match here 0x0000000000000008 13 0 1 0 0 is_stmt prologue_end ^ Input file: Check file: /vol/llvm/src/llvm-project/local/llvm/test/Linker/subprogram-linkonce-weak.ll -dump-input=help explains the following input dump. Input was: <<<<<< . . . 34: DW_AT_GNU_pubnames (true) 35: DW_AT_low_pc (0x0000000000000000) 36: DW_AT_high_pc (0x0000000000000010) 37: 38: 0x0000002a: DW_TAG_subprogram 39: DW_AT_low_pc (0x0000000000000000) not:97 !~~~~~~~~~~~ error: no match expected 40: DW_AT_high_pc (0x0000000000000010) 41: DW_AT_frame_base (DW_OP_reg30 I6) 42: DW_AT_name ("bar") 43: DW_AT_decl_file ("/path/to/dir/bar.c") 44: DW_AT_decl_line (11) . . . 127: standard_opcode_lengths[DW_LNS_set_prologue_end] = 0 128: standard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0 129: standard_opcode_lengths[DW_LNS_set_isa] = 1 130: file_names[ 1]: 131: name: "bar.c" 132: dir_index: 0 check:151'0 X~~~~~~~~~~~ error: no match found 133: mod_time: 0x00000000 check:151'0 ~~~~~~~~~~~~~~~~~~~~~ 134: length: 0x00000000 check:151'0 ~~~~~~~~~~~~~~~~~~~ 135: check:151'0 ~ 136: Address Line Column File ISA Discriminator Flags check:151'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 137: ------------------ ------ ------ ------ --- ------------- ------------- check:151'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 138: 0x0000000000000000 0 0 1 0 0 is_stmt check:151'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 139: 0x0000000000000008 13 0 1 0 0 is_stmt prologue_end check:151'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ check:151'1 ? possible intended match 140: 0x0000000000000038 13 0 1 0 0 is_stmt end_sequence check:151'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 141: check:151'0 ~ 142: debug_line[0x0000003c] check:151'0 ~~~~~~~~~~~~~~~~~~~~~~ 143: Line table prologue: check:151'0 ~~~~~~~~~~~~~~~~~~~~ 144: total_length: 0x0000003a check:151'0 ~~~~~~~~~~~~~~~~~~~~~~~~~ . . . >>>>>> * On amd64-pc-solaris2.11, the DW_TAG_compile_unit entry for bar.c is followed by 0x0000002a: DW_TAG_subprogram DW_AT_name ("foo") DW_AT_decl_file ("/path/to/dir/bar.c") DW_AT_decl_line (1) DW_AT_external (true) DW_AT_inline (DW_INL_inlined) and only then by the DW_TAG_subprogram entry for bar. * On sparcv9-sun-solaris2.11 however, after the DW_TAG_compile_unit entry for bar.c follows imediately the DW_TAG_subprogram entry for bar. This might be related to Bug 47129.
dwblaikie commented 4 years ago

Think this is a dup of 47129. Same situation - bundling of an add+ret instruction causes the inlined scope not to be emitted.