/* This test was miscompiled when using sibling call optimization, | |
because X ? Y : Y - 1 optimization changed X into !X in place | |
and haven't reverted it if do_store_flag was successful, so | |
when expanding the expression the second time it was | |
!X ? Y : Y - 1. */ | |
extern void abort (void); | |
extern void exit (int); | |
void foo (int x) | |
{ | |
if (x != 1) | |
abort (); | |
} | |
int z; | |
int main (int argc, char **argv) | |
{ | |
char *a = "test"; | |
char *b = a + 2; | |
foo (z > 0 ? b - a : b - a - 1); | |
exit (0); | |
} |