aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorliushuyu <liushuyu011@gmail.com>2022-09-05 17:56:03 -0600
committerArthur Cohen <arthur.cohen@embecosm.com>2023-01-31 14:16:51 +0100
commite6a3886a833a0c499ab20a828ffae79076d47a4d (patch)
tree71a89ed815c718b367c7488c82b346d440ca3894 /gcc/rust
parentb0ff1647cbe682b681ab9abaed3315b6b03c20fc (diff)
downloadgcc-e6a3886a833a0c499ab20a828ffae79076d47a4d.zip
gcc-e6a3886a833a0c499ab20a828ffae79076d47a4d.tar.gz
gcc-e6a3886a833a0c499ab20a828ffae79076d47a4d.tar.bz2
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 <liushuyu011@gmail.com>
Diffstat (limited to 'gcc/rust')
-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 ea14673..d58e225 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