]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
fold-const.cc: remove strict_overflow_p from tree_unary_nonnegative
authorDaniel Barboza <daniel.barboza@oss.qualcomm.com>
Sat, 17 Jan 2026 19:01:50 +0000 (16:01 -0300)
committerDaniel Barboza <daniel.barboza@oss.qualcomm.com>
Sat, 23 May 2026 17:20:45 +0000 (14:20 -0300)
Similar to what was done with tree_binary_nonnegative_p in the previous
patch, we want to remove overflow flags from all
tree_unary_nonnegative_warnv_p helpers, and then remove all overflow
flags from the parent helper itself.

gcc/ChangeLog:

* fold-const.cc (tree_unary_nonnegative_warnv_p): Renamed to
tree_unary_nonnegative_p.
(tree_unary_nonnegative_p): Removed strict_overflow_p flag.
(tree_expr_nonnegative_warnv_p): Removed strict_overflow_flag
from tree_unary_nonnegative_p calls.
* fold-const.h (tree_unary_nonnegative_warnv_p): Renamed to
tree_unary_nonnegative_p.
(tree_unary_nonnegative_p): Removed strict_overflow_p flag.
* gimple-fold.cc (gimple_assign_nonnegative_warnv_p): Removed
strict_overflow_flag from tree_unary_nonnegative_p calls.

gcc/testsuite/ChangeLog:

* gcc.dg/Wstrict-overflow-24.c: Removed since the pattern
doesn't throw warnings anymore.
* gcc.dg/Wstrict-overflow-9.c: Likewise.

gcc/fold-const.cc
gcc/fold-const.h
gcc/gimple-fold.cc
gcc/testsuite/gcc.dg/Wstrict-overflow-24.c [deleted file]
gcc/testsuite/gcc.dg/Wstrict-overflow-9.c [deleted file]

index 456f7af97d1e36395ae83d6050eb9948a10a0b80..50f3f9fb58df51ab8d5f8c1ef0019ded944eb17d 100644 (file)
@@ -14604,18 +14604,20 @@ tree_simple_nonnegative_warnv_p (enum tree_code code, tree type)
   return false;
 }
 
-/* Return true if (CODE OP0) is known to be non-negative.  If the return
-   value is based on the assumption that signed overflow is undefined,
-   set *STRICT_OVERFLOW_P to true; otherwise, don't change
-   *STRICT_OVERFLOW_P.  DEPTH is the current nesting depth of the query.  */
+/* Return true if (CODE OP0) is known to be non-negative.
+  DEPTH is the current nesting depth of the query.  */
 
 bool
-tree_unary_nonnegative_warnv_p (enum tree_code code, tree type, tree op0,
-                               bool *strict_overflow_p, int depth)
+tree_unary_nonnegative_p (enum tree_code code, tree type, tree op0, int depth)
 {
   if (TYPE_UNSIGNED (type))
     return true;
 
+  /* The RECURSE () macro counts with a strict_overflow_p bool
+     pointer being declared beforehand.  */
+  bool val = false;
+  bool *strict_overflow_p = &val;
+
   switch (code)
     {
     case ABS_EXPR:
@@ -14624,10 +14626,7 @@ tree_unary_nonnegative_warnv_p (enum tree_code code, tree type, tree op0,
       if (!ANY_INTEGRAL_TYPE_P (type))
        return true;
       if (TYPE_OVERFLOW_UNDEFINED (type))
-       {
-         *strict_overflow_p = true;
-         return true;
-       }
+       return true;
       break;
 
     case NON_LVALUE_EXPR:
@@ -15124,10 +15123,10 @@ tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p, int depth)
                                        depth);
 
     case tcc_unary:
-      return tree_unary_nonnegative_warnv_p (TREE_CODE (t),
-                                            TREE_TYPE (t),
-                                            TREE_OPERAND (t, 0),
-                                            strict_overflow_p, depth);
+      return tree_unary_nonnegative_p (TREE_CODE (t),
+                                      TREE_TYPE (t),
+                                      TREE_OPERAND (t, 0),
+                                      depth);
 
     case tcc_constant:
     case tcc_declaration:
@@ -15149,10 +15148,10 @@ tree_expr_nonnegative_warnv_p (tree t, bool *strict_overflow_p, int depth)
                                        TREE_OPERAND (t, 1),
                                        depth);
     case TRUTH_NOT_EXPR:
-      return tree_unary_nonnegative_warnv_p (TREE_CODE (t),
-                                            TREE_TYPE (t),
-                                            TREE_OPERAND (t, 0),
-                                            strict_overflow_p, depth);
+      return tree_unary_nonnegative_p (TREE_CODE (t),
+                                      TREE_TYPE (t),
+                                      TREE_OPERAND (t, 0),
+                                      depth);
 
     case COND_EXPR:
     case CONSTRUCTOR:
index bdecb5a24d58cecd8d2087b961226cd98c768975..8f5d5b69982bf6e1d33181ef5ea3e2ebff3c0014 100644 (file)
@@ -165,8 +165,7 @@ extern bool inverse_conditions_p (const_tree, const_tree);
 extern bool tree_unary_nonzero_p (enum tree_code, tree, tree);
 extern bool tree_binary_nonzero_p (enum tree_code, tree, tree, tree op1);
 extern bool tree_single_nonzero_p (tree);
-extern bool tree_unary_nonnegative_warnv_p (enum tree_code, tree, tree,
-                                           bool *, int);
+extern bool tree_unary_nonnegative_p (enum tree_code, tree, tree, int);
 extern bool tree_binary_nonnegative_p (enum tree_code, tree, tree, tree, int);
 extern bool tree_single_nonnegative_warnv_p (tree, bool *, int);
 extern bool tree_call_nonnegative_warnv_p (tree, combined_fn, tree, tree,
index 88fa15103175dd7c689e8f5b5c1641305976465a..8a06acd8c1f1e2e72e2fa0ba29e43e439c0c76b6 100644 (file)
@@ -11449,10 +11449,10 @@ gimple_assign_nonnegative_warnv_p (gimple *stmt, bool *strict_overflow_p,
   switch (get_gimple_rhs_class (code))
     {
     case GIMPLE_UNARY_RHS:
-      return tree_unary_nonnegative_warnv_p (gimple_assign_rhs_code (stmt),
-                                            type,
-                                            gimple_assign_rhs1 (stmt),
-                                            strict_overflow_p, depth);
+      return tree_unary_nonnegative_p (gimple_assign_rhs_code (stmt),
+                                      type,
+                                      gimple_assign_rhs1 (stmt),
+                                      depth);
     case GIMPLE_BINARY_RHS:
       return tree_binary_nonnegative_p (gimple_assign_rhs_code (stmt),
                                        type,
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-24.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-24.c
deleted file mode 100644 (file)
index 05e8dd1..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fstrict-overflow -O2" } */
-/* { dg-message "warnings being treated as errors" "" {target "*-*-*"} 0 } */
-#pragma GCC diagnostic error "-Wstrict-overflow"
-
-int
-foo (int i)
-{
-  return __builtin_abs (i) >= 0; /* { dg-error "assuming signed overflow does not occur" "correct warning" } */
-}
diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-9.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-9.c
deleted file mode 100644 (file)
index 425a121..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-fstrict-overflow -O2 -Wstrict-overflow=2" } */
-
-/* Source: Ian Lance Taylor.  */
-
-int
-foo (int i)
-{
-  return __builtin_abs (i) >= 0; /* { dg-warning "assuming signed overflow does not occur" "correct warning" } */
-}