Commit 1084b6b0 by Tobias Burnus

re PR fortran/30783 ("character(*), value" produces SEGV at runtime)

2007-02-20  Tobias Burnus  <burnus@net-b.de>

       PR fortran/30783
       * resolve.c (resolve_symbol): Add character dummy VALUE check.

From-SVN: r122156
parent c88b0c50
2007-02-20 Tobias Burnus <burnus@net-b.de>
PR fortran/30783
* resolve.c (resolve_symbol): Add character dummy VALUE check.
2007-02-19 Thomas Koenig <Thomas.Koenig@online.de> 2007-02-19 Thomas Koenig <Thomas.Koenig@online.de>
PR libfortran/30533 PR libfortran/30533
...@@ -29,8 +34,8 @@ ...@@ -29,8 +34,8 @@
2007-02-18 Roger Sayle <roger@eyesopen.com> 2007-02-18 Roger Sayle <roger@eyesopen.com>
Paul Thomas <pault@gcc.gnu.org> Paul Thomas <pault@gcc.gnu.org>
PR fortran/30400 PR fortran/30400
* match.c (match_forall_iterator): Use gfc_match_expr instead * match.c (match_forall_iterator): Use gfc_match_expr instead
of gfc_match_variable to match the iterator variable. Return of gfc_match_variable to match the iterator variable. Return
MATCH_NO if not a variable. Remove the reset of the symbol's MATCH_NO if not a variable. Remove the reset of the symbol's
flavor in cleanup. flavor in cleanup.
......
...@@ -6153,10 +6153,22 @@ resolve_symbol (gfc_symbol *sym) ...@@ -6153,10 +6153,22 @@ resolve_symbol (gfc_symbol *sym)
if (sym->attr.value && !sym->attr.dummy) if (sym->attr.value && !sym->attr.dummy)
{ {
gfc_error ("'%s' at %L cannot have the VALUE attribute because " 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; 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 /* If a derived type symbol has reached this point, without its
type being declared, we have an error. Notice that most type being declared, we have an error. Notice that most
conditions that produce undefined derived types have already conditions that produce undefined derived types have already
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment