diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2023-07-25 12:25:30 -0400 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2023-07-26 10:37:24 +0200 |
commit | 7a48d8d28cc683974057ce9fdfd3fb224ff76641 (patch) | |
tree | 160bd176585f92afb77c166bbe632cc38438a1bb /gcc | |
parent | ad0dde0af107aaf6a91e37f3aa31249e34df6ce0 (diff) | |
download | gcc-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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/tree-ssa-ccp.cc | 6 |
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; } } |