From 1084b6b03b0d5a46541dcce0f422e02a182bc03e Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Tue, 20 Feb 2007 10:16:58 +0100 Subject: [PATCH] re PR fortran/30783 ("character(*), value" produces SEGV at runtime) 2007-02-20 Tobias Burnus PR fortran/30783 * resolve.c (resolve_symbol): Add character dummy VALUE check. From-SVN: r122156 --- gcc/fortran/ChangeLog | 9 +++++++-- gcc/fortran/resolve.c | 14 +++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1f2f26a..aac02b9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2007-02-20 Tobias Burnus + + PR fortran/30783 + * resolve.c (resolve_symbol): Add character dummy VALUE check. + 2007-02-19 Thomas Koenig PR libfortran/30533 @@ -29,8 +34,8 @@ 2007-02-18 Roger Sayle Paul Thomas - PR fortran/30400 - * match.c (match_forall_iterator): Use gfc_match_expr instead + PR fortran/30400 + * match.c (match_forall_iterator): Use gfc_match_expr instead of gfc_match_variable to match the iterator variable. Return MATCH_NO if not a variable. Remove the reset of the symbol's flavor in cleanup. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 84d42ee..8db36b5 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6153,10 +6153,22 @@ resolve_symbol (gfc_symbol *sym) if (sym->attr.value && !sym->attr.dummy) { gfc_error ("'%s' at %L cannot have the VALUE attribute because " - "it is not a dummy", sym->name, &sym->declared_at); + "it is not a dummy argument", sym->name, &sym->declared_at); return; } + if (sym->attr.value && sym->ts.type == BT_CHARACTER) + { + gfc_charlen *cl = sym->ts.cl; + if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT) + { + gfc_error ("Character dummy variable '%s' at %L with VALUE " + "attribute must have constant length", + sym->name, &sym->declared_at); + return; + } + } + /* If a derived type symbol has reached this point, without its type being declared, we have an error. Notice that most conditions that produce undefined derived types have already -- 2.7.4