From: Richard Biener Date: Fri, 23 Jun 2023 08:12:24 +0000 (+0200) Subject: Fix tree_simple_nonnegative_warnv_p for VECTOR_TYPEs X-Git-Tag: basepoints/gcc-15~8096 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f2fcf21d4c939831c299cb884cbeaca1d33fa8e;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index b05b3ae16e93..ac90a594fcc4 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). */