Commit d663434b by Tobias Schlüter Committed by Tobias Schlüter

re PR fortran/13826 (Derived types in DATA statements not PARAMETERs)

fortran:
PR fortran/13826
* primary.c (match_structure_constructor): Rename ...
(gfc_match_structure_constructor): ... to this. Make non-static.
(gfc_match_rvalue): Call renamed function.
* match.h (gfc_match_structure_constructor): Declare.
* match.c (gfc_match_data_constant): Handle structure
constructor.

testsuite:
PR fortran/13826
* gfortran.fortran-torture/compile/data_1.f90: New test.

From-SVN: r81891
parent f437e359
2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> 2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/13826
* primary.c (match_structure_constructor): Rename ...
(gfc_match_structure_constructor): ... to this. Make non-static.
(gfc_match_rvalue): Call renamed function.
* match.h (gfc_match_structure_constructor): Declare.
* match.c (gfc_match_data_constant): Handle structure
constructor.
2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/13702 PR fortran/13702
(Port from g95) (Port from g95)
* gfortran.h (gfc_linebuf): New typedef. * gfortran.h (gfc_linebuf): New typedef.
...@@ -47,7 +57,6 @@ ...@@ -47,7 +57,6 @@
preprocessor flags. preprocessor flags.
(all): Add missing initializers. (all): Add missing initializers.
2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> 2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
* Make-lang.in (trans-common.o): Remove redundant dependency. * Make-lang.in (trans-common.o): Remove redundant dependency.
......
...@@ -2907,12 +2907,15 @@ match_data_constant (gfc_expr ** result) ...@@ -2907,12 +2907,15 @@ match_data_constant (gfc_expr ** result)
if (gfc_find_symbol (name, NULL, 1, &sym)) if (gfc_find_symbol (name, NULL, 1, &sym))
return MATCH_ERROR; return MATCH_ERROR;
if (sym == NULL || sym->attr.flavor != FL_PARAMETER) if (sym == NULL
|| (sym->attr.flavor != FL_PARAMETER && sym->attr.flavor != FL_DERIVED))
{ {
gfc_error ("Symbol '%s' must be a PARAMETER in DATA statement at %C", gfc_error ("Symbol '%s' must be a PARAMETER in DATA statement at %C",
name); name);
return MATCH_ERROR; return MATCH_ERROR;
} }
else if (sym->attr.flavor == FL_DERIVED)
return gfc_match_structure_constructor (sym, result);
*result = gfc_copy_expr (sym->value); *result = gfc_copy_expr (sym->value);
return MATCH_YES; return MATCH_YES;
......
...@@ -120,6 +120,7 @@ match gfc_match_modproc (void); ...@@ -120,6 +120,7 @@ match gfc_match_modproc (void);
match gfc_match_target (void); match gfc_match_target (void);
/* primary.c */ /* primary.c */
match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **);
match gfc_match_rvalue (gfc_expr **); match gfc_match_rvalue (gfc_expr **);
match gfc_match_variable (gfc_expr **, int); match gfc_match_variable (gfc_expr **, int);
match gfc_match_actual_arglist (int, gfc_actual_arglist **); match gfc_match_actual_arglist (int, gfc_actual_arglist **);
......
...@@ -1747,8 +1747,8 @@ gfc_expr_attr (gfc_expr * e) ...@@ -1747,8 +1747,8 @@ gfc_expr_attr (gfc_expr * e)
/* Match a structure constructor. The initial symbol has already been /* Match a structure constructor. The initial symbol has already been
seen. */ seen. */
static match match
match_structure_constructor (gfc_symbol * sym, gfc_expr ** result) gfc_match_structure_constructor (gfc_symbol * sym, gfc_expr ** result)
{ {
gfc_constructor *head, *tail; gfc_constructor *head, *tail;
gfc_component *comp; gfc_component *comp;
...@@ -1908,7 +1908,7 @@ gfc_match_rvalue (gfc_expr ** result) ...@@ -1908,7 +1908,7 @@ gfc_match_rvalue (gfc_expr ** result)
if (sym == NULL) if (sym == NULL)
m = MATCH_ERROR; m = MATCH_ERROR;
else else
m = match_structure_constructor (sym, &e); m = gfc_match_structure_constructor (sym, &e);
break; break;
/* If we're here, then the name is known to be the name of a /* If we're here, then the name is known to be the name of a
......
2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/13826
* gfortran.fortran-torture/compile/data_1.f90: New test.
2004-05-15 Ulrich Weigand <uweigand@de.ibm.com> 2004-05-15 Ulrich Weigand <uweigand@de.ibm.com>
* gcc.dg/const-elim-1.c: Remove XFAIL for s390*-*-*. * gcc.dg/const-elim-1.c: Remove XFAIL for s390*-*-*.
......
! this tests the fix for PR 13826
TYPE a
REAL x
END TYPE
TYPE(a) :: y
DATA y /a(1.)/ ! used to give an error about non-PARAMETER
END
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