WLPG introduces default partition in phase 10 even when full generators are present
|
|
Bugzilla Link |
680 |
Created on |
Feb 15, 2010 20:36 |
Version |
svn |
OS |
Linux |
Architecture |
PC |
Attachments |
bug676.sac |
Extended Description
Created an attachment (id=673)
source code to reproduce fault
And here's why, taken from the IL generated for Array::iota( int[.] shp):
sac2c -v0 -nowlf -doawlf -extrema -ecc bug676.sac -b10:cse >crud
_flat_10 = 0;
_flat_9 = _mul_SxV_( _flat_10, shp);
res = with {
(_flat_9 <= iv < shp)
{
/* empty */
} : iv ; ,
default partition( iv ):
{
/* empty */
} : _flat_9 ;
} :
genarray( shp, _flat_9);
shp is an int[.] until it gets inlined, so CF can't resolve the shape
of _flat_9. Extrema won't help here, for the same reason. By the
time that inlining has happened, the damage has been done by WLPG.
Array::iota(int shp) has a different problem: if compiled with -ecc,
TULSisFullGenerator fails to see the [0] lower bound, because it does not
look past the guards created by -ecc.