From 290a2ed7ca6d301d8157ad5d411fee23daec4053 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 12 Apr 2014 09:57:35 +0200 Subject: [PATCH] isl_schedule.c: graph_free: improve error handling graph_free may get called on a partially constructed object if the construction itself fails. Signed-off-by: Sven Verdoolaege --- isl_schedule.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/isl_schedule.c b/isl_schedule.c index d7b8b935..bc5ed857 100644 --- a/isl_schedule.c +++ b/isl_schedule.c @@ -449,22 +449,24 @@ static void graph_free(isl_ctx *ctx, struct isl_sched_graph *graph) isl_hmap_map_basic_set_free(ctx, graph->intra_hmap); isl_hmap_map_basic_set_free(ctx, graph->inter_hmap); - for (i = 0; i < graph->n; ++i) { - isl_space_free(graph->node[i].dim); - isl_mat_free(graph->node[i].sched); - isl_map_free(graph->node[i].sched_map); - isl_mat_free(graph->node[i].cmap); - isl_mat_free(graph->node[i].cinv); - if (graph->root) { - free(graph->node[i].band); - free(graph->node[i].band_id); - free(graph->node[i].zero); + if (graph->node) + for (i = 0; i < graph->n; ++i) { + isl_space_free(graph->node[i].dim); + isl_mat_free(graph->node[i].sched); + isl_map_free(graph->node[i].sched_map); + isl_mat_free(graph->node[i].cmap); + isl_mat_free(graph->node[i].cinv); + if (graph->root) { + free(graph->node[i].band); + free(graph->node[i].band_id); + free(graph->node[i].zero); + } } - } free(graph->node); free(graph->sorted); - for (i = 0; i < graph->n_edge; ++i) - isl_map_free(graph->edge[i].map); + if (graph->edge) + for (i = 0; i < graph->n_edge; ++i) + isl_map_free(graph->edge[i].map); free(graph->edge); free(graph->region); for (i = 0; i <= isl_edge_last; ++i) -- 2.11.4.GIT