aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/primary.c7
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0b3d117..1d180a2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2005-06-18 Erik Edelman <eedelman@acclab.helsinki.fi>
+ Steven G. Kargl <kargls@comast.net>
+
+ PR fortran/19926
+ * primary.c (gfc_match_rvalue): expr_type can be EXPR_CONSTANT
+ for an array; check that sym->as is NULL.
+
+
2005-06-18 Steven G. Kargl <kargls@comcast.net>
* intrinsic.c (gfc_intrinsic_func_interface): Enable errors for generic
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 38f9939..e1acfbf 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -1802,8 +1802,11 @@ gfc_match_rvalue (gfc_expr ** result)
break;
case FL_PARAMETER:
- if (sym->value
- && sym->value->expr_type != EXPR_ARRAY)
+ /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
+ end up here. Unfortunately, sym->value->expr_type is set to
+ EXPR_CONSTANT, and so the if () branch would be followed without
+ the !sym->as check. */
+ if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
e = gfc_copy_expr (sym->value);
else
{