fix cond block in do-while loops
authorMatthias Braun <matze@braunis.de>
Fri, 16 Nov 2007 16:01:42 +0000 (16:01 +0000)
committerMatthias Braun <matze@braunis.de>
Fri, 16 Nov 2007 16:01:42 +0000 (16:01 +0000)
[r18414]

ast2firm.c
main.c

index 752b69d..09b30ac 100644 (file)
@@ -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 (file)
--- 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) {