]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/54629 (ICE (segfault) in index_in_loop_nest tree-data-ref...
authorJakub Jelinek <jakub@redhat.com>
Fri, 21 Sep 2012 11:54:14 +0000 (13:54 +0200)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 21 Sep 2012 11:54:14 +0000 (11:54 +0000)
2012-09-21  Jakub Jelinek  <jakub@redhat.com>

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
gcc/tree-loop-distribution.c

index d87140cbd87dc0c82c92811933cc8e4f975d7198..8fd0221420fba082d810c83a3af94d6f9d10d305 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-21  Jakub Jelinek  <jakub@redhat.com>
+
+       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  <doko@ubuntu.com>
 
        * config/arm/arm.c (arm_mangle_type): Don't warn anymore that 
index b24af33d7abc11e51708072d8016374a6c2ce9d5..d29fe1cd386f4f4553bfa06630f94c1c738fb9aa 100644 (file)
@@ -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;