diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 3c137ee199f..5e8e7d1b820 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2016-07-30 Steven G. Kargl + + PR fortran/69962 + * decl.c (gfc_set_constant_character_len): if expr is not + constant issue an error instead of an ICE. + 2016-07-30 Steven G. Kargl PR fortran/70006 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 7ff2f0df297..ae68c09f586 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1495,10 +1495,14 @@ gfc_set_constant_character_len (int len, gfc_expr *expr, int check_len) gfc_char_t *s; int slen; - gcc_assert (expr->expr_type == EXPR_CONSTANT); - if (expr->ts.type != BT_CHARACTER) return; + + if (expr->expr_type != EXPR_CONSTANT) + { + gfc_error_now ("CHARACTER length must be a constant at %L", &expr->where); + return; + } slen = expr->value.character.length; if (len != slen) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ead1195b38..73e2258fa29 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-07-30 Steven G. Kargl + + PR fortran/69962 + * gfortran.dg/pr69962.f90: New test. + 2016-07-30 Steven G. Kargl PR fortran/70006 diff --git a/gcc/testsuite/gfortran.dg/pr69962.f90 b/gcc/testsuite/gfortran.dg/pr69962.f90 new file mode 100644 index 00000000000..2684398ee31 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr69962.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +program p + integer :: n = 1 + character(3), parameter :: x(2) = ['abc', 'xyz'] + character(2), parameter :: y(2) = [x(2)(2:3), x(n)(1:2)] ! { dg-error "CHARACTER length must be a constant" } +end