diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-07-03 22:14:55 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-07-03 22:14:55 +0000 |
commit | a24668a34fb292cda15da0b709e21d17c8b40e35 (patch) | |
tree | 4352b8947dcf2586ceea4b93620531d88a0240f0 /gcc/fortran/resolve.c | |
parent | f9faf95474a8a0009af1f6fd19097b1e96d8eefc (diff) | |
download | gcc-a24668a34fb292cda15da0b709e21d17c8b40e35.zip gcc-a24668a34fb292cda15da0b709e21d17c8b40e35.tar.gz gcc-a24668a34fb292cda15da0b709e21d17c8b40e35.tar.bz2 |
re PR fortran/32432 (SEGV/endless loop after: "ERROR: ... already is initialized")
2007-07-03 Jerry DeLisle <jvdelisle@gcc.gnu.org>
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
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 615d85e..158abe0 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -7472,7 +7472,9 @@ check_data_variable (gfc_data_variable *var, locus *where) values.left -= 1; mpz_sub_ui (size, size, 1); - gfc_assign_data_value (var->expr, values.vnode->expr, offset); + t = gfc_assign_data_value (var->expr, values.vnode->expr, offset); + if (t == FAILURE) + break; if (mark == AR_FULL) mpz_add_ui (offset, offset, 1); |