diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2008-01-15 21:22:07 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2008-01-15 21:22:07 +0000 |
commit | 90469382c09fb5ed5602c30490d117aff172f7c2 (patch) | |
tree | 48e5848dd3732806515c1d1a39309fb7baba909b /gcc | |
parent | ac90ae18fb641f365ce349efbbaf8b88a4f96b8e (diff) | |
download | gcc-90469382c09fb5ed5602c30490d117aff172f7c2.zip gcc-90469382c09fb5ed5602c30490d117aff172f7c2.tar.gz gcc-90469382c09fb5ed5602c30490d117aff172f7c2.tar.bz2 |
re PR libfortran/34671 (any(kind=1) and all(kind=1))
2008-01-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/34671
* gfortran.am: Added _gfortran_all_l1, _gfortran_all_l2,
_gfortran_any_l1, _gfortran_any_l2, -28,15 _gfortran_count_1_l,
_gfortran_count_16_l, _gfortran_count_2_l, _gfortran_count_4_l and
_gfortran_count_8_l Removed _gfortran_count_16_l16,
_gfortran_count_16_l4, _gfortran_count_16_l8,
_gfortran_count_4_l16, _gfortran_count_4_l4, _gfortran_count_4_l8,
_gfortran_count_8_l16, _gfortran_count_8_l4 and
_gfortran_count_8_l8.
* Makefile.am: Added generated/any_l1.c and generated/any_l2.c to
i_any_c. Added generated/all_l1. and generated/all_l2.c to
i_all_c. Removed generated/count_4_l4.c, generated/count_8_l4.c,
generated/count_16_l4.c, generated/count_4_l8.c,
generated/count_8_l8.c, generated/count_16_l8.c,
generated/count_4_l16.c, generated/count_8_l16.c, and
generated/count_16_l16.c from i_count_c. Added count_1_l.c,
count_2_l.c, count_4_l.c, count_8_l.c and count_16_l.c to
i_count_c. I_M4_DEPS2 depends on ifunction_logical.m4, for
any of the files generated from all.m4, any.m4 and count.m4.
* Makefile.in: Regenerated.
* m4/ifunction_logical.m4: New file. Use
GFC_LOGICAL_1 pointer for access to source arrays.
* m4/any.m4: Include ifunction_logical.m4 instead of
ifunction.m4. Don't check atype_name.
* m4/all.m4: Likewise.
* m4/count.m4: Likewise.
* generated/any_l1.c: New file.
* generated/any_l2.c: New file.
* generated/all_l1.c: New file.
* generated/count_1_l.c: New file.
* generated/count_2_l.c: New file.
* generated/count_4_l.c: New file.
* generated/count_8_l.c: New file.
* generated/count_16_l.c: New file.
* generated/any_l4.c: Regenerated.
* generated/any_l8.c: Regenerated.
* generated/any_l16.c: Regenerated.
* generated/all_l4.c: Regenerated.
* generated/all_l8.c: Regenerated.
* generated/all_l16.c: Regenerated.
* generated/count_4_l4.c: Removed.
* generated/count_4_l8.c: Removed.
* generated/count_4_l16.c: Removed.
* generated/count_8_l4.c: Removed.
* generated/count_8_l8.c: Removed.
* generated/count_8_l16.c: Removed.
* generated/count_16_l4.c: Removed.
* generated/count_16_l8.c: Removed.
* generated/count_16_l16.c: Removed.
2008-01-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/34671
* iresolve.c (gfc_resolve_all): Call resolve_mask_arg.
(gfc_resolve_any): Likewise.
(gfc_resolve_count): Likewise. Don't append kind of
argument to function name.
2008-01-15 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/34671
* gfortran.dg/anyallcount_1.f90: New test.
From-SVN: r131553
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/iresolve.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/anyallcount_1.f90 | 71 |
4 files changed, 92 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9c2cc465..d9e28b5 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2008-01-15 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR libfortran/34671 + * iresolve.c (gfc_resolve_all): Call resolve_mask_arg. + (gfc_resolve_any): Likewise. + (gfc_resolve_count): Likewise. Don't append kind of + argument to function name. + 2008-01-13 Tobias Burnus <burnus@net-b.de> PR fortran/34665 diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 8a09efc..bdb4054 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -256,6 +256,8 @@ gfc_resolve_all (gfc_expr *f, gfc_expr *mask, gfc_expr *dim) f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim); } + resolve_mask_arg (mask); + f->value.function.name = gfc_get_string (PREFIX ("all_%c%d"), gfc_type_letter (mask->ts.type), mask->ts.kind); @@ -304,6 +306,8 @@ gfc_resolve_any (gfc_expr *f, gfc_expr *mask, gfc_expr *dim) f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim); } + resolve_mask_arg (mask); + f->value.function.name = gfc_get_string (PREFIX ("any_%c%d"), gfc_type_letter (mask->ts.type), mask->ts.kind); @@ -549,9 +553,11 @@ gfc_resolve_count (gfc_expr *f, gfc_expr *mask, gfc_expr *dim, gfc_expr *kind) f->shape = gfc_copy_shape_excluding (mask->shape, mask->rank, dim); } + resolve_mask_arg (mask); + f->value.function.name - = gfc_get_string (PREFIX ("count_%d_%c%d"), f->ts.kind, - gfc_type_letter (mask->ts.type), mask->ts.kind); + = gfc_get_string (PREFIX ("count_%d_%c"), f->ts.kind, + gfc_type_letter (mask->ts.type)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c9d0e6a..d0c52a2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-15 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR libfortran/34671 + * gfortran.dg/anyallcount_1.f90: New test. + 2008-01-15 Douglas Gregor <doug.gregor@gmail.com> PR c++/34399 diff --git a/gcc/testsuite/gfortran.dg/anyallcount_1.f90 b/gcc/testsuite/gfortran.dg/anyallcount_1.f90 new file mode 100644 index 0000000..9e8c776 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/anyallcount_1.f90 @@ -0,0 +1,71 @@ +! { dg-do run } +program main + character(len=*), parameter :: f='(3L1)' + character(len=*), parameter :: g='(3I1)' + real, dimension(3,3) :: a + logical(kind=1), dimension(3,3) :: m1 + logical(kind=2), dimension(3,3) :: m2 + logical(kind=4), dimension(3,3) :: m4 + logical(kind=8), dimension(3,3) :: m8 + character(len=3) :: res + data a /-1.0, -2.0, -3.0, 2.0, 1.0, -2.1, 1.0, 2.0, 3.0 / + + m1 = a > 0 + m2 = a > 0 + m4 = a > 0 + m8 = a > 0 + + write (unit=res,fmt=f) any(m1,dim=1) + if (res /= 'FTT') call abort + write (unit=res,fmt=f) any(m2,dim=1) + if (res /= 'FTT') call abort + write (unit=res,fmt=f) any(m4,dim=1) + if (res /= 'FTT') call abort + write (unit=res,fmt=f) any(m8,dim=1) + if (res /= 'FTT') call abort + write (unit=res,fmt=f) any(m1,dim=2) + if (res /= 'TTT') call abort + write (unit=res,fmt=f) any(m2,dim=2) + if (res /= 'TTT') call abort + write (unit=res,fmt=f) any(m4,dim=2) + if (res /= 'TTT') call abort + write (unit=res,fmt=f) any(m8,dim=2) + if (res /= 'TTT') call abort + + write (unit=res,fmt=f) all(m1,dim=1) + if (res /= 'FFT') call abort + write (unit=res,fmt=f) all(m2,dim=1) + if (res /= 'FFT') call abort + write (unit=res,fmt=f) all(m4,dim=1) + if (res /= 'FFT') call abort + write (unit=res,fmt=f) all(m8,dim=1) + if (res /= 'FFT') call abort + + write (unit=res,fmt=f) all(m1,dim=2) + if (res /= 'FFF') call abort + write (unit=res,fmt=f) all(m2,dim=2) + if (res /= 'FFF') call abort + write (unit=res,fmt=f) all(m4,dim=2) + if (res /= 'FFF') call abort + write (unit=res,fmt=f) all(m8,dim=2) + if (res /= 'FFF') call abort + + write (unit=res,fmt=g) count(m1,dim=1) + if (res /= '023') call abort + write (unit=res,fmt=g) count(m2,dim=1) + if (res /= '023') call abort + write (unit=res,fmt=g) count(m4,dim=1) + if (res /= '023') call abort + write (unit=res,fmt=g) count(m8,dim=1) + if (res /= '023') call abort + + write (unit=res,fmt=g) count(m1,dim=2) + if (res /= '221') call abort + write (unit=res,fmt=g) count(m2,dim=2) + if (res /= '221') call abort + write (unit=res,fmt=g) count(m4,dim=2) + if (res /= '221') call abort + write (unit=res,fmt=g) count(m8,dim=2) + if (res /= '221') call abort + +end program main |