[LLVMbugs] [Bug 10106] New: LTO crash possibly related to zero-length arrays

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Jun 8 22:02:12 PDT 2011


http://llvm.org/bugs/show_bug.cgi?id=10106

           Summary: LTO crash possibly related to zero-length arrays
           Product: libraries
           Version: trunk
          Platform: PC
        OS/Version: Windows NT
            Status: NEW
          Severity: normal
          Priority: P
         Component: Common Code Generator Code
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: xocotl at gmail.com
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=6714)
 --> (http://llvm.org/bugs/attachment.cgi?id=6714)
reduced simplified with bugpoint A.bc

In my code, I've got something like

value = buffer[(writeIndex - 1) & (buflen - 1)];

which if I change to the incorrect

value = buffer[(writeIndex - 1) & buflen];

no longer crashes the code generator. buflen is a constant 32 which gets fed
in, so there's something clever it must be trying to do. In any case, I've
attached the simplified .bc file from running Bugpoint on it. Hopefully that is
of some use.

The structs involved here look like

#define CDC_BUFLEN (32)

struct PSB_Ring_Type
{
    uintptr_t ReadIndex, WriteIndex;
    uint8_t   Buffer[0];
} PACKED_ALIGN(4);

struct PSB_CDC_Side_Type
{
    struct PSB_Ring_Type Ring;
    uint8_t              Buffer[CDC_BUFLEN];
    uint32_t             BaudRate;
} PACKED_ALIGN(4);

struct PSB_CDC_Type
{
    struct PSB_CDC_Side_Type FromMe, ToMe;
} PACKED_ALIGN(4);

I'm thinking it might have something to do with calculating the address of
PSB_Ring_Type's Buffer, or parts of the structure after it. In any case, this
crashes the assembler when LTO is used.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list