From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- gcc/testsuite/gfortran.dg/internal_pack_9.f90 | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/internal_pack_9.f90 (limited to 'gcc/testsuite/gfortran.dg/internal_pack_9.f90') diff --git a/gcc/testsuite/gfortran.dg/internal_pack_9.f90 b/gcc/testsuite/gfortran.dg/internal_pack_9.f90 new file mode 100644 index 000000000..6e69745e6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/internal_pack_9.f90 @@ -0,0 +1,41 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! During the discussion of the fix for PR43072, in which unnecessary +! calls to internal PACK/UNPACK were being generated, the following, +! further unnecessary temporaries or PACk/UNPACK were found. +! +! Contributed by Tobias Burnus +! +! Case 1: Substring encompassing the whole string +subroutine foo2 + implicit none + external foo + character(len=20) :: str(2) = '1234567890' + call foo(str(:)(1:20)) ! This is still not fixed. +end + +! Case 2: Contiguous array section +subroutine bar + implicit none + external foo + integer :: a(3,3,3) + call foo(a(:,:,:)) ! OK, no temporary + call foo(a(:,:,1)) ! OK, no temporary + call foo(a(:,2,2)) ! Used unnecessarily a temporary -FIXED + call foo(a(2,:,1)) ! OK, creates a temporary(1) +end + +! Case 3: Stride 1 section. +subroutine foobar + implicit none + external foo + integer :: A(10,10) + call foo(A(3:7,4)) ! Used unnecessarily a temporary - FIXED + call foo(A(:,3:7)) ! OK (no temporary) + call foo(A(1:10,3:7)) ! OK (no temporary) + call foo(A(4,3:7)) ! temporary OK(2) + call foo(A(:,3:7:-1)) ! temporary(3) OK because of stride +end +! { dg-final { scan-tree-dump-times "unpack" 3 "original" } } +! { dg-final { cleanup-tree-dump "original" } } -- cgit v1.2.3