Commit c0f0e35a by Jerry DeLisle

re PR fortran/50555 (synonymous namelist/statement function dummy argument not allowed (r178939))

2016-02-07  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR fortran/50555
	* primary.c (match_actual_arg): If symbol has attribute flavor of
	namelist, generate an error. (gfc_match_rvalue): Likewise return
	MATCH_ERROR.
	* resolve.c (resolve_symbol): Scan arument list of procedures and
	generate an error if a namelist is found.

	PR fortran/50555
	* gfortran.dg/namelist_args.f90: New test.

From-SVN: r233203
parent fc7d77bb
2016-02-07 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/50555
* primary.c (match_actual_arg): If symbol has attribute flavor of
namelist, generate an error. (gfc_match_rvalue): Likewise return
MATCH_ERROR.
* resolve.c (resolve_symbol): Scan arument list of procedures and
generate an error if a namelist is found.
2016-02-05 Mikael Morin <mikael@gcc.gnu.org> 2016-02-05 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/66089 PR fortran/66089
......
...@@ -1552,6 +1552,12 @@ match_actual_arg (gfc_expr **result) ...@@ -1552,6 +1552,12 @@ match_actual_arg (gfc_expr **result)
sym = symtree->n.sym; sym = symtree->n.sym;
gfc_set_sym_referenced (sym); gfc_set_sym_referenced (sym);
if (sym->attr.flavor == FL_NAMELIST)
{
gfc_error ("Namelist '%s' can not be an argument at %L",
sym->name, &where);
break;
}
if (sym->attr.flavor != FL_PROCEDURE if (sym->attr.flavor != FL_PROCEDURE
&& sym->attr.flavor != FL_UNKNOWN) && sym->attr.flavor != FL_UNKNOWN)
break; break;
...@@ -3219,6 +3225,10 @@ gfc_match_rvalue (gfc_expr **result) ...@@ -3219,6 +3225,10 @@ gfc_match_rvalue (gfc_expr **result)
m = gfc_match_actual_arglist (0, &e->value.function.actual); m = gfc_match_actual_arglist (0, &e->value.function.actual);
break; break;
case FL_NAMELIST:
m = MATCH_ERROR;
break;
default: default:
gfc_error ("Symbol at %C is not appropriate for an expression"); gfc_error ("Symbol at %C is not appropriate for an expression");
return MATCH_ERROR; return MATCH_ERROR;
......
...@@ -14226,6 +14226,21 @@ resolve_symbol (gfc_symbol *sym) ...@@ -14226,6 +14226,21 @@ resolve_symbol (gfc_symbol *sym)
break; break;
case FL_PROCEDURE: case FL_PROCEDURE:
if (sym->formal && !sym->formal_ns)
{
/* Check that none of the arguments are a namelist. */
gfc_formal_arglist *formal = sym->formal;
for (; formal; formal = formal->next)
if (formal->sym && formal->sym->attr.flavor == FL_NAMELIST)
{
gfc_error ("Namelist '%s' can not be an argument to "
"subroutine or function at %L",
formal->sym->name, &sym->declared_at);
return;
}
}
if (!resolve_fl_procedure (sym, mp_flag)) if (!resolve_fl_procedure (sym, mp_flag))
return; return;
break; break;
......
2016-02-07 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/50555
* gfortran.dg/namelist_args.f90: New test.
2016-02-05 Jeff Law <law@redhat.com> 2016-02-05 Jeff Law <law@redhat.com>
PR tree-optimization/68541 PR tree-optimization/68541
......
! { dg-do compile }
! { dg-options -std=gnu }
! PR50555 synonymous namelist/statement function dummy argument not allowed
subroutine g(k1, k2, k3)
integer, intent(in) :: k1, k2, k3
print *, k
end subroutine
function j(k1, k2, k3)
integer, intent(in) :: k1, k2, k3
j = 25 * k
end function
program pr50555
namelist /i/ j
call g(k,l,i) ! { dg-error "can not be an argument" }
f(k,l,i)=0 ! { dg-error "can not be an argument" }
h = j(k,l,i) ! { dg-error "can not be an argument" }
end program
! Note: -std=gnu needed because line 15 function statement is obsolescent
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment