aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorDaniel Franke <franke.daniel@gmail.com>2010-05-05 14:53:23 -0400
committerDaniel Franke <dfranke@gcc.gnu.org>2010-05-05 14:53:23 -0400
commite5880243049fd9d3992c86eb2f929abd3514153c (patch)
tree24a5a6c449684bf4a2c0701c5f668e03bd7fa60f /gcc/fortran/resolve.c
parent5b042919f71728bc26a8921738bdb0a1b3c680f0 (diff)
downloadgcc-e5880243049fd9d3992c86eb2f929abd3514153c.zip
gcc-e5880243049fd9d3992c86eb2f929abd3514153c.tar.gz
gcc-e5880243049fd9d3992c86eb2f929abd3514153c.tar.bz2
re PR fortran/24978 (ICE in gfc_assign_data_value_range)
gcc/fortran/: 2010-05-05 Daniel Franke <franke.daniel@gmail.com> PR fortran/24978 * gfortran.h: Removed repeat count from constructor, removed all usages. * data.h (gfc_assign_data_value_range): Changed return value from void to gfc_try. * data.c (gfc_assign_data_value): Add location to constructor element. (gfc_assign_data_value_range): Call gfc_assign_data_value() for each element in range. Return early if an error was generated. * resolve.c (check_data_variable): Stop early if range assignment generated an error. gcc/testsuite/: 2010-05-05 Daniel Franke <franke.daniel@gmail.com> PR fortran/24978 * gfortran.dg/data_invalid.f90: New. From-SVN: r159076
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index d92c69c..2c79863 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -11781,11 +11781,14 @@ check_data_variable (gfc_data_variable *var, locus *where)
mpz_set_ui (size, 0);
}
- gfc_assign_data_value_range (var->expr, values.vnode->expr,
- offset, range);
+ t = gfc_assign_data_value_range (var->expr, values.vnode->expr,
+ offset, range);
mpz_add (offset, offset, range);
mpz_clear (range);
+
+ if (t == FAILURE)
+ break;
}
/* Assign initial value to symbol. */