/* PR fortran/55633 */ | |
/* { dg-do run { target int128 } } */ | |
extern void abort (void); | |
__attribute__((noinline, noclone)) void | |
bar (__int128_t *x) | |
{ | |
int c = sizeof (__int128_t) * __CHAR_BIT__; | |
if (c > 127) | |
c = 127; | |
if (*x != c) | |
abort (); | |
} | |
__attribute__((noinline)) void | |
foo (void) | |
{ | |
__int128_t m, ma; | |
ma = 0; | |
m = 0; | |
m = ~m; | |
do | |
{ | |
if (m == 0 || ma > 126) | |
break; | |
ma = ma + 1; | |
m = ((__uint128_t) m) >> 1; | |
} | |
while (1); | |
bar (&ma); | |
} | |
int | |
main () | |
{ | |
foo (); | |
return 0; | |
} |