aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-06-23 10:12:24 +0200
committerRichard Biener <rguenther@suse.de>2023-06-23 11:23:57 +0200
commit4f2fcf21d4c939831c299cb884cbeaca1d33fa8e (patch)
tree53496be0e8b861bdd5ab1e3f7b20810274c80f68
parent4127e0f3313c961b4b4e5efad85a25c40c2510c2 (diff)
downloadgcc-4f2fcf21d4c939831c299cb884cbeaca1d33fa8e.zip
gcc-4f2fcf21d4c939831c299cb884cbeaca1d33fa8e.tar.gz
gcc-4f2fcf21d4c939831c299cb884cbeaca1d33fa8e.tar.bz2
Fix tree_simple_nonnegative_warnv_p for VECTOR_TYPEs
tree_simple_nonnegative_warnv_p ends up being called on VECTOR_TYPEs which I think even gets the wrong answer here for tcc_comparison since vector bools are signed. The following properly guards that with !VECTOR_TYPE_P. * fold-const.cc (tree_simple_nonnegative_warnv_p): Guard the truth_value_p case with !VECTOR_TYPE_P.
-rw-r--r--gcc/fold-const.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc
index b05b3ae..ac90a59 100644
--- a/gcc/fold-const.cc
+++ b/gcc/fold-const.cc
@@ -14530,7 +14530,8 @@ tree_expr_maybe_real_minus_zero_p (const_tree x)
static bool
tree_simple_nonnegative_warnv_p (enum tree_code code, tree type)
{
- if ((TYPE_PRECISION (type) != 1 || TYPE_UNSIGNED (type))
+ if (!VECTOR_TYPE_P (type)
+ && (TYPE_PRECISION (type) != 1 || TYPE_UNSIGNED (type))
&& truth_value_p (code))
/* Truth values evaluate to 0 or 1, which is nonnegative unless we
have a signed:1 type (where the value is -1 and 0). */