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