aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>2004-05-15 20:02:20 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2004-05-15 20:02:20 +0200
commitd663434b6cd9ae8cbaac50a8c1dcff317594184d (patch)
treea2f7e67e6e38ab33d08e077762d35c4386c5e8b1 /gcc/fortran
parentf437e359921603b19e22c44b44f6bb64c199b04f (diff)
downloadgcc-d663434b6cd9ae8cbaac50a8c1dcff317594184d.zip
gcc-d663434b6cd9ae8cbaac50a8c1dcff317594184d.tar.gz
gcc-d663434b6cd9ae8cbaac50a8c1dcff317594184d.tar.bz2
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
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog11
-rw-r--r--gcc/fortran/match.c5
-rw-r--r--gcc/fortran/match.h1
-rw-r--r--gcc/fortran/primary.c6
4 files changed, 18 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index a1542b5..16ea447 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,15 @@
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
(Port from g95)
* gfortran.h (gfc_linebuf): New typedef.
@@ -47,7 +57,6 @@
preprocessor flags.
(all): Add missing initializers.
-
2004-05-15 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
* Make-lang.in (trans-common.o): Remove redundant dependency.
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index dc8dc3e..1b2b763 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -2907,12 +2907,15 @@ match_data_constant (gfc_expr ** result)
if (gfc_find_symbol (name, NULL, 1, &sym))
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",
name);
return MATCH_ERROR;
}
+ else if (sym->attr.flavor == FL_DERIVED)
+ return gfc_match_structure_constructor (sym, result);
*result = gfc_copy_expr (sym->value);
return MATCH_YES;
diff --git a/gcc/fortran/match.h b/gcc/fortran/match.h
index 25e551c..6cff5cc 100644
--- a/gcc/fortran/match.h
+++ b/gcc/fortran/match.h
@@ -120,6 +120,7 @@ match gfc_match_modproc (void);
match gfc_match_target (void);
/* primary.c */
+match gfc_match_structure_constructor (gfc_symbol *, gfc_expr **);
match gfc_match_rvalue (gfc_expr **);
match gfc_match_variable (gfc_expr **, int);
match gfc_match_actual_arglist (int, gfc_actual_arglist **);
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 03e9757..d10a462 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -1747,8 +1747,8 @@ gfc_expr_attr (gfc_expr * e)
/* Match a structure constructor. The initial symbol has already been
seen. */
-static match
-match_structure_constructor (gfc_symbol * sym, gfc_expr ** result)
+match
+gfc_match_structure_constructor (gfc_symbol * sym, gfc_expr ** result)
{
gfc_constructor *head, *tail;
gfc_component *comp;
@@ -1908,7 +1908,7 @@ gfc_match_rvalue (gfc_expr ** result)
if (sym == NULL)
m = MATCH_ERROR;
else
- m = match_structure_constructor (sym, &e);
+ m = gfc_match_structure_constructor (sym, &e);
break;
/* If we're here, then the name is known to be the name of a