aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2009-01-10 00:11:18 +0000
committerPaul Thomas <pault@gcc.gnu.org>2009-01-10 00:11:18 +0000
commit9be3684bdd98f40b323958bc5f083c62846fc45b (patch)
treeb072b2ba7152e78d40188108776d2150ce04ea35 /gcc
parent8b791297bfc5e1dd776fab8ee7b772143838f03a (diff)
downloadgcc-9be3684bdd98f40b323958bc5f083c62846fc45b.zip
gcc-9be3684bdd98f40b323958bc5f083c62846fc45b.tar.gz
gcc-9be3684bdd98f40b323958bc5f083c62846fc45b.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/resolve.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/host_assoc_function_6.f9035
4 files changed, 49 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 84b81e2..b7d1b99 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 0cdf40e..3148b0d 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 85c5288..cadac67 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
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 0000000..28cd7c8
--- /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 <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" } }