diff options
author | Janus Weil <janus@gcc.gnu.org> | 2009-09-11 00:47:03 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2009-09-11 00:47:03 +0200 |
commit | 664e411ba575f984ff229cd412e95bc7ce983100 (patch) | |
tree | c3369db4e5d4a1627fe44ea336860da00d8fc726 | |
parent | 68bcdeed116bbf65cb4ed8a4455cb1d5a40c9f25 (diff) | |
download | gcc-664e411ba575f984ff229cd412e95bc7ce983100.zip gcc-664e411ba575f984ff229cd412e95bc7ce983100.tar.gz gcc-664e411ba575f984ff229cd412e95bc7ce983100.tar.bz2 |
re PR fortran/41242 (PPC call rejected (related to user-defined assignment?))
2009-09-11 Janus Weil <janus@gcc.gnu.org>
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 <janus@gcc.gnu.org>
PR fortran/41242
* gfortran.dg/proc_ptr_comp_21.f90: New.
From-SVN: r151620
-rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 | 28 |
4 files changed, 49 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d134e2c..903f25d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2009-09-11 Janus Weil <janus@gcc.gnu.org> + + 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 <kargl@gcc.gnu.org> PR fortran/31292 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index fd365eb..f208f40 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 7b23648..61ec4ab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-09-11 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41242 + * gfortran.dg/proc_ptr_comp_21.f90: New. + 2009-09-10 Steven G. Kargl <kargl@gcc.gnu.org> 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 0000000..c000896 --- /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 <reuter@physik.uni-freiburg.de> +! Modified by Janus Weil <janus@gcc.gnu.org> + + 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 + |