Hi all,
We have ported gcc-3.3 (cross compiler) for our custom processor.
To verify the port we have executed gcc.c-torture cases at different
optimization levels.But following testcase was failed at -Os optimization.
gcc-3.3/gcc/testsuite/gcc.c-torture/execute/921117-1.c
To pass a structure variable "cell" to check(), our cross compiler
generating following type of dumb code:
(for simple representation I have written it in pseudo code)
count = 1;
ptr =(char *) &cell
var = (char) *ptr;
label:
compare 'count' with 0x10 /* infinite loop */
bltu label;
*(stack) = var;
Instead of
count = 1;
ptr = (char *)&cell;
label:
count++;
var = (char) *ptr;
*(stack) = var;
stack++;
ptr++;
compare 'count' with 0x10
bltu label;
I am unable to find what may be the actual reason, It was happened only
at -Os optimization level.
Can you please help me in this regard.
Thanks,
Siva Prasad
For reference, I am sending the failed testcase: 921117-1.c
struct s {
int flag;
char text[10];
} cell;
int
check (struct s p)
{
if (p.flag != 99)
p.flag++;
return 0;
return strcmp (p.text, "0123456789");
}
main ()
{
int k;
check(cell);
if(k)
abort();
exit (0);
}