diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2009-06-29 20:38:59 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2009-06-29 20:38:59 +0000 |
commit | a61a36ab30b7711b5d5cf002d52e6e9514499739 (patch) | |
tree | aca49e7453dd7b8e481ea5b320d8145f0bddc97c /gcc/testsuite/gfortran.dg | |
parent | 96da806615b899b591da751f4bdd3b7507bfdc89 (diff) | |
download | gcc-a61a36ab30b7711b5d5cf002d52e6e9514499739.tar.gz |
re PR fortran/40551 (Optimizations possible using gfc_full_array_ref_p)
2009-06-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/40551
* dependency.h : Add second bool* argument to prototype of
gfc_full_array_ref_p.
* dependency.c (gfc_full_array_ref_p): If second argument is
present, return true if last dimension of reference is an
element or has unity stride.
* trans-array.c : Add NULL second argument to references to
gfc_full_array_ref_p.
* trans-expr.c : The same, except for;
(gfc_trans_arrayfunc_assign): Return fail if lhs reference
is not a full array or a contiguous section.
2009-06-29 Paul Thomas <pault@gcc.gnu.org>
PR fortran/40551
* gfortran.dg/func_assign_2.f90 : New test.
From-SVN: r149062
Diffstat (limited to 'gcc/testsuite/gfortran.dg')
-rw-r--r-- | gcc/testsuite/gfortran.dg/func_assign_2.f90 | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/func_assign_2.f90 b/gcc/testsuite/gfortran.dg/func_assign_2.f90 new file mode 100644 index 00000000000..e308375ef9d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/func_assign_2.f90 @@ -0,0 +1,33 @@ +! { dg-do run } +! Test the fix for PR40551 in which the assignment +! was not dealing correctly with non-contiguous lhs +! references; eg. a(1,:) +! +! Reported by by Maciej Zwierzycki +! at http://gcc.gnu.org/ml/fortran/2009-06/msg00254.html +! and by Tobias Burnus <burnus@gcc.gnu.org> on Bugzilla +! +integer :: a(2,2) +a = -42 +a(1,:) = func() +if (any (reshape (a, [4]) /= [1, -42, 2, -42])) call abort +a = -42 +a(2,:) = func() +if (any (reshape (a, [4]) /= [-42, 1, -42, 2])) call abort +a = -42 +a(:,1) = func() +if (any (reshape (a, [4]) /= [1, 2, -42, -42])) call abort +a = -42 +a(:,2) = func() +if (any (reshape (a, [4]) /= [-42, -42, 1, 2])) call abort +contains + function func() + integer :: func(2) + call sub(func) + end function func + subroutine sub(a) + integer :: a(2) + a = [1,2] + end subroutine +end + |