linearize.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-) diff --git a/linearize.c b/linearize.c index 30e0c9d..9e4b6a4 100644 --- a/linearize.c +++ b/linearize.c @@ -2055,7 +2055,7 @@ pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt) struct statement *statement = stmt->iterator_statement; struct statement *post_statement = stmt->iterator_post_statement; struct expression *post_condition = stmt->iterator_post_condition; - struct basic_block *loop_top, *loop_body, *loop_continue, *loop_end; + struct basic_block *loop_body, *loop_continue, *loop_end; concat_symbol_list(stmt->iterator_syms, &ep->syms); linearize_statement(ep, pre_statement); @@ -2078,9 +2078,12 @@ pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt) linearize_statement(ep, post_statement); /* No post-condition means that it's the same as the pre-condition */ - if (!post_condition) - linearize_cond_branch(ep, pre_condition, loop_body, loop_end); - else + if (!post_condition) { + if (pre_condition) + linearize_cond_branch(ep, pre_condition, loop_body, loop_end); + else + add_goto(ep, loop_body); + } else linearize_cond_branch(ep, post_condition, loop_body, loop_end); set_activeblock(ep, loop_end); break;