re PR fortran/38765 (ICE in check_host_association)

2009-01-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/38765
	* resolve.c (check_host_association): Use the symtree name to
	search for a potential contained procedure, since this is the
	name by which it would be referenced.

2009-01-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/38765
	* gfortran.dg/host_assoc_function_6.f90: New test.

From-SVN: r143237
This commit is contained in:
Paul Thomas 2009-01-10 00:11:18 +00:00
parent 8b791297bf
commit 9be3684bdd
4 changed files with 49 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2009-01-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38765
* resolve.c (check_host_association): Use the symtree name to
search for a potential contained procedure, since this is the
name by which it would be referenced.
2009-01-06 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/38220

View File

@ -1,5 +1,5 @@
/* Perform type resolution on the various structures.
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
Contributed by Andy Vaught
@ -4313,7 +4313,7 @@ check_host_association (gfc_expr *e)
if (gfc_current_ns->parent
&& old_sym->ns != gfc_current_ns)
{
gfc_find_symbol (old_sym->name, gfc_current_ns, 1, &sym);
gfc_find_symbol (e->symtree->name, gfc_current_ns, 1, &sym);
if (sym && old_sym != sym
&& sym->ts.type == old_sym->ts.type
&& sym->attr.flavor == FL_PROCEDURE

View File

@ -1,3 +1,8 @@
2009-01-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38765
* gfortran.dg/host_assoc_function_6.f90: New test.
2009-01-09 Joel Sherrill <joel.sherrill@oarcorp.com>
* lib/target-supports.exp: Add method to determine if the effective

View File

@ -0,0 +1,35 @@
! { dg-do compile }
! Tests the fix for PR38765 in which the use associated symbol
! 'fun' was confused with the contained function in 'mod_b'
! because the real name was being used instead of the 'use'
! name..
!
! Contributed by Paul Thomas <pault@gcc.gnu.org>
! from a report by Marco Restelli.
!
module mod_a
implicit none
public :: fun
private
contains
pure function fun(x) result(mu)
real, intent(in) :: x(:,:)
real :: mu(2,2,size(x,2))
mu = 2.0
end function fun
end module mod_a
module mod_b
use mod_a, only: &
a_fun => fun
implicit none
private
contains
pure function fun(x) result(mu)
real, intent(in) :: x(:,:)
real :: mu(2,2,size(x,2))
mu = a_fun(x)
end function fun
end module mod_b
! { dg-final { cleanup-modules "mod_a mod_b" } }