/* 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; }