re PR fortran/45456 ([OOP] Bogus pointer initialization error on pointer-valued TBP)
authorJanus Weil <janus@gcc.gnu.org>
Mon, 30 Aug 2010 21:56:28 +0000 (23:56 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Mon, 30 Aug 2010 21:56:28 +0000 (23:56 +0200)
2010-08-30  Janus Weil  <janus@gcc.gnu.org>

PR fortran/45456
* resolve.c (resolve_structure_cons): Handle pointer-valued PPCs.

2010-08-30  Janus Weil  <janus@gcc.gnu.org>

PR fortran/45456
* gfortran.dg/typebound_proc_18.f03: New.

From-SVN: r163661

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

index d654b36..4e64e84 100644 (file)
@@ -1,3 +1,8 @@
+2010-08-30  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/45456
+       * resolve.c (resolve_structure_cons): Handle pointer-valued PPCs.
+
 2010-08-30  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        * Make-lang.in: Add frontend-passes.o dependencies.
index b9fea23..45696ab 100644 (file)
@@ -1083,7 +1083,8 @@ resolve_structure_cons (gfc_expr *expr, int init)
                     comp->name);
        }
 
-      if (!comp->attr.pointer || cons->expr->expr_type == EXPR_NULL)
+      if (!comp->attr.pointer || comp->attr.proc_pointer
+         || cons->expr->expr_type == EXPR_NULL)
        continue;
 
       a = gfc_expr_attr (cons->expr);
index 65339bd..ed808be 100644 (file)
@@ -1,3 +1,8 @@
+2010-08-30  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/45456
+       * gfortran.dg/typebound_proc_18.f03: New.
+
 2010-08-30  Eric Botcazou  <ebotcazou@adacore.com>
 
        * lib/gcc-dg.exp (cleanup-stack-usage): New procedure.
diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_18.f03 b/gcc/testsuite/gfortran.dg/typebound_proc_18.f03
new file mode 100644 (file)
index 0000000..4ddd178
--- /dev/null
@@ -0,0 +1,29 @@
+! { dg-do compile }
+!
+! PR 45456: [4.6 Regression] [OOP] Bogus pointer initialization error on pointer-valued TBP
+!
+! Contributed by Andrew Benson <abenson@its.caltech.edu>
+
+module Merger_Trees
+  private
+  public :: mergerTree
+
+  type mergerTree
+   contains
+     procedure :: getNode => Tree_Node_Get
+  end type mergerTree
+
+contains
+
+  function Tree_Node_Get(thisTree,nodeIndex) result(foundNode)
+    implicit none
+    class(mergerTree), intent(inout) :: thisTree
+    integer,           intent(in)    :: nodeIndex
+    integer,           pointer       :: foundNode
+
+    return
+  end function Tree_Node_Get
+
+end module Merger_Trees
+
+! { dg-final { cleanup-modules "Merger_Trees" } }