From b45421e263f9637d19d80f498f9e7a40ce08231b Mon Sep 17 00:00:00 2001 From: Vacantron Chen Date: Tue, 12 Dec 2023 08:36:22 +0800 Subject: [PATCH] Handle breaking out of do-while loop --- src/cfront.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cfront.c b/src/cfront.c index 72193167..29b40c91 100644 --- a/src/cfront.c +++ b/src/cfront.c @@ -2899,8 +2899,15 @@ basic_block_t *read_body_statement(block_t *parent, basic_block_t *bb) var_start->init_val = ph1_ir_idx - 1; lex_expect(T_semicolon); - bb_connect(cond_, bb, THEN); - bb_connect(cond_, do_while_end, ELSE); + int i; + for (i = 0; i < MAX_BB_PRED; i++) { + if (cond_->prev[i].bb) { + bb_connect(cond_, bb, THEN); + bb_connect(cond_, do_while_end, ELSE); + break; + } + /* if breaking out of loop, skip condition block */ + } continue_pos_idx--; break_exit_idx--;