From 664e411ba575f984ff229cd412e95bc7ce983100 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Fri, 11 Sep 2009 00:47:03 +0200 Subject: [PATCH] re PR fortran/41242 (PPC call rejected (related to user-defined assignment?)) 2009-09-11 Janus Weil PR fortran/41242 * resolve.c (resolve_ordinary_assign): Don't call resolve_code, to avoid that subsequent codes are resolved more than once. (resolve_code): Make sure that type-bound assignment operators are resolved correctly. 2009-09-11 Janus Weil PR fortran/41242 * gfortran.dg/proc_ptr_comp_21.f90: New. From-SVN: r151620 --- gcc/fortran/ChangeLog | 9 ++++++ gcc/fortran/resolve.c | 9 ++++-- gcc/testsuite/ChangeLog | 5 ++++ .../gfortran.dg/proc_ptr_comp_21.f90 | 28 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d134e2cadcfe..903f25d38980 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2009-09-11 Janus Weil + + PR fortran/41242 + * resolve.c (resolve_ordinary_assign): Don't call resolve_code, + to avoid that subsequent codes are resolved more than once. + (resolve_code): Make sure that type-bound assignment operators are + resolved correctly. + + 2009-09-10 Steven G. Kargl PR fortran/31292 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index fd365eb136a7..f208f406626e 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -6958,7 +6958,6 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns) && (lhs->symtree->n.sym == (*rhsptr)->symtree->n.sym)) *rhsptr = gfc_get_parentheses (*rhsptr); - resolve_code (code, ns); return true; } @@ -7190,7 +7189,12 @@ resolve_code (gfc_code *code, gfc_namespace *ns) break; if (resolve_ordinary_assign (code, ns)) - goto call; + { + if (code->op == EXEC_COMPCALL) + goto compcall; + else + goto call; + } break; @@ -7241,6 +7245,7 @@ resolve_code (gfc_code *code, gfc_namespace *ns) break; case EXEC_COMPCALL: + compcall: resolve_typebound_call (code); break; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7b23648297d5..61ec4ab70b5b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-11 Janus Weil + + PR fortran/41242 + * gfortran.dg/proc_ptr_comp_21.f90: New. + 2009-09-10 Steven G. Kargl PR fortran/31292 diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 new file mode 100644 index 000000000000..c000896d549e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR 41242: [4.5 Regression] PPC call rejected (related to user-defined assignment?) +! +! Original test case by Juergen Reuter +! Modified by Janus Weil + + type :: nf_t + procedure(integer), nopass, pointer :: get_n_in + end type + + interface assignment(=) + procedure op_assign + end interface + + type(nf_t) :: prc_lib + prc_lib = "foobar" + print *, prc_lib%get_n_in() + +contains + + elemental subroutine op_assign (str, ch) + type(nf_t), intent(out) :: str + character(len=*), intent(in) :: ch + end subroutine + +end + -- 2.43.5