mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
backport: re PR fortran/32002 (insufficient conformance check when assigning the result of an elemental function to an array)
gcc/fortran: 2007-07-20 Daniel Franke <franke.daniel@gmail.com> Backport from trunk: PR fortran/32002 * resolve.c (resolve_actual_arglist): Resolve actual argument after being identified as variable. gcc/testsuite: 2007-06-20 Daniel Franke <franke.daniel@gmail.com> Backport from trunk: PR fortran/32002 * gfortran.dg/compliant_elemental_intrinsics_2.f90: New test. From-SVN: r125898
This commit is contained in:
committed by
Daniel Franke
parent
ddba42a335
commit
f3e122bd99
@@ -1,3 +1,10 @@
|
||||
2007-07-20 Daniel Franke <franke.daniel@gmail.com>
|
||||
|
||||
Backport from trunk:
|
||||
PR fortran/32002
|
||||
* resolve.c (resolve_actual_arglist): Resolve actual argument after
|
||||
being identified as variable.
|
||||
|
||||
2007-06-20 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/32302
|
||||
|
||||
@@ -1006,6 +1006,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. */
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
2007-06-20 Daniel Franke <franke.daniel@gmail.com>
|
||||
|
||||
Backport from trunk:
|
||||
PR fortran/32002
|
||||
* gfortran.dg/compliant_elemental_intrinsics_2.f90: New test.
|
||||
|
||||
2007-06-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR inline-asm/32109
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user