From e6a3886a833a0c499ab20a828ffae79076d47a4d Mon Sep 17 00:00:00 2001 From: liushuyu Date: Mon, 5 Sep 2022 17:56:03 -0600 Subject: [PATCH] gccrs: backend: correctly formulate the exit condition ... ... previously the exit condition was treated the same as the loop condition (which is the inverse condition of the exit condition). Now this is corrected. gcc/rust/ChangeLog: * backend/rust-compile-expr.cc (CompileExpr::visit): Properly formulate exit condition when compiling while loops. Signed-off-by: Zixing Liu --- gcc/rust/backend/rust-compile-expr.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc index ea146731cbea..d58e22589471 100644 --- a/gcc/rust/backend/rust-compile-expr.cc +++ b/gcc/rust/backend/rust-compile-expr.cc @@ -727,8 +727,11 @@ CompileExpr::visit (HIR::WhileLoopExpr &expr) tree condition = CompileExpr::Compile (expr.get_predicate_expr ().get (), ctx); + tree exit_condition + = fold_build1_loc (expr.get_locus ().gcc_location (), TRUTH_NOT_EXPR, + boolean_type_node, condition); tree exit_expr - = ctx->get_backend ()->exit_expression (condition, expr.get_locus ()); + = ctx->get_backend ()->exit_expression (exit_condition, expr.get_locus ()); ctx->add_statement (exit_expr); tree code_block_stmt -- 2.47.2