www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18794] New: Compiling with -O causes runtime segfault


          Issue ID: 18794
           Summary: Compiling with -O causes runtime segfault
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: hsteoh quickfur.ath.cx

Reduced code:

void func() {}

struct S
    size_t[] impl;
    this(int v)
        impl = [0];
    bool method(int v)
        int wordIdx = v >> 6;
        int bitIdx = v & 0b00111111;


        if (wordIdx >= impl.length)
            return false;

        return (impl[0] & (1UL << bitIdx)) != 0;

void main()
    auto s = S(0);

Compile command: dmd -O -run test.d


Error: program killed by signal 11

Compiling without -O fixes the problem.  Commenting out the call to func() also
makes the problem go away.  Also, the details of method() seem quite important;
changing the return statement in various ways seems to make the problem go
away, though I'm not 100% certain the current form is minimal.  Eliding the
ctor call also makes the problem go away, though I didn't explore all possible

In the original call, wordIdx is used to index the impl array, but the problem
seems to persist even when impl[0] is hardcoded.  However, removing the test
`wordIdx >= impl.length` seems to mask the problem. So there's something about
it that's triggering the wrong code.

Apr 24 2018