fix some goto/label bugs
authorMatthias Braun <matze@braunis.de>
Thu, 15 Nov 2007 15:58:07 +0000 (15:58 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 15 Nov 2007 15:58:07 +0000 (15:58 +0000)
[r18407]

ast2firm.c
main.c

index 60ebd63..df44b68 100644 (file)
@@ -1277,6 +1277,9 @@ static void statement_to_firm(statement_t *statement);
 
 static void return_statement_to_firm(return_statement_t *statement)
 {
+       if(get_cur_block() == NULL)
+               return;
+
        dbg_info *dbgi = get_dbg_info(&statement->statement.source_position);
        ir_node  *ret;
 
@@ -1306,6 +1309,9 @@ static void compound_statement_to_firm(compound_statement_t *compound)
 
 static void expression_statement_to_firm(expression_statement_t *statement)
 {
+       if(get_cur_block() == NULL)
+               return;
+
        expression_to_firm(statement->expression);
 }
 
@@ -1734,6 +1740,8 @@ static void label_to_firm(const label_statement_t *statement)
 
        set_cur_block(block);
        keep_alive(block);
+
+       statement_to_firm(statement->label_statement);
 }
 
 static void goto_to_firm(const goto_statement_t *statement)
diff --git a/main.c b/main.c
index b85772c..0f442a1 100644 (file)
--- a/main.c
+++ b/main.c
@@ -194,6 +194,10 @@ static void optimize(void)
 {
        for(int i = 0; i < get_irp_n_irgs(); ++i) {
                ir_graph *irg = get_irp_irg(i);
+               place_code(irg);
+               dump(irg, "-place");
+               optimize_graph_df(irg);
+               dump(irg, "-localopt");
                optimize_cf(irg);
                dump(irg, "-cf");
        }