extern void abort (); | |
void __attribute__((noinline)) | |
bar (unsigned long long i) | |
{ | |
if (i) | |
abort (); | |
} | |
static void __attribute__((always_inline)) | |
foo (unsigned long long *r) | |
{ | |
int i; | |
for (i = 0; ; i++) | |
if (*r & ((unsigned long long)1 << (63 - i))) | |
break; | |
bar (i); | |
} | |
void __attribute__((noinline)) | |
do_test (unsigned long long *r) | |
{ | |
int i; | |
for (i = 0; i < 2; ++i) | |
foo (r); | |
} | |
int main() | |
{ | |
unsigned long long r = 0x8000000000000001ull; | |
do_test (&r); | |
return 0; | |
} |