From 64ba14931874bbe340eb44b8ac9259aaad86413e Mon Sep 17 00:00:00 2001 From: Andreas Zwinkau Date: Wed, 20 Apr 2011 14:49:30 +0200 Subject: [PATCH] fix backend/lower_call3.c --- ir/lower/lower_calls.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/ir/lower/lower_calls.c b/ir/lower/lower_calls.c index 14916bdf0..5036694a9 100644 --- a/ir/lower/lower_calls.c +++ b/ir/lower/lower_calls.c @@ -666,11 +666,6 @@ static void transform_irg(const lower_params_t *lp, ir_graph *irg) if (n_ret_com) { int idx; - /* - * Now fix the Return node of the current graph. - */ - env.changed = 1; - /* STEP 1: find the return. This is simple, we have normalized the graph. */ endbl = get_irg_end_block(irg); ret = NULL; @@ -682,8 +677,14 @@ static void transform_irg(const lower_params_t *lp, ir_graph *irg) break; } } - /* there should always be a return */ - assert(ret); + + /* in case of infinite loops, there might be no return */ + if (ret == NULL) goto return_fixed; + + /* + * Now fix the Return node of the current graph. + */ + env.changed = 1; /* * STEP 2: fix it. For all compound return values add a CopyB, @@ -756,6 +757,7 @@ static void transform_irg(const lower_params_t *lp, ir_graph *irg) } } } /* if (n_ret_com) */ +return_fixed: pmap_destroy(env.dummy_map); obstack_free(&env.obst, NULL); -- 2.20.1