https://gcc.gnu.org/g:4c40e3d7b9152f40e5a3d35060b6822ddc743624

commit r16-241-g4c40e3d7b9152f40e5a3d35060b6822ddc743624
Author: Andrew Pinski <quic_apin...@quicinc.com>
Date:   Thu Apr 24 09:45:16 2025 -0700

    gimple-verifier: Add check that comparison in GIMPLE_COND does not throw
    
    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_apin...@quicinc.com>

Diff:
---
 gcc/tree-cfg.cc | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index ecf19d280797..6a95b82ff404 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -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),

Reply via email to