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 <ka...@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 <ka...@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" }