aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2023-07-25 12:25:30 -0400
committerAldy Hernandez <aldyh@redhat.com>2023-07-26 10:37:24 +0200
commit7a48d8d28cc683974057ce9fdfd3fb224ff76641 (patch)
tree160bd176585f92afb77c166bbe632cc38438a1bb
parentad0dde0af107aaf6a91e37f3aa31249e34df6ce0 (diff)
downloadgcc-7a48d8d28cc683974057ce9fdfd3fb224ff76641.zip
gcc-7a48d8d28cc683974057ce9fdfd3fb224ff76641.tar.gz
gcc-7a48d8d28cc683974057ce9fdfd3fb224ff76641.tar.bz2
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.
-rw-r--r--gcc/tree-ssa-ccp.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
index 73fb7c1..15e65f1 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;
}
}