]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gimple-verifier: Add check that comparison in GIMPLE_COND does not throw
authorAndrew Pinski <quic_apinski@quicinc.com>
Thu, 24 Apr 2025 16:45:16 +0000 (09:45 -0700)
committerAndrew Pinski <quic_apinski@quicinc.com>
Mon, 28 Apr 2025 17:16:54 +0000 (10:16 -0700)
While working on PR 119903, I noticed that there is code in replace_stmt_with_simplification
which makes sure that the comparison of a GIMPLE_COND does not throw
(non-call exceptions and trapping math) but the gimple verifier does not
verify this. So let's add it.

Bootstrapped and tested on x86_64-linux-gnu.

gcc/ChangeLog:

* tree-cfg.cc (verify_gimple_cond): Error out if the comparison
throws.

Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
gcc/tree-cfg.cc

index ecf19d2807973c2d5ccc96fd24d1dd3f0285abbc..6a95b82ff404aea7e5de542879b9fff0d1958412 100644 (file)
@@ -5104,6 +5104,19 @@ verify_gimple_cond (gcond *stmt)
       return true;
     }
 
+  tree lhs = gimple_cond_lhs (stmt);
+
+  /* GIMPLE_CONDs condition may not throw.  */
+  if (flag_exceptions
+      && cfun->can_throw_non_call_exceptions
+      && operation_could_trap_p (gimple_cond_code (stmt),
+                                FLOAT_TYPE_P (TREE_TYPE (lhs)),
+                                false, NULL_TREE))
+    {
+      error ("gimple cond condition cannot throw");
+      return true;
+    }
+
   return verify_gimple_comparison (boolean_type_node,
                                   gimple_cond_lhs (stmt),
                                   gimple_cond_rhs (stmt),