[Issue 4578] New: Regression: ICE: Internal error: ../ztc/cg87.c 1364: var+arr[]

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Aug 3 15:52:47 PDT 2010


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

           Summary: Regression: ICE: Internal error: ../ztc/cg87.c 1364:
                    var+arr[]
           Product: D
           Version: D1
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: baseball.mjp at gmail.com


--- Comment #0 from Michael P <baseball.mjp at gmail.com> 2010-08-03 15:52:45 PDT ---
Code to create ICE:

void main()
{
    int[] foo;
    int y = 2;
    int[] c = y + foo[];
}

$ dmd test.d
Internal error: ../ztc/cgcod.c 1596

The same error occurs if using the operators +, -, or %.

The proper error is given with operators * and /. (Proper error I think is what
is being given in 1.061)

In 1.061, I would receive this error:

test.d(5): Error: Array operation y + foo[] not implemented

This seems to be because functions AddExp::toElem, MinExp::toElem and
ModExp::toElem in e2ir.c do not have the code that checks for a non-valid
array. The code from these was taken out in 1.062.

The code seemed to be added for MulExp and DivExp because of this issue:

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

but was later taken out of AddExp and MinExp.

Perhaps this code in BinExp::toElem:

if ((tb1->ty == Tarray || tb1->ty == Tsarray) &&

    (tb2->ty == Tarray || tb2->ty == Tsarray) &&

     op != OPeq

     )

Should be:

if ((tb1->ty == Tarray || tb1->ty == Tsarray) ||
    (tb2->ty == Tarray || tb2->ty == Tsarray) &&

     op != OPeq

     )

That might catch array ops errors for all of the xxxExp types.

-- 
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