/* PR middle-end/112807 */ /* { dg-do compile { target bitint } } */ /* { dg-options "-std=gnu23 -O2" } */ #if __BITINT_MAXWIDTH__ >= 256 __attribute__((noipa)) int foo (_BitInt (256) a, _BitInt (2) b) { if (a < 0 || a > ~0U) return -1; return __builtin_sub_overflow_p (a, b, 0); } #endif int main () { #if __BITINT_MAXWIDTH__ >= 256 if (foo (-5wb, 1wb) != -1 || foo (1 + (_BitInt (256)) ~0U, -2) != -1 || foo (0, 0) != 0 || foo (0, 1) != 0 || foo (0, -1) != 0 || foo (~0U, 0) != 1 || foo (__INT_MAX__, 0) != 0 || foo (__INT_MAX__, -1) != 1 || foo (1 + (_BitInt (256)) __INT_MAX__, 0) != 1 || foo (1 + (_BitInt (256)) __INT_MAX__, 1) != 0 || foo (1 + (_BitInt (256)) __INT_MAX__, -2) != 1) __builtin_abort (); #endif }