[Bug tree-optimization/36187] [4.3 Regression] Partitioning problem with SFTs (again)
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Fri May 9 14:10:00 GMT 2008
------- Comment #4 from rguenth at gcc dot gnu dot org 2008-05-09 14:09 -------
The following aborts with -O2 --param max-aliased-vops=N with N in [19, 25]
on x86_64-unknown-linux-gnu. Symptom is still lim being wrongly applied.
If you cannot reproduce it search for the correct N with
for n in `seq 0 5 100`; do g++-4.3 -O2 -S testfoo.cxx -fdump-tree-lim
-B/abuild/rguenther/gcc43-g/gcc --param max-aliased-vops=$n; grep lsm
testfoo.cxx.095t.lim > /dev/null 2>&1 && echo $n; done
extern "C" void abort (void);
enum SbxDataType { SbxINTEGER, SbxDECIMAL, SbxBYREF = 0x4000 };
struct SbxValues {
union {
float nSingle;
float* pSingle;
};
SbxDataType eType;
};
static bool ImpPutDoubleFoo( SbxValues* p)
{
bool bRet = false;
SbxValues aTmp;
int count = 0;
start:
switch( p->eType ) {
case SbxINTEGER:
if (count++ > 0)
abort ();
aTmp.pSingle = &p->nSingle; goto direct;
case SbxBYREF | SbxDECIMAL:
bRet = false;
break;
direct:
aTmp.eType = SbxDataType( p->eType | SbxBYREF );
p = &aTmp; goto start;
case SbxBYREF | SbxINTEGER:
break;
default:
bRet =true;
}
return bRet;
}
int main( int argc, char** argv )
{
SbxValues aTmp;
aTmp.eType = SbxINTEGER;
if ( ImpPutDoubleFoo( &aTmp ) )
abort ();
return 0;
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36187
More information about the Gcc-bugs
mailing list