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: nob...@puremagic.com
        ReportedBy: baseball....@gmail.com


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

Reply via email to