From f1a0b754cf8762f602d0f6053579927e9df1dc2f Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Wed, 9 Jun 2010 16:14:08 +0200 Subject: [PATCH] re PR fortran/44211 ([OOP] ICE with TBP of pointer component of derived type array) 2010-06-09 Janus Weil PR fortran/44211 * resolve.c (resolve_typebound_function,resolve_typebound_subroutine): Resolve references. 2010-06-09 Janus Weil PR fortran/44211 * gfortran.dg/typebound_call_14.f03: New test. From-SVN: r160478 --- gcc/fortran/ChangeLog | 6 ++++ gcc/fortran/resolve.c | 6 ++++ gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/typebound_call_14.f03 | 29 +++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/typebound_call_14.f03 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a19f9c6c57d..e1faa4d9fdb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2010-06-09 Janus Weil + + PR fortran/44211 + * resolve.c (resolve_typebound_function,resolve_typebound_subroutine): + Resolve references. + 2010-06-09 Kai Tietz * resolve.c (resolve_deallocate_expr): Avoid warning diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 2ee82afbe5a..8fabf4e69b7 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5415,6 +5415,9 @@ resolve_typebound_function (gfc_expr* e) if (st == NULL) return resolve_compcall (e, NULL); + if (resolve_ref (e) == FAILURE) + return FAILURE; + /* Get the CLASS declared type. */ declared = get_declared_from_expr (&class_ref, &new_ref, e); @@ -5487,6 +5490,9 @@ resolve_typebound_subroutine (gfc_code *code) if (st == NULL) return resolve_typebound_call (code, NULL); + if (resolve_ref (code->expr1) == FAILURE) + return FAILURE; + /* Get the CLASS declared type. */ declared = get_declared_from_expr (&class_ref, &new_ref, code->expr1); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6d4b6f19a00..560e6a47e94 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-09 Janus Weil + + PR fortran/44211 + * gfortran.dg/typebound_call_14.f03: New test. + 2010-06-09 Martin Jambor PR tree-optimization/44423 diff --git a/gcc/testsuite/gfortran.dg/typebound_call_14.f03 b/gcc/testsuite/gfortran.dg/typebound_call_14.f03 new file mode 100644 index 00000000000..e8cbf846e5d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_call_14.f03 @@ -0,0 +1,29 @@ +! { dg-do compile } +! +! PR 44211: [OOP] ICE with TBP of pointer component of derived type array +! +! Original test case by Hans-Werner Boschmann +! Modified by Janus Weil + +module ice_module + type::ice_type + class(ice_type),pointer::next + contains + procedure::ice_sub + procedure::ice_fun + end type ice_type +contains + subroutine ice_sub(this) + class(ice_type)::this + end subroutine + integer function ice_fun(this) + class(ice_type)::this + end function + subroutine ice() + type(ice_type),dimension(2)::ice_array + call ice_array(1)%next%ice_sub() + print *,ice_array(2)%next%ice_fun() + end subroutine +end module ice_module + +! { dg-final { cleanup-modules "ice_module" } } -- 2.30.2