OSDN Git Service

gcc/fortran:
authordfranke <dfranke@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 May 2007 22:24:55 +0000 (22:24 +0000)
committerdfranke <dfranke@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 May 2007 22:24:55 +0000 (22:24 +0000)
2005-05-21  Jerry DeLisle  <jvdelisle@verizon.net>
            Daniel Franke  <franke.daniel@gmail.com>

PR fortran/32002
        * resolve.c (resolve_actual_arglist): Resolve actual argument after
        being identified as variable.

gcc/testsuite:
2005-05-21  Daniel Franke  <franke.daniel@gmail.com>

PR fortran/32002
        * gfortran.dg/compliant_elemental_intrinsics_2.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124924 138bc75d-0d04-0410-961f-82ee72b054a4

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

index ab99113..10bcc08 100644 (file)
@@ -1,3 +1,10 @@
+2005-05-21  Jerry DeLisle  <jvdelisle@verizon.net>
+           Daniel Franke  <franke.daniel@gmail.com>
+
+       PR fortran/32002
+       * resolve.c (resolve_actual_arglist): Resolve actual argument after
+       being identified as variable.
+
 2007-05-21  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR fortran/32027
index b6d1f3b..746d41b 100644 (file)
@@ -1013,6 +1013,13 @@ resolve_actual_arglist (gfc_actual_arglist *arg, procedure_type ptype)
          e->ref->u.ar.as = sym->as;
        }
 
+      /* Expressions are assigned a default ts.type of BT_PROCEDURE in
+        primary.c (match_actual_arg). If above code determines that it
+        is a  variable instead, it needs to be resolved as it was not
+        done at the beginning of this function.  */
+      if (gfc_resolve_expr (e) != SUCCESS)
+       return FAILURE;
+
     argument_list:
       /* Check argument list functions %VAL, %LOC and %REF.  There is
         nothing to do for %REF.  */
index 6de884b..c08db44 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-21  Daniel Franke  <franke.daniel@gmail.com>
+
+       PR fortran/32002
+       * gfortran.dg/compliant_elemental_intrinsics_2.f90: New test.
+
 2007-05-21  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        PR fortran/32027
diff --git a/gcc/testsuite/gfortran.dg/compliant_elemental_intrinsics_2.f90 b/gcc/testsuite/gfortran.dg/compliant_elemental_intrinsics_2.f90
new file mode 100644 (file)
index 0000000..ab5607f
--- /dev/null
@@ -0,0 +1,44 @@
+! { dg-compile }
+!
+! Testcases from PR32002.
+!
+PROGRAM test_pr32002
+
+  CALL test_1()                       ! scalar/vector
+  CALL test_2()                       ! vector/vector
+  CALL test_3()                       ! matrix/vector
+  CALL test_4()                       ! matrix/matrix
+
+CONTAINS
+  ELEMENTAL FUNCTION f(x)
+    INTEGER, INTENT(in) :: x
+    INTEGER :: f
+    f = x
+  END FUNCTION
+
+  SUBROUTINE test_1()
+    INTEGER :: a = 0, b(2) = 0
+    a = f(b)                          ! { dg-error "Incompatible ranks" }
+    b = f(a)                          ! ok, set all array elements to f(a)
+  END SUBROUTINE
+
+  SUBROUTINE test_2()
+    INTEGER :: a(2) = 0, b(3) = 0
+    a = f(b)                          ! { dg-error "different shape" }
+    a = f(b(1:2))                     ! ok, slice, stride 1
+    a = f(b(1:3:2))                   ! ok, slice, stride 2
+  END SUBROUTINE
+
+  SUBROUTINE test_3()
+    INTEGER :: a(4) = 0, b(2,2) = 0
+    a = f(b)                          ! { dg-error "Incompatible ranks" }
+    a = f(RESHAPE(b, (/ 4 /)))        ! ok, same shape
+  END SUBROUTINE
+
+  SUBROUTINE test_4()
+    INTEGER :: a(2,2) = 0, b(3,3) = 0
+    a = f(b)                          ! { dg-error "different shape" }
+    a = f(b(1:3, 1:2))                ! { dg-error "different shape" }
+    a = f(b(1:3:2, 1:3:2))            ! ok, same shape
+  END SUBROUTINE
+END PROGRAM