re PR fortran/13742 (Not Implemented: initial values for COMMON or EQUIVALENCE)
PR fortran/13742 * decl.c (add_init_expr_to_sym): Verify that COMMON variable is not initialized in a disallowed fashion. * match.c (gfc_match_common): Likewise. (var_element): Verify that variable is not in the blank COMMON, if it is in a common. From-SVN: r81899
This commit is contained in:
parent
3a906f0433
commit
c8e20bd093
|
@ -1,3 +1,12 @@
|
|||
2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
|
||||
|
||||
PR fortran/13742
|
||||
* decl.c (add_init_expr_to_sym): Verify that COMMON variable is
|
||||
not initialized in a disallowed fashion.
|
||||
* match.c (gfc_match_common): Likewise.
|
||||
(var_element): Verify that variable is not in the blank COMMON,
|
||||
if it is in a common.
|
||||
|
||||
2004-05-15 Joseph S. Myers <jsm@polyomino.org.uk>
|
||||
|
||||
* Make-lang.in (f95.generated-manpages): Remove.
|
||||
|
|
|
@ -276,6 +276,15 @@ add_init_expr_to_sym (const char *name, gfc_expr ** initp,
|
|||
return FAILURE;
|
||||
}
|
||||
|
||||
if (attr.in_common
|
||||
&& !attr.data
|
||||
&& *initp != NULL)
|
||||
{
|
||||
gfc_error ("Initializer not allowed for COMMON variable '%s' at %C",
|
||||
sym->name);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
if (init == NULL)
|
||||
{
|
||||
/* An initializer is required for PARAMETER declarations. */
|
||||
|
|
|
@ -2338,6 +2338,19 @@ gfc_match_common (void)
|
|||
goto cleanup;
|
||||
}
|
||||
|
||||
if (sym->value != NULL
|
||||
&& (common_name == NULL || !sym->attr.data))
|
||||
{
|
||||
if (common_name == NULL)
|
||||
gfc_error ("Previously initialized symbol '%s' in "
|
||||
"blank COMMON block at %C", sym->name);
|
||||
else
|
||||
gfc_error ("Previously initialized symbol '%s' in "
|
||||
"COMMON block '%s' at %C", sym->name,
|
||||
common_name->name);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (gfc_add_in_common (&sym->attr, NULL) == FAILURE)
|
||||
goto cleanup;
|
||||
|
||||
|
@ -2814,6 +2827,7 @@ static match
|
|||
var_element (gfc_data_variable * new)
|
||||
{
|
||||
match m;
|
||||
gfc_symbol *sym, *t;
|
||||
|
||||
memset (new, '\0', sizeof (gfc_data_variable));
|
||||
|
||||
|
@ -2824,14 +2838,27 @@ var_element (gfc_data_variable * new)
|
|||
if (m != MATCH_YES)
|
||||
return m;
|
||||
|
||||
if (new->expr->symtree->n.sym->value != NULL)
|
||||
sym = new->expr->symtree->n.sym;
|
||||
|
||||
if(sym->value != NULL)
|
||||
{
|
||||
gfc_error ("Variable '%s' at %C already has an initialization",
|
||||
new->expr->symtree->n.sym->name);
|
||||
sym->name);
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
new->expr->symtree->n.sym->attr.data = 1;
|
||||
if (sym->attr.in_common)
|
||||
/* See if sym is in the blank common block. */
|
||||
for (t = sym->ns->blank_common; t; t = t->common_next)
|
||||
if (sym == t)
|
||||
{
|
||||
gfc_error ("DATA statement at %C may not initialize variable "
|
||||
"'%s' from blank COMMON", sym->name);
|
||||
return MATCH_ERROR;
|
||||
}
|
||||
|
||||
sym->attr.data = 1;
|
||||
|
||||
return MATCH_YES;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue