From: Matthias Braun Date: Fri, 16 Nov 2007 16:01:42 +0000 (+0000) Subject: fix cond block in do-while loops X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=c87f35f3b3459af9fefa14ee73dd5b5a0dd679f1;p=cparser fix cond block in do-while loops [r18414] --- diff --git a/ast2firm.c b/ast2firm.c index 752b69d..09b30ac 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -1506,6 +1506,7 @@ static void do_while_statement_to_firm(do_while_statement_t *statement) if(get_cur_block() == NULL) { mature_immBlock(header_block); mature_immBlock(body_block); + mature_immBlock(false_block); return; } @@ -1514,6 +1515,7 @@ static void do_while_statement_to_firm(do_while_statement_t *statement) mature_immBlock(header_block); /* create the condition */ + set_cur_block(header_block); ir_node *condition = expression_to_modeb(statement->condition); ir_node *cond = new_d_Cond(dbgi, condition); ir_node *true_proj = new_d_Proj(dbgi, cond, mode_X, pn_Cond_true); @@ -1702,6 +1704,9 @@ static void declaration_statement_to_firm(declaration_statement_t *statement) static void create_jump_statement(const statement_t *statement, ir_node *target_block) { + if(get_cur_block() == NULL) + return; + dbg_info *dbgi = get_dbg_info(&statement->source_position); ir_node *jump = new_d_Jmp(dbgi); add_immBlock_pred(target_block, jump); diff --git a/main.c b/main.c index 3660a45..b40a779 100644 --- a/main.c +++ b/main.c @@ -213,7 +213,7 @@ static void create_firm_prog(translation_unit_t *unit) { translation_unit_to_firm(unit); - dump_globals_as_text(dump_verbosity_max, "-globals"); + //dump_globals_as_text(dump_verbosity_max, "-globals"); int n_irgs = get_irp_n_irgs(); for(int i = 0; i < n_irgs; ++i) {