aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/decl.c
diff options
context:
space:
mode:
authorLouis Krupp <louis.krupp@zoho.com>2016-09-22 07:07:53 +0000
committerLouis Krupp <lkrupp@gcc.gnu.org>2016-09-22 07:07:53 +0000
commit39abef62a17740d59f4bab506c07867cffa7da10 (patch)
treef65cfe904fdcb00478322717cba41c638b665976 /gcc/fortran/decl.c
parent41501d1ae708f6977d957b61f797fda15ce33f0b (diff)
downloadgcc-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.c13
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;