OSDN Git Service

2010-12-17 Janus Weil <janus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Dec 2010 12:31:54 +0000 (12:31 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Dec 2010 12:31:54 +0000 (12:31 +0000)
    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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167978 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/block_9.f08 [new file with mode: 0644]

index 2c4de57..960a6e8 100644 (file)
@@ -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
index a27fe2d..7081146 100644 (file)
@@ -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);
index 8cfa5c0..e32bf6e 100644 (file)
@@ -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 (file)
index 0000000..277d1e2
--- /dev/null
@@ -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