aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2009-09-11 00:47:03 +0200
committerJanus Weil <janus@gcc.gnu.org>2009-09-11 00:47:03 +0200
commit664e411ba575f984ff229cd412e95bc7ce983100 (patch)
treec3369db4e5d4a1627fe44ea336860da00d8fc726
parent68bcdeed116bbf65cb4ed8a4455cb1d5a40c9f25 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/fortran/resolve.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f9028
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
+