Commit e3f62a5a by Mikael Morin

re PR fortran/49074 ([OOP] Defined assignment w/ CLASS arrays: Incomplete error message)

fortran/
	PR fortran/49074
	PR fortran/56136
	* dependency.c (gfc_check_argument_var_dependency): Return 0 in the
	array constructor case.

testsuite/
	PR fortran/49074
	PR fortran/56136
	* gfortran.dg/typebound_assignment_5.f03: Check the absence of any
	packing.
	* gfortran.dg/typebound_assignment_6.f03: New.

From-SVN: r200128
parent 4de09b85
2013-06-15 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/49074
PR fortran/56136
* dependency.c (gfc_check_argument_var_dependency): Return 0 in the
array constructor case.
2013-06-14 Tobias Burnus <burnus@net-b.de>
PR fortran/57508
......
......@@ -990,7 +990,9 @@ gfc_check_argument_var_dependency (gfc_expr *var, sym_intent intent,
return 0;
case EXPR_ARRAY:
return gfc_check_dependency (var, expr, 1);
/* the scalarizer always generates a temporary for array constructors,
so there is no dependency. */
return 0;
case EXPR_FUNCTION:
if (intent != INTENT_IN)
......
2013-06-15 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/49074
PR fortran/56136
* gfortran.dg/typebound_assignment_5.f03: Check the absence of any
packing.
* gfortran.dg/typebound_assignment_6.f03: New.
2013-06-15 Oleg Endo <olegendo@gcc.gnu.org>
* gcc.target/h8300/h8300.exp: New.
......
! { dg-do run }
! { dg-options "-fdump-tree-original" }
!
! PR fortran/49074
! ICE on defined assignment with class arrays.
......@@ -38,3 +39,6 @@
if (any(foobar%i /= [1, 2])) call abort
end program
! { dg-final { scan-tree-dump-not "_gfortran_internal_pack" "original" } }
! { dg-final { scan-tree-dump-not "_gfortran_internal_unpack" "original" } }
! { dg-final { cleanup-tree-dump "original"} }
! { dg-do run }
! { dg-options "-fdump-tree-original" }
!
! PR fortran/56136
! ICE on defined assignment with class arrays.
!
! Original testcase by Alipasha <alipash.celeris@gmail.com>
MODULE A_TEST_M
TYPE :: A_TYPE
INTEGER :: I
CONTAINS
GENERIC :: ASSIGNMENT (=) => ASGN_A
PROCEDURE, PRIVATE :: ASGN_A
END TYPE
CONTAINS
ELEMENTAL SUBROUTINE ASGN_A (A, B)
CLASS (A_TYPE), INTENT (INOUT) :: A
CLASS (A_TYPE), INTENT (IN) :: B
A%I = B%I
END SUBROUTINE
END MODULE A_TEST_M
PROGRAM ASGN_REALLOC_TEST
USE A_TEST_M
TYPE (A_TYPE), ALLOCATABLE :: A(:)
INTEGER :: I, J
ALLOCATE (A(100))
A = (/ (A_TYPE(I), I=1,SIZE(A)) /)
A(1:50) = A(51:100)
IF (ANY(A%I /= (/ ((50+I, I=1,SIZE(A)/2), J=1,2) /))) CALL ABORT
A(::2) = A(1:50) ! pack/unpack
IF (ANY(A( ::2)%I /= (/ (50+I, I=1,SIZE(A)/2) /))) CALL ABORT
IF (ANY(A(2::2)%I /= (/ ((50+2*I, I=1,SIZE(A)/4), J=1,2) /))) CALL ABORT
END PROGRAM
! { dg-final { scan-tree-dump-times "_gfortran_internal_pack" 1 "original" } }
! { dg-final { scan-tree-dump-times "_gfortran_internal_unpack" 1 "original" } }
! { dg-final { cleanup-tree-dump "original" } }
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