From b7ce70b395cc04aa0ec1db5b0007879528b94e0f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 21 Sep 2012 13:54:14 +0200 Subject: [PATCH] re PR tree-optimization/54629 (ICE (segfault) in index_in_loop_nest tree-data-ref.h:608) 2012-09-21 Jakub Jelinek PR tree-optimization/54629 * tree-loop-distribution.c (classify_partition): Free loop nest only after freeing ddr. Free ddr and loop nest also if successful. From-SVN: r191611 --- gcc/ChangeLog | 6 ++++++ gcc/tree-loop-distribution.c | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d87140cbd87d..8fd0221420fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-09-21 Jakub Jelinek + + PR tree-optimization/54629 + * tree-loop-distribution.c (classify_partition): Free loop nest only + after freeing ddr. Free ddr and loop nest also if successful. + 2012-09-21 Matthias Klose * config/arm/arm.c (arm_mangle_type): Don't warn anymore that diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index b24af33d7abc..d29fe1cd386f 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -1019,10 +1019,10 @@ classify_partition (loop_p loop, struct graph *rdg, partition_t partition) ddr = initialize_data_dependence_relation (single_load, single_store, loops); compute_affine_dependence (ddr, loop); - VEC_free (loop_p, heap, loops); if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know) { free_dependence_relation (ddr); + VEC_free (loop_p, heap, loops); return; } if (DDR_ARE_DEPENDENT (ddr) != chrec_known) @@ -1030,6 +1030,7 @@ classify_partition (loop_p loop, struct graph *rdg, partition_t partition) if (DDR_NUM_DIST_VECTS (ddr) == 0) { free_dependence_relation (ddr); + VEC_free (loop_p, heap, loops); return; } lambda_vector dist_v; @@ -1040,10 +1041,13 @@ classify_partition (loop_p loop, struct graph *rdg, partition_t partition) if (dist > 0 && !DDR_REVERSED_P (ddr)) { free_dependence_relation (ddr); + VEC_free (loop_p, heap, loops); return; } } } + free_dependence_relation (ddr); + VEC_free (loop_p, heap, loops); partition->kind = PKIND_MEMCPY; partition->main_dr = single_store; partition->secondary_dr = single_load; -- 2.47.2