From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 43C9F38936F7; Wed, 8 Jun 2022 12:44:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 43C9F38936F7 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Ensure we don't return error_mark_node for loop expressions X-Act-Checkin: gcc X-Git-Author: Philip Herron X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: 9ea940e4dcabbf99fbb44c125a0af7cf82e48146 X-Git-Newrev: 0d8c298443615c1fd75c9af10ca26c7c36b69273 Message-Id: <20220608124439.43C9F38936F7@sourceware.org> Date: Wed, 8 Jun 2022 12:44:39 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2022 12:44:39 -0000 https://gcc.gnu.org/g:0d8c298443615c1fd75c9af10ca26c7c36b69273 commit 0d8c298443615c1fd75c9af10ca26c7c36b69273 Author: Philip Herron Date: Fri May 6 12:30:47 2022 +0100 Ensure we don't return error_mark_node for loop expressions Loop expressions can return a value even if its a unit-type so we must ensure we don't return an error_mark_node for the eventual coercion site for the unit-type case. Offending test-case was: rust/compile/torture/loop7.rs Diff: --- gcc/rust/backend/rust-compile-expr.h | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h index bb81d4ed7bc..080686f9ce7 100644 --- a/gcc/rust/backend/rust-compile-expr.h +++ b/gcc/rust/backend/rust-compile-expr.h @@ -552,21 +552,16 @@ public: } fncontext fnctx = ctx->peek_fn (); - Bvariable *tmp = NULL; - bool needs_temp = !block_tyty->is_unit (); - if (needs_temp) - { - tree enclosing_scope = ctx->peek_enclosing_scope (); - tree block_type = TyTyResolveCompile::compile (ctx, block_tyty); + tree enclosing_scope = ctx->peek_enclosing_scope (); + tree block_type = TyTyResolveCompile::compile (ctx, block_tyty); - bool is_address_taken = false; - tree ret_var_stmt = NULL_TREE; - tmp = ctx->get_backend ()->temporary_variable ( - fnctx.fndecl, enclosing_scope, block_type, NULL, is_address_taken, - expr.get_locus (), &ret_var_stmt); - ctx->add_statement (ret_var_stmt); - ctx->push_loop_context (tmp); - } + bool is_address_taken = false; + tree ret_var_stmt = NULL_TREE; + Bvariable *tmp = ctx->get_backend ()->temporary_variable ( + fnctx.fndecl, enclosing_scope, block_type, NULL, is_address_taken, + expr.get_locus (), &ret_var_stmt); + ctx->add_statement (ret_var_stmt); + ctx->push_loop_context (tmp); if (expr.has_loop_label ()) { @@ -595,12 +590,9 @@ public: = ctx->get_backend ()->loop_expression (code_block, expr.get_locus ()); ctx->add_statement (loop_expr); - if (tmp != NULL) - { - ctx->pop_loop_context (); - translated - = ctx->get_backend ()->var_expression (tmp, expr.get_locus ()); - } + ctx->pop_loop_context (); + translated = ctx->get_backend ()->var_expression (tmp, expr.get_locus ()); + ctx->pop_loop_begin_label (); }