aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorliushuyu <liushuyu011@gmail.com>2022-09-05 17:56:03 -0600
committerliushuyu <liushuyu011@gmail.com>2022-09-05 17:57:43 -0600
commitbed01725c1c6a7a463a9b42082ef91a5406588ec (patch)
treedb6b80910f02eb0469f21802ef95e98c87a4343c
parent8c6b017310ec3b4f77500d5fa8311e995d655c1a (diff)
downloadgcc-bed01725c1c6a7a463a9b42082ef91a5406588ec.zip
gcc-bed01725c1c6a7a463a9b42082ef91a5406588ec.tar.gz
gcc-bed01725c1c6a7a463a9b42082ef91a5406588ec.tar.bz2
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.
-rw-r--r--gcc/rust/backend/rust-compile-expr.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc
index e13c08c..660ad09 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