diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/typebound_proc_18.f03 | 29 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d654b36..4e64e84 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index b9fea23..45696ab 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 65339bd..ed808be 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..4ddd178 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_18.f03 @@ -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" } } |