From 7ca17033382c71cbfe6cd24da017c2c333b114af Mon Sep 17 00:00:00 2001
From: Janus Weil <janus@gcc.gnu.org>
Date: Fri, 17 Dec 2010 13:31:54 +0100
Subject: [PATCH] re PR fortran/46849 ([OOP] MODULE PROCEDURE resolution does
 not work in BLOCK or SELECT TYPE)

2010-12-17  Janus Weil  <janus@gcc.gnu.org>
	    Tobias Burnus <burnus@gcc.gnu.org>

	PR fortran/46849
	* resolve.c (resolve_symbol): Remove symbols that wrongly ended up
	in a local BLOCK namespace.

2010-12-17  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/46849
	* gfortran.dg/block_9.f08: New.

Co-Authored-By: Tobias Burnus <burnus@gcc.gnu.org>

From-SVN: r167978
---
 gcc/fortran/ChangeLog                 |  7 +++++++
 gcc/fortran/resolve.c                 |  4 +++-
 gcc/testsuite/ChangeLog               |  5 +++++
 gcc/testsuite/gfortran.dg/block_9.f08 | 23 +++++++++++++++++++++++
 4 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gfortran.dg/block_9.f08

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 2c4de57e31e8..960a6e883db2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2010-12-17  Janus Weil  <janus@gcc.gnu.org>
+	    Tobias Burnus <burnus@gcc.gnu.org>
+
+	PR fortran/46849
+	* resolve.c (resolve_symbol): Remove symbols that wrongly ended up
+	in a local BLOCK namespace.
+
 2010-12-15  Jakub Jelinek  <jakub@redhat.com>
 
 	PR fortran/46945
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index a27fe2d11b54..70811469f12e 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -11784,7 +11784,9 @@ resolve_symbol (gfc_symbol *sym)
       for (ns = gfc_current_ns->parent; ns; ns = ns->parent)
 	{
 	  symtree = gfc_find_symtree (ns->sym_root, sym->name);
-	  if (symtree && symtree->n.sym->generic)
+	  if (symtree && (symtree->n.sym->generic ||
+			  (symtree->n.sym->attr.flavor == FL_PROCEDURE
+			   && sym->ns->construct_entities)))
 	    {
 	      this_symtree = gfc_find_symtree (gfc_current_ns->sym_root,
 					       sym->name);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8cfa5c0ebfb0..e32bf6e04d0c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-17  Janus Weil  <janus@gcc.gnu.org>
+
+	PR fortran/46849
+	* gfortran.dg/block_9.f08: New.
+
 2010-12-17  Dodji Seketeli  <dodji@redhat.com>
 
 	* g++.dg/debug/dwarf2/self-ref-1.C: New test.
diff --git a/gcc/testsuite/gfortran.dg/block_9.f08 b/gcc/testsuite/gfortran.dg/block_9.f08
new file mode 100644
index 000000000000..277d1e224917
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/block_9.f08
@@ -0,0 +1,23 @@
+! { dg-do compile }
+!
+! PR 46849: [OOP] MODULE PROCEDURE resolution does not work in BLOCK or SELECT TYPE
+!
+! Contributed by Reinhold Bader <bader@lrz.de>
+
+  implicit none
+
+  block
+    call init(fun)
+  end block
+
+contains
+
+  subroutine init(func)
+    real, external :: func
+  end subroutine
+
+  real function fun()
+    fun = 1.1
+  end function
+
+end
-- 
GitLab