diff --git a/gcc/expr.cc b/gcc/expr.cc index e238811110e..8d34d024c9c 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -10259,12 +10259,12 @@ expand_expr_real_2 (sepops ops, rtx target, machine_mode tmode, &algorithm, &variant, cost) : cost < mul_cost (speed, mode)) { - target = bit0_p ? expand_and (mode, negate_rtx (mode, op0), - op1, target) - : expand_and (mode, op0, - negate_rtx (mode, op1), - target); - return REDUCE_BIT_FIELD (target); + temp = bit0_p ? expand_and (mode, negate_rtx (mode, op0), + op1, target) + : expand_and (mode, op0, + negate_rtx (mode, op1), + target); + return REDUCE_BIT_FIELD (temp); } } } diff --git a/gcc/testsuite/gcc.dg/bitint-92.c b/gcc/testsuite/gcc.dg/bitint-92.c new file mode 100644 index 00000000000..c567d63f007 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-92.c @@ -0,0 +1,17 @@ +/* PR rtl-optimization/114054 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-Og -fwhole-program -fno-tree-ccp -fprofile-use -fno-tree-copy-prop -w" } */ + +int x; + +void +foo (int i, unsigned u) +{ + x = __builtin_mul_overflow_p ((unsigned _BitInt(1)) u, i, (_BitInt(33)) 0); +} + +int +main () +{ + foo (11, 0); +}