From: Matthias Braun Date: Thu, 15 Nov 2007 15:58:07 +0000 (+0000) Subject: fix some goto/label bugs X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=d17a6af40f3d5ef3aee3b10948556a1dc5bf49fa;p=cparser fix some goto/label bugs [r18407] --- diff --git a/ast2firm.c b/ast2firm.c index 60ebd63..df44b68 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -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 --- 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"); }