From: Aldy Hernandez Date: Tue, 25 Jul 2023 16:25:30 +0000 (-0400) Subject: Initialize value in bit_value_unop. X-Git-Tag: basepoints/gcc-15~7363 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7a48d8d28cc683974057ce9fdfd3fb224ff76641;p=thirdparty%2Fgcc.git Initialize value in bit_value_unop. bit_value_binop initializes VAL regardless of the final mask. It even has a comment to that effect: /* Ensure that VAL is initialized (to any value). */ However, bit_value_unop, which in theory shares the same API, does not. This causes range-ops to choke on uninitialized VALs for some inputs to ABS. Instead of fixing the callers, it's cleaner to make bit_value_unop and bit_value_binop consistent. gcc/ChangeLog: * tree-ssa-ccp.cc (bit_value_unop): Initialize val when appropriate. --- diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc index 73fb7c11c643..15e65f160084 100644 --- a/gcc/tree-ssa-ccp.cc +++ b/gcc/tree-ssa-ccp.cc @@ -1359,7 +1359,10 @@ bit_value_unop (enum tree_code code, signop type_sgn, int type_precision, case ABS_EXPR: case ABSU_EXPR: if (wi::sext (rmask, rtype_precision) == -1) - *mask = -1; + { + *mask = -1; + *val = 0; + } else if (wi::neg_p (rmask)) { /* Result is either rval or -rval. */ @@ -1385,6 +1388,7 @@ bit_value_unop (enum tree_code code, signop type_sgn, int type_precision, default: *mask = -1; + *val = 0; break; } }