[Issue 12862] [ICE] backend assertion (Internal error: backend/cg87.c 331) with inline, optimizing and floats

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Jun 16 14:36:34 PDT 2014


https://issues.dlang.org/show_bug.cgi?id=12862

--- Comment #2 from Martin Nowak <code at dawg.eu> ---
Mmh, the codegen assertion vanished with this commit
(https://github.com/D-Programming-Language/dmd/commit/9efe7f74c2462e8743f5a479cd04f9be733be4b0).
I reproduced another test case for the issue.

cat > bug.d << CODE
struct FPoint
{
    float x, y;
}

struct FRect
{
    float left, top, right, bottom;
    static FRect calcBounds(FPoint[] )
    {
        return FRect();
    }
}

struct Matrix
{
    FRect mapRect(FRect src) {
        FPoint[] pts = new FPoint[](1);
        pts[0].x = src.left;
        pts[0].y = src.top;
        return FRect.calcBounds(pts);
    }
}


// TODO: FPoint -> Point!T
struct Path
{
    @property FRect bounds()
    {
        if (points.length)
            return FRect();
        else
            return FRect();
    }

    FPoint[] points;
}

void foo()
{
    Matrix mat;
    Path path;
    mat.mapRect(path.bounds);
}
CODE

The issues first appeared with dmd2.060 and seems to be triggered by assigning
tym = TYucent to 16 byte structs that consist of either 4 floats or 2 doubles
in elstruct
(https://github.com/D-Programming-Language/dmd/blob/5cc1c812227440d199f265dec8fb976bea7ad943/src/backend/cgelem.c#L3077).
I don't understand that code good enough to fix the issue though.

--


More information about the Digitalmars-d-bugs mailing list