Debug info failing in assembler.

Hi,

I just updated from r190763 to r191137 and started getting failures in generated assembly language when debug info is enabled. Here is the test case:

// Compile and run for every target.
// RUN: %ecc -g -o %t %s && %t
// FAIL: %armecc -g -o %t %s && %armrun %t
// FAIL: %armebecc -g -o %t %s && %armebrun %t
// RUN: %i386ecc -g -o %t %s && %i386run %t
// FAIL: %microblazeecc -g -o %t %s && %microblazerun %t
// FAIL: %mipsecc -g -o %t %s && %mipsrun %t
// FAIL: %mipselecc -g -o %t %s && %mipselrun %t
// FAIL: %ppcecc -g -o %t %s && %ppcrun %t
// FAIL: %ppc64ecc -g -o %t %s && %ppc64run %t
// RUN: %x86_64ecc -g -o %t %s && %x86_64run %t

int comm;
int main()
{
     comm = 6;
}

This fails on all but the x86 processors. The typical failure looks like this:
...
         .type comm,@object # @comm
         .comm comm,4,4
         .cfi_sections .debug_frame
         .bss
.L.bss_end:
...
.L.debug_abbrev_end:
         .section .debug_aranges,"",@progbits
         .long 36 # Length of ARange Set
         .short 2 # DWARF Arange version number
         .long .L.debug_info_begin0 # Offset Into Debug Info Section
         .byte 4 # Address Size (in bytes)
         .byte 0 # Segment Size (in bytes)
         .byte 255
         .long comm
.Lset0 = .L.bss_end-comm
         .long .Lset0

The typical error message is:
/tmp/debug-8ecf9d.s: Assembler messages:
/tmp/debug-8ecf9d.s: Error: invalid operands (.bss and *COM* sections) for `-' when setting `.Lset0'

Is it legal to mix .comm symbols and .bss symbols in assembly? Is the x86 success a bug or a feature?

-Rich

Interesting. File please? Thanks.

If it thinks the symbol is in the BSS section, then it should never have tried to use .comm to emit it I think.

On x86 it does not try to mix and match, which is why it works. AFAIK comm symbols are regarded as having no section, rather than being bss, so I think it’s a bug in whatever code printed that .comm statement.

I’ll look into this tomorrow.

compose-unknown-contact.jpg

I filed PR 17321 for this.
The problem code is in llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp around line 2844. Apparently Span.End is set for the .comm symbol in this case.

-Rich

compose-unknown-contact.jpg