re PR fortran/41242 (PPC call rejected (related to user-defined assignment?))
authorJanus Weil <janus@gcc.gnu.org>
Thu, 10 Sep 2009 22:47:03 +0000 (00:47 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Thu, 10 Sep 2009 22:47:03 +0000 (00:47 +0200)
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

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/proc_ptr_comp_21.f90 [new file with mode: 0644]

index d134e2cadcfe3a9391a96cc1b9e9a15794f1e5a4..903f25d389804381781d80cd72804890a4074e57 100644 (file)
@@ -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
index fd365eb136a79959bbff029e7d0fdaf820aabf36..f208f406626e0586f416fa04dfdec0f7b9bf25ec 100644 (file)
@@ -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;
 
index 7b23648297d5d59b4da18ea41ec711e0759df4a7..61ec4ab70b5bd2a84cefc96e70ad70c37a0ee870 100644 (file)
@@ -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 (file)
index 0000000..c000896
--- /dev/null
@@ -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
+