https://gcc.gnu.org/g:339415a5a865649972b255cc697691d493453e41

commit 339415a5a865649972b255cc697691d493453e41
Author: Tom Schollenberger <tss2...@g.rit.edu>
Date:   Thu May 8 07:26:07 2025 -0400

    gccrs: fix ICE on empty constexpr loops
    
    Empty loops have no body which means this is a NULL_TREE during const
    evaluation which needs a check. Fixes Rust-GCC #3618.
    
    gcc/rust/ChangeLog:
    
            * backend/rust-constexpr.cc (eval_constant_expression):  Check if t 
is a NULL_TREE
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/issue-3618.rs: Test empty loops error properly.
    
    Signed-off-by: Tom Schollenberger <tss2...@g.rit.edu>

Diff:
---
 gcc/rust/backend/rust-constexpr.cc       | 3 +++
 gcc/testsuite/rust/compile/issue-3618.rs | 1 +
 2 files changed, 4 insertions(+)

diff --git a/gcc/rust/backend/rust-constexpr.cc 
b/gcc/rust/backend/rust-constexpr.cc
index dc2d6b1066be..0ed56c71ad30 100644
--- a/gcc/rust/backend/rust-constexpr.cc
+++ b/gcc/rust/backend/rust-constexpr.cc
@@ -1901,6 +1901,9 @@ eval_constant_expression (const constexpr_ctx *ctx, tree 
t, bool lval,
 
   location_t loc = EXPR_LOCATION (t);
 
+  if (t == NULL_TREE)
+    return NULL_TREE;
+
   if (CONSTANT_CLASS_P (t))
     {
       if (TREE_OVERFLOW (t))
diff --git a/gcc/testsuite/rust/compile/issue-3618.rs 
b/gcc/testsuite/rust/compile/issue-3618.rs
new file mode 100644
index 000000000000..97286135e3a5
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3618.rs
@@ -0,0 +1 @@
+static _X: () = loop {}; // { dg-error "loop iteration count exceeds limit" }

Reply via email to