From 9be3684bdd98f40b323958bc5f083c62846fc45b Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Sat, 10 Jan 2009 00:11:18 +0000 Subject: [PATCH] re PR fortran/38765 (ICE in check_host_association) 2009-01-10 Paul Thomas 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 PR fortran/38765 * gfortran.dg/host_assoc_function_6.f90: New test. From-SVN: r143237 --- gcc/fortran/ChangeLog | 7 ++++ gcc/fortran/resolve.c | 4 +-- gcc/testsuite/ChangeLog | 5 +++ .../gfortran.dg/host_assoc_function_6.f90 | 35 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/host_assoc_function_6.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 84b81e2111f..b7d1b99f693 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2009-01-10 Paul Thomas + + 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 PR fortran/38220 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 0cdf40eda9f..3148b0de9ff 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 85c52889733..cadac67aa3b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-01-10 Paul Thomas + + PR fortran/38765 + * gfortran.dg/host_assoc_function_6.f90: New test. + 2009-01-09 Joel Sherrill * lib/target-supports.exp: Add method to determine if the effective diff --git a/gcc/testsuite/gfortran.dg/host_assoc_function_6.f90 b/gcc/testsuite/gfortran.dg/host_assoc_function_6.f90 new file mode 100644 index 00000000000..28cd7c83699 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/host_assoc_function_6.f90 @@ -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 +! 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" } } -- 2.30.2