aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/testsuite/gfortran.dg/pr98016.f9019
2 files changed, 23 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index b6d21ad..0a8f907 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -15394,8 +15394,12 @@ resolve_symbol (gfc_symbol *sym)
else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function)
{
bool saved_specification_expr = specification_expr;
+ bool saved_formal_arg_flag = formal_arg_flag;
+
specification_expr = true;
+ formal_arg_flag = true;
gfc_resolve_array_spec (sym->result->as, false);
+ formal_arg_flag = saved_formal_arg_flag;
specification_expr = saved_specification_expr;
}
diff --git a/gcc/testsuite/gfortran.dg/pr98016.f90 b/gcc/testsuite/gfortran.dg/pr98016.f90
new file mode 100644
index 0000000..71df67e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr98016.f90
@@ -0,0 +1,19 @@
+! { dg-do compile }
+!
+! Fix for PR98016 - Used to fail with Error: Variable ā€˜nā€™ cannot appear in the
+! expression at (1) for line 16. Workaround was to declare y to be real.
+!
+! Posted by Juergen Reuter <juergen.reuter@desy.de>
+!
+program is_it_valid
+ dimension y(3)
+ n=3
+ y=func(1.0)
+ print *, y
+ stop
+contains
+ function func(x) result (y)
+ dimension y(n)
+ y=x
+ end function
+end