aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/decl.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2016-07-30 16:19:14 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2016-07-30 16:19:14 +0000
commitfb42421ef060d7bc2e7f954ce12b0fdc83e57ee6 (patch)
tree8e0a2eb509ebf7b16038640bfae617591083fb0e /gcc/fortran/decl.c
parent12f549f4a4809411bbb7bd95c791eafa8861345c (diff)
downloadgcc-fb42421ef060d7bc2e7f954ce12b0fdc83e57ee6.zip
gcc-fb42421ef060d7bc2e7f954ce12b0fdc83e57ee6.tar.gz
gcc-fb42421ef060d7bc2e7f954ce12b0fdc83e57ee6.tar.bz2
re PR fortran/71730 (ICE when character length specification uses an undefined variable)
2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/71730 * decl.c (char_len_param_value): Check return value of gfc_reduce_init_expr(). 2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/71730 * gfortran.dg/pr71730.f90: New test. * gfortran.dg/bounds_check_strlen_2.f90: Fix invalid code. * gfortran.dg/array_constructor_27.f03: Update dg-error message. * gfortran.dg/array_constructor_26.f03: Ditto. From-SVN: r238904
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r--gcc/fortran/decl.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c
index cf75039..7ff2f0d 100644
--- a/gcc/fortran/decl.c
+++ b/gcc/fortran/decl.c
@@ -906,6 +906,7 @@ char_len_param_value (gfc_expr **expr, bool *deferred)
goto syntax;
else if ((*expr)->expr_type == EXPR_VARIABLE)
{
+ bool t;
gfc_expr *e;
e = gfc_copy_expr (*expr);
@@ -917,7 +918,15 @@ char_len_param_value (gfc_expr **expr, bool *deferred)
&& e->ref->u.ar.dimen_type[0] == DIMEN_RANGE)
goto syntax;
- gfc_reduce_init_expr (e);
+ t = gfc_reduce_init_expr (e);
+
+ if (!t && (e->ts.type == BT_UNKNOWN
+ && e->symtree->n.sym->attr.untyped == 1
+ && e->symtree->n.sym->ns->seen_implicit_none == 1))
+ {
+ gfc_free_expr (e);
+ goto syntax;
+ }
if ((e->ref && e->ref->type == REF_ARRAY
&& e->ref->u.ar.type != AR_ELEMENT)