/* PR tree-optimization/63302 */ #ifdef __SIZEOF_INT128__ #if __SIZEOF_INT128__ * __CHAR_BIT__ == 128 #define USE_INT128 #endif #endif #if __SIZEOF_LONG_LONG__ * __CHAR_BIT__ == 64 #define USE_LLONG #endif #ifdef USE_INT128 __attribute__((noinline, noclone)) int foo (__int128 x) { __int128 v = x & (((__int128) -1 << 63) | 0x7ff); return v == 0 || v == ((__int128) -1 << 63); } #endif #ifdef USE_LLONG __attribute__((noinline, noclone)) int bar (long long x) { long long v = x & (((long long) -1 << 31) | 0x7ff); return v == 0 || v == ((long long) -1 << 31); } #endif int main () { #ifdef USE_INT128 if (foo (0) != 1 || foo (1) != 0 || foo (0x800) != 1 || foo (0x801) != 0 || foo ((__int128) 1 << 63) != 0 || foo ((__int128) -1 << 63) != 1 || foo (((__int128) -1 << 63) | 1) != 0 || foo (((__int128) -1 << 63) | 0x800) != 1 || foo (((__int128) -1 << 63) | 0x801) != 0) __builtin_abort (); #endif #ifdef USE_LLONG if (bar (0) != 1 || bar (1) != 0 || bar (0x800) != 1 || bar (0x801) != 0 || bar (1LL << 31) != 0 || bar (-1LL << 31) != 1 || bar ((-1LL << 31) | 1) != 0 || bar ((-1LL << 31) | 0x800) != 1 || bar ((-1LL << 31) | 0x801) != 0) __builtin_abort (); #endif return 0; }