Summary: Regression: ICE: Internal error: ../ztc/cg87.c 1364:
           Product: D
           Version: D1
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: regression
          Priority: P2
         Component: DMD

--- Comment #0 from Michael P <> 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:

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:
------- You are receiving this mail because: -------

Reply via email to