--- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -5339,7 +5339,10 @@ extract_muldiv_1 (tree t, tree c, enum t } break; } - /* FALLTHROUGH */ + /* If the constant is negative, we cannot simplify this. */ + if (tree_int_cst_sgn (c) == -1) + break; + /* FALLTHROUGH */ case NEGATE_EXPR: if ((t1 = extract_muldiv (op0, c, code, wide_type)) != 0) return fold_build1 (tcode, ctype, fold_convert (ctype, t1));