Commit 1b35264f by Daniel Franke

re PR fortran/32002 (insufficient conformance check when assigning the result of…

re PR fortran/32002 (insufficient conformance check when assigning the result of an elemental function to an array)

gcc/fortran:
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.

From-SVN: r124924
parent 244974bd
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
......
......@@ -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. */
......
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
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment