From 17bb408b57259f439f5d922ed1d99cab998c968c Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Wed, 1 Apr 2020 16:06:45 +0900 Subject: [PATCH] [qfcc] Clean up stray dags edges Killed nodes can leave stray (dangling) edges that cause some confusion in the dot graphs and may cause problems later on down the track, so ensure there are no dangling edges. --- tools/qfcc/source/dags.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/qfcc/source/dags.c b/tools/qfcc/source/dags.c index a2d29c371..680abca84 100644 --- a/tools/qfcc/source/dags.c +++ b/tools/qfcc/source/dags.c @@ -1163,6 +1163,19 @@ dag_remove_dead_nodes (dag_t *dag) } } } while (added_root); + + // clean up any stray edges that point to removed nodes + for (int i = 0; i < dag->num_nodes; i++) { + node = dag->nodes[i]; + for (child_i = set_first (node->edges); child_i; + child_i = set_next (child_i)) { + child = dag->nodes[child_i->element]; + if (!set_is_member (dag->roots, child->number) + && set_is_empty (child->parents)) { + set_remove (node->edges, child->number); + } + } + } dag_sort_nodes (dag); }