From df77cfafe9fbd82de6cc5300ffdf75721c5d7c85 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 2 Jun 2004 12:53:32 +0000 Subject: [PATCH] Don't walk over external allocated entities graph, they don't exists [r2996] --- ir/ir/ircgopt.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/ir/ir/ircgopt.c b/ir/ir/ircgopt.c index cbb2907b5..aef6c9001 100644 --- a/ir/ir/ircgopt.c +++ b/ir/ir/ircgopt.c @@ -54,19 +54,22 @@ void gc_irgs(int n_keep, entity ** keep_arr) { set_entity_link(marked[i], MARK); } for (i = 0; i < ARR_LEN(marked); ++i) { - ir_graph * irg = get_entity_irg(marked[i]); - ir_node * node = get_irg_end(irg); - /* collect calls */ - irg_walk_graph(irg, clear_link, (irg_walk_func *) collect_call, node); - /* iterate calls */ - for (node = get_irn_link(node); node; node = get_irn_link(node)) { - int i; - assert(get_irn_op(node) == op_Call); - for (i = get_Call_n_callees(node) - 1; i >= 0; --i) { - entity * ent = get_Call_callee(node, i); - if (ent && get_entity_irg(ent) && get_entity_link(ent) != MARK) { - set_entity_link(ent, MARK); - ARR_APP1(entity *, marked, ent); + /* check for extern methods, these don't have an IRG */ + if (get_entity_visibility(marked[i]) != visibility_external_allocated) { + ir_graph * irg = get_entity_irg(marked[i]); + ir_node * node = get_irg_end(irg); + /* collect calls */ + irg_walk_graph(irg, clear_link, (irg_walk_func *) collect_call, node); + /* iterate calls */ + for (node = get_irn_link(node); node; node = get_irn_link(node)) { + int i; + assert(get_irn_op(node) == op_Call); + for (i = get_Call_n_callees(node) - 1; i >= 0; --i) { + entity * ent = get_Call_callee(node, i); + if (ent && get_entity_irg(ent) && get_entity_link(ent) != MARK) { + set_entity_link(ent, MARK); + ARR_APP1(entity *, marked, ent); + } } } } -- 2.20.1