diff mbox series

PR fortran/84346 -- Keywords invalid in statement functions

Message ID 20180222224259.GA50937@troutmask.apl.washington.edu
State New
Headers show
Series PR fortran/84346 -- Keywords invalid in statement functions | expand

Commit Message

Steve Kargl Feb. 22, 2018, 10:42 p.m. UTC
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.

Comments

Thomas Koenig Feb. 23, 2018, 6:05 a.m. UTC | #1
Hi Steve,

> 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?

OK.

Thanks for the patch!

Regards

	Thomas
diff mbox series

Patch

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" }