diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2011-03-06 20:15:38 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2011-03-06 20:15:38 +0000 |
commit | 8e1e41e7afc6a9cc022c724f99f488029f22a680 (patch) | |
tree | e9edb9949d0537de89a1f09509893c31efd28885 /gcc/fortran/expr.c | |
parent | 787a8c0feb104e6de4349c9485becd7292c2c9f7 (diff) | |
download | gcc-8e1e41e7afc6a9cc022c724f99f488029f22a680.zip gcc-8e1e41e7afc6a9cc022c724f99f488029f22a680.tar.gz gcc-8e1e41e7afc6a9cc022c724f99f488029f22a680.tar.bz2 |
re PR fortran/47850 (ICE in gfc_conv_array_initializer)
2011-03-06 Paul Thomas <pault@gcc.gnu.org>
Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/47850
* expr.c (gfc_is_constant_expr): Only use gfc_constant_ac if
the expression has an iterator. Otherwise, iterate through the
array, checking for constant expressions for each element.
2011-03-06 Paul Thomas <pault@gcc.gnu.org>
Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/47850
* gfortran.dg/array_constructor_37.f90 : New test.
Co-Authored-By: Jerry DeLisle <jvdelisle@gcc.gnu.org>
From-SVN: r170720
Diffstat (limited to 'gcc/fortran/expr.c')
-rw-r--r-- | gcc/fortran/expr.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index b30bc64..58b6036 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -937,16 +937,18 @@ gfc_is_constant_expr (gfc_expr *e) return e->ref == NULL || (gfc_is_constant_expr (e->ref->u.ss.start) && gfc_is_constant_expr (e->ref->u.ss.end)); + case EXPR_ARRAY: case EXPR_STRUCTURE: - for (c = gfc_constructor_first (e->value.constructor); - c; c = gfc_constructor_next (c)) + c = gfc_constructor_first (e->value.constructor); + if ((e->expr_type == EXPR_ARRAY) && c && c->iterator) + return gfc_constant_ac (e); + + for (; c; c = gfc_constructor_next (c)) if (!gfc_is_constant_expr (c->expr)) return 0; return 1; - case EXPR_ARRAY: - return gfc_constant_ac (e); default: gfc_internal_error ("gfc_is_constant_expr(): Unknown expression type"); |