Commit 911a40ab by Paul Thomas

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
parent b9302915
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> 2006-11-26 Francois-Xavier Coudert <coudert@clipper.ens.fr>
PR fortran/29892 PR fortran/29892
......
...@@ -5523,7 +5523,9 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) ...@@ -5523,7 +5523,9 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
return FAILURE; return FAILURE;
st = gfc_find_symtree (gfc_current_ns->sym_root, sym->name); 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", gfc_error ("Procedure %s at %L is ambiguous",
sym->name, &sym->declared_at); sym->name, &sym->declared_at);
......
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> 2006-11-28 Ben Elliston <bje@au.ibm.com>
* lib/gcc-defs.exp (${tool}_check_compile): xfail test cases that * lib/gcc-defs.exp (${tool}_check_compile): xfail test cases that
...@@ -18,14 +18,25 @@ interface ...@@ -18,14 +18,25 @@ interface
end interface end interface
end module end module
! This is the original PR module test_mod2
subroutine my_sub (a) ! { dg-error "is ambiguous" } 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 use test_mod
real a real a
call my_sub (a) ! { dg-error "ambiguous reference" }
print *, a print *, a
end subroutine end subroutine
integer function my_fun (a) ! { dg-error "is ambiguous" } integer function my_fun (a)
use test_mod use test_mod
real a real a
print *, a print *, a
...@@ -42,4 +53,17 @@ subroutine thy_sub (a) ...@@ -42,4 +53,17 @@ subroutine thy_sub (a)
real a real a
print *, a print *, a
end subroutine 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" } } ! { dg-final { cleanup-modules "test_mod" } }
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