]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
decl.c (free_value): Also free repeat field.
authorMikael Morin <mikael@gcc.gnu.org>
Wed, 28 Jul 2010 17:33:37 +0000 (17:33 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Wed, 28 Jul 2010 17:33:37 +0000 (17:33 +0000)
2010-07-28  Mikael Morin  <mikael@gcc.gnu.org>

* decl.c (free_value): Also free repeat field.
* data.c (gfc_assign_data_value): Always free offset before returning.

From-SVN: r162649

gcc/fortran/ChangeLog
gcc/fortran/data.c
gcc/fortran/decl.c

index c87b611904293427c45009e971955dc0c8538667..37da9fd5d44dacc2acac4818ffb9faa3c9dbcf83 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-28  Mikael Morin  <mikael@gcc.gnu.org>
+
+       * decl.c (free_value): Also free repeat field.
+       * data.c (gfc_assign_data_value): Always free offset before returning.
+
 2010-07-28  Daniel Kraft  <d@domob.eu>
 
        * gfortran.h (gfc_build_intrinsic_call): New method.
index dd5e62cb2de42c1bbe66675c4419510d0180b603..6829fe9cd03f631255992bcf9c812907532945c1 100644 (file)
@@ -244,7 +244,7 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
              gfc_error ("'%s' at %L already is initialized at %L",
                         lvalue->symtree->n.sym->name, &lvalue->where,
                         &init->where);
-             return FAILURE;
+             goto abort;
            }
 
          if (init == NULL)
@@ -267,7 +267,7 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
            {
              gfc_error ("Data element below array lower bound at %L",
                         &lvalue->where);
-             return FAILURE;
+             goto abort;
            }
          else
            {
@@ -275,12 +275,12 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
              if (spec_size (ref->u.ar.as, &size) == SUCCESS)
                {
                  if (mpz_cmp (offset, size) >= 0)
-                 {
-                   mpz_clear (size);
-                   gfc_error ("Data element above array upper bound at %L",
-                              &lvalue->where);
-                   return FAILURE;
-                 }
+                   {
+                     mpz_clear (size);
+                     gfc_error ("Data element above array upper bound at %L",
+                                &lvalue->where);
+                     goto abort;
+                   }
                  mpz_clear (size);
                }
            }
@@ -336,6 +336,8 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
       last_con = con;
     }
 
+  mpz_clear (offset);
+
   if (ref || last_ts->type == BT_CHARACTER)
     {
       if (lvalue->ts.u.cl->length == NULL && !(ref && ref->u.ss.length != NULL))
@@ -371,6 +373,10 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
     last_con->expr = expr;
 
   return SUCCESS;
+
+abort:
+  mpz_clear (offset);
+  return FAILURE;
 }
 
 
index 9515676acc9b49ceee41f0a83de1b4f3760a4836..acc85d25484dda2463f8f7d1ec2387851d64f677 100644 (file)
@@ -134,6 +134,7 @@ free_value (gfc_data_value *p)
   for (; p; p = q)
     {
       q = p->next;
+      mpz_clear (p->repeat);
       gfc_free_expr (p->expr);
       gfc_free (p);
     }