This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] PR fortran/84346 -- Keywords invalid in statement functions


The attached patch fixes PR fortran/84346.  A statement
function always has an implicit interface.  The use of
keywords in a function with an implicit interface is 
invalid.  Regression tested on x86_64-*-freebsd.  OK
to commit?

2018-02-22  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/84346
	* interface.c (compare_actual_formal): Issue error if keyword is
	used in a statement function.

2018-02-22  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/84346
	* gfortran.dg/statement_function_1.f90: Update test.

-- 
Steve
Index: gcc/fortran/interface.c
===================================================================
--- gcc/fortran/interface.c	(revision 257695)
+++ gcc/fortran/interface.c	(working copy)
@@ -2865,6 +2865,13 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_fo
 
   for (a = actual; a; a = a->next, f = f->next)
     {
+      if (a->name != NULL && in_statement_function)
+	{
+	  gfc_error ("Keyword argument %qs at %L is invalid in "
+		     "a statement function", a->name, &a->expr->where);
+	  return false;
+	}
+
       /* Look for keywords but ignore g77 extensions like %VAL.  */
       if (a->name != NULL && a->name[0] != '%')
 	{
Index: gcc/testsuite/gfortran.dg/statement_function_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/statement_function_1.f90	(revision 257695)
+++ gcc/testsuite/gfortran.dg/statement_function_1.f90	(working copy)
@@ -19,10 +19,6 @@
       qofs(s, i) = i * s
       i = 42
       w = qofs(hh, i)
-!
-! The following line should cause an error, because keywords are not
-! allowed in a function with an implicit interface.
-!
-      w = qofs(i = i, s = hh)
+      w = qofs(i = i, s = hh) ! { dg-error "invalid in a statement function" }
       end subroutine step
 ! { dg-prune-output " Obsolescent feature" }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]