aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/data.c
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2010-07-28 17:33:37 +0000
committerMikael Morin <mikael@gcc.gnu.org>2010-07-28 17:33:37 +0000
commitc9d75a48c4ea63ab27ccdb40f993236289b243f2 (patch)
tree2c3413ad539d2fc647357b1d97960cfbe3590b4b /gcc/fortran/data.c
parent69dcd06ab86aef723efcc294d64e31ef159ae3c0 (diff)
downloadgcc-c9d75a48c4ea63ab27ccdb40f993236289b243f2.zip
gcc-c9d75a48c4ea63ab27ccdb40f993236289b243f2.tar.gz
gcc-c9d75a48c4ea63ab27ccdb40f993236289b243f2.tar.bz2
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
Diffstat (limited to 'gcc/fortran/data.c')
-rw-r--r--gcc/fortran/data.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c
index dd5e62c..6829fe9 100644
--- a/gcc/fortran/data.c
+++ b/gcc/fortran/data.c
@@ -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;
}