diff options
author | Louis Krupp <louis.krupp@zoho.com> | 2016-09-22 07:07:53 +0000 |
---|---|---|
committer | Louis Krupp <lkrupp@gcc.gnu.org> | 2016-09-22 07:07:53 +0000 |
commit | 39abef62a17740d59f4bab506c07867cffa7da10 (patch) | |
tree | f65cfe904fdcb00478322717cba41c638b665976 /gcc/fortran/decl.c | |
parent | 41501d1ae708f6977d957b61f797fda15ce33f0b (diff) | |
download | gcc-39abef62a17740d59f4bab506c07867cffa7da10.zip gcc-39abef62a17740d59f4bab506c07867cffa7da10.tar.gz gcc-39abef62a17740d59f4bab506c07867cffa7da10.tar.bz2 |
re PR fortran/66107 (ICE on missing parameter value for initialisation (segfault))
2016-09-21 Louis Krupp <louis.krupp@zoho.com>
PR fortran/66107
* gfortran.dg/pr66107.f90: New test.
2016-09-21 Louis Krupp <louis.krupp@zoho.com>
PR fortran/66107
* decl.c (add_init_expr_to_sym): Catch variable character length
in parameter array.
From-SVN: r240341
Diffstat (limited to 'gcc/fortran/decl.c')
-rw-r--r-- | gcc/fortran/decl.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index d9fae57..2982e86 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1672,7 +1672,18 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus) else if (init->expr_type == EXPR_ARRAY) { if (init->ts.u.cl) - clen = mpz_get_si (init->ts.u.cl->length->value.integer); + { + const gfc_expr *length = init->ts.u.cl->length; + if (length->expr_type != EXPR_CONSTANT) + { + gfc_error ("Cannot initialize parameter array " + "at %L " + "with variable length elements", + &sym->declared_at); + return false; + } + clen = mpz_get_si (length->value.integer); + } else if (init->value.constructor) { gfc_constructor *c; |