[gcc r17-3096] gccrs: Use EH_ELSE_EXPR in block Drop TRY_FINALLY_EXPR

Arthur Cohen via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:80c98ea9eea1ad1ab3381af0f8f900c2c49bcc5b

commit r17-3096-g80c98ea9eea1ad1ab3381af0f8f900c2c49bcc5b
Author: Lishin <[email protected]>
Date:   Tue Jul 7 15:21:49 2026 +0000

    gccrs: Use EH_ELSE_EXPR in block Drop TRY_FINALLY_EXPR
    
    Use the Drop cleanup as the normal cleanup and an empty statement as
    the exceptional cleanup.
    
    This keeps block-scope Drop cleanup on normal control-flow exits without
    requiring the gccrs EH personality while stack unwinding is not implemented.
    
    gcc/rust/ChangeLog:
    
            * backend/rust-compile-context.h:
            (Context::pop_block_impl): Wrap Drop cleanup in an EH_ELSE_EXPR.
    
    Signed-off-by: Lishin <[email protected]>

Diff:
---
 gcc/rust/backend/rust-compile-context.h | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gcc/rust/backend/rust-compile-context.h b/gcc/rust/backend/rust-compile-context.h
index 25a27ca96281..7f67b9382e05 100644
--- a/gcc/rust/backend/rust-compile-context.h
+++ b/gcc/rust/backend/rust-compile-context.h
@@ -437,8 +437,14 @@ private:
 	if (body == NULL_TREE)
 	  body = build_empty_stmt (cleanup_locus);
 
+	tree exceptional_cleanup = build_empty_stmt (cleanup_locus);
+	tree cleanup_selector
+	  = build2_loc (cleanup_locus, EH_ELSE_EXPR, void_type_node, cleanup,
+			exceptional_cleanup);
+
 	tree try_finally
-	  = Backend::exception_handler_statement (body, NULL_TREE, cleanup,
+	  = Backend::exception_handler_statement (body, NULL_TREE,
+						  cleanup_selector,
 						  cleanup_locus);
 	Backend::block_add_statements (block, {try_finally});
       }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.