------- Comment #8 from szir at sch dot bme dot hu 2009-03-31 12:05 -------
(In reply to comment #7)
> For convenience, here is the testcase reduced (I didn't verify it still
> "fails", but it obviously should).
No it should not, the junk code is necessary to produce the error. As I said
before if I remove any more lines from the code, it won't produce the bug.
I suspect it's because it's massive register usage.
> Can you check if that causes a runtime failure? It indeed looks like a
> target issue related to loading constants.
I tried your testcase, it uses r24 as a temp reg. (won't corrupt the value)
I inserted the junk code into your testcase, and the bug rearreared, but only
if it is inserted before InitTF.
#include "junk.i.c" ///BUG
unsigned long key32[8];
//#include "junk.i.c" ///BUG
void __attribute__((noinline)) InitTF(void)
{
key32[0]=0x00010203;
key32[1]=0x04050607;
key32[2]=0x08091011;
key32[3]=0x12131415;
key32[4]=0x00010203;
key32[5]=0x04050607;
key32[6]=0x08091011;
key32[7]=0x12131415;
}
//#include "junk.i.c" ///r24
void abort (void);
int main()
{
InitTF();
if (key32[1] != 0x04050607 || key32[5] != 0x04050607)
abort ();
return 0;
}
//#include "junk.i.c" ///r24
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39593