re PR fortran/20880 (USE association of procedure's own interface)

2006-11-28  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/20880
	* resolve.c (resolve_fl_procedure): Error if procedure is
	ambiguous modified to require attr.referenced.

2006-11-28  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/20880
	* gfortran.dg/interface_3.f90: Modify errors.

From-SVN: r119272
This commit is contained in:
Paul Thomas 2006-11-28 05:36:07 +00:00
parent b930291501
commit 911a40abe0
4 changed files with 41 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2006-11-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/20880
* resolve.c (resolve_fl_procedure): Error if procedure is
ambiguous modified to require attr.referenced.
2006-11-26 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR fortran/29892

View File

@ -5523,7 +5523,9 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
return FAILURE;
st = gfc_find_symtree (gfc_current_ns->sym_root, sym->name);
if (st && st->ambiguous && !sym->attr.generic)
if (st && st->ambiguous
&& sym->attr.referenced
&& !sym->attr.generic)
{
gfc_error ("Procedure %s at %L is ambiguous",
sym->name, &sym->declared_at);

View File

@ -1,3 +1,8 @@
2006-11-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/20880
* gfortran.dg/interface_3.f90: Modify errors.
2006-11-28 Ben Elliston <bje@au.ibm.com>
* lib/gcc-defs.exp (${tool}_check_compile): xfail test cases that

View File

@ -18,14 +18,25 @@ interface
end interface
end module
! This is the original PR
subroutine my_sub (a) ! { dg-error "is ambiguous" }
module test_mod2
interface
function my_fun (a)
real a, my_fun
end function
end interface
end module
! This is the original PR, excepting that the error requires the symbol
! to be referenced.
subroutine my_sub (a)
use test_mod
real a
call my_sub (a) ! { dg-error "ambiguous reference" }
print *, a
end subroutine
integer function my_fun (a) ! { dg-error "is ambiguous" }
integer function my_fun (a)
use test_mod
real a
print *, a
@ -42,4 +53,17 @@ subroutine thy_sub (a)
real a
print *, a
end subroutine
subroutine thy_fun (a)
use test_mod
use test_mod2 ! OK because there is no reference to my_fun
print *, a
end subroutine thy_fun
subroutine his_fun (a)
use test_mod
use test_mod2
print *, my_fun (a) ! { dg-error "ambiguous reference" }
end subroutine his_fun
! { dg-final { cleanup-modules "test_mod" } }