From a24668a34fb292cda15da0b709e21d17c8b40e35 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Tue, 3 Jul 2007 22:14:55 +0000 Subject: re PR fortran/32432 (SEGV/endless loop after: "ERROR: ... already is initialized") 2007-07-03 Jerry DeLisle PR fortran/32432 * gfortran.h: Change type of gfc_assign_data_value from void to try. * data.c (gfc_assign_data_value): Return FAILURE if error found. * resolve.c (check_data_variable): If gfc_assign_data_value returns failure, break out of loop and return failure. From-SVN: r126282 --- gcc/fortran/data.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'gcc/fortran/data.c') diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c index 35213a8..3c86bc8 100644 --- a/gcc/fortran/data.c +++ b/gcc/fortran/data.c @@ -245,7 +245,7 @@ create_character_intializer (gfc_expr *init, gfc_typespec *ts, LVALUE already has an initialization, we extend this, otherwise we create a new one. */ -void +try gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) { gfc_ref *ref; @@ -293,8 +293,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); - gfc_free_expr (init); - init = NULL; + return FAILURE; } if (init == NULL) @@ -423,6 +422,8 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index) symbol->value = expr; else last_con->expr = expr; + + return SUCCESS; } -- cgit v1.1