Hello,
Last year's x86 sibcall improvements added a currently xfailed test:
/* { dg-do compile { target ia32 } } */
/* { dg-options "-O2" } */
extern int doo1 (int);
extern int doo2 (int);
extern void bar (char *);
int foo (int a)
{
char s[256];
bar (s);
return (a < 0 ? doo1 : doo2) (a);
}
/* { dg-final { scan-assembler-not "call\[ \t\]*.%eax" { xfail *-*-* } } } */
It was xfailed by https://gcc.gnu.org/ml/gcc-patches/2014-06/msg00016.html
Can you tell me what the test is supposed to test? A tail call is impossible
here, because 'bar' might save the address of 's' in a global variable, and
therefore 's' must be live when 'doo1' or 'doo2' are invoked.
Should we remove or unbreak this test?
Thanks.
Alexander