OSDN Git Service

2010-07-28 Mikael Morin <mikael@gcc.gnu.org>
authormikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Jul 2010 17:33:37 +0000 (17:33 +0000)
committermikael <mikael@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Jul 2010 17:33:37 +0000 (17:33 +0000)
* decl.c (free_value): Also free repeat field.
* data.c (gfc_assign_data_value): Always free offset before returning.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162649 138bc75d-0d04-0410-961f-82ee72b054a4

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

index c87b611..37da9fd 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 dd5e62c..6829fe9 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 9515676..acc85d2 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);
     }