Commit c9d75a48 by Mikael Morin

decl.c (free_value): Also free repeat field.

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
parent 69dcd06a
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> 2010-07-28 Daniel Kraft <d@domob.eu>
* gfortran.h (gfc_build_intrinsic_call): New method. * gfortran.h (gfc_build_intrinsic_call): New method.
......
...@@ -244,7 +244,7 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) ...@@ -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", gfc_error ("'%s' at %L already is initialized at %L",
lvalue->symtree->n.sym->name, &lvalue->where, lvalue->symtree->n.sym->name, &lvalue->where,
&init->where); &init->where);
return FAILURE; goto abort;
} }
if (init == NULL) if (init == NULL)
...@@ -267,7 +267,7 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) ...@@ -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", gfc_error ("Data element below array lower bound at %L",
&lvalue->where); &lvalue->where);
return FAILURE; goto abort;
} }
else else
{ {
...@@ -275,12 +275,12 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) ...@@ -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 (spec_size (ref->u.ar.as, &size) == SUCCESS)
{ {
if (mpz_cmp (offset, size) >= 0) if (mpz_cmp (offset, size) >= 0)
{ {
mpz_clear (size); mpz_clear (size);
gfc_error ("Data element above array upper bound at %L", gfc_error ("Data element above array upper bound at %L",
&lvalue->where); &lvalue->where);
return FAILURE; goto abort;
} }
mpz_clear (size); mpz_clear (size);
} }
} }
...@@ -336,6 +336,8 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) ...@@ -336,6 +336,8 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
last_con = con; last_con = con;
} }
mpz_clear (offset);
if (ref || last_ts->type == BT_CHARACTER) if (ref || last_ts->type == BT_CHARACTER)
{ {
if (lvalue->ts.u.cl->length == NULL && !(ref && ref->u.ss.length != NULL)) 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) ...@@ -371,6 +373,10 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index)
last_con->expr = expr; last_con->expr = expr;
return SUCCESS; return SUCCESS;
abort:
mpz_clear (offset);
return FAILURE;
} }
......
...@@ -134,6 +134,7 @@ free_value (gfc_data_value *p) ...@@ -134,6 +134,7 @@ free_value (gfc_data_value *p)
for (; p; p = q) for (; p; p = q)
{ {
q = p->next; q = p->next;
mpz_clear (p->repeat);
gfc_free_expr (p->expr); gfc_free_expr (p->expr);
gfc_free (p); gfc_free (p);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment