[Issue 6337] New: ICE when touching member variable of struct during CTFE

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Jul 16 20:42:42 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=6337

           Summary: ICE when touching member variable of struct during
                    CTFE
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: johann.macdonagh at gmail.com


--- Comment #0 from Johann MacDonagh <johann.macdonagh at gmail.com> 2011-07-16 20:37:26 PDT ---
This one is weird. I narrowed it down to this test case, although I admit this
is still pretty long.

struct Test
{
    string s;

    this(string s)
    {
        this.s = s;
    }

    string ctfe()
    {
        dchar c = s[0];

        if (test1(c))
        {
            for (c = next(c); test2(c); c = next(c))
            {
            }
        }

        return "ctfe";
    }

    dchar next(dchar curPeek)
    {
        if (curPeek != dchar.init)
        {
            s = s[1..$];

            return s.length > 0 ? s[0] : dchar.init;
        }

        return dchar.init;
    }
}

bool test1(dchar c)
{
    return (c >= 'a' && c <= 'z' ||
            c >= 'A' && c <= 'Z' ||
            c == '_');
}

bool test2(dchar c)
{
    return (test1(c) ||
            c >= '0' && c <= '9' );
}

void main(string[] args)
{
    // If this is auto then this executes just fine at runtime
    enum x = Test("abc").ctfe();
}

This will ICE with an out of memory error. I believe it's going into an
infinite loop.

If you replace the body of test2 with "return false", then CTFE runs just fine.

This only happens on 2.054. On 2.053 (when you make appropriate modifications
to the test case) it crashes DMD.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list