diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-07-04 19:20:46 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-07-04 19:20:46 +0200 |
commit | 258bd5dcfde78204c66bd632f26b347260a2bca1 (patch) | |
tree | 4924aec8c0534d0cb5483fb70e3c6f1b3b2f53d3 /gcc | |
parent | bd5b2c2d0788f7e35b489171d945b35537899255 (diff) | |
download | gcc-258bd5dcfde78204c66bd632f26b347260a2bca1.zip gcc-258bd5dcfde78204c66bd632f26b347260a2bca1.tar.gz gcc-258bd5dcfde78204c66bd632f26b347260a2bca1.tar.bz2 |
trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): For integer maxloc initialize limit to -huge-1 rather than just -huge.
* trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): For integer
maxloc initialize limit to -huge-1 rather than just -huge.
* gfortran.dg/maxloc_1.f90: New test.
From-SVN: r149236
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/maxloc_1.f90 | 14 |
4 files changed, 25 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c109345..6b66cbd 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2009-07-04 Jakub Jelinek <jakub@redhat.com> + + * trans-intrinsic.c (gfc_conv_intrinsic_minmaxloc): For integer + maxloc initialize limit to -huge-1 rather than just -huge. + 2009-07-04 Janus Weil <janus@gcc.gnu.org> PR fortran/40593 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index 21694e4..dd3b3cd 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -2190,12 +2190,12 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, enum tree_code op) possible value is HUGE in both cases. */ if (op == GT_EXPR) tmp = fold_build1 (NEGATE_EXPR, TREE_TYPE (tmp), tmp); - gfc_add_modify (&se->pre, limit, tmp); - if (op == GT_EXPR && expr->ts.type == BT_INTEGER) tmp = fold_build2 (MINUS_EXPR, TREE_TYPE (tmp), tmp, build_int_cst (type, 1)); + gfc_add_modify (&se->pre, limit, tmp); + /* Initialize the scalarizer. */ gfc_init_loopinfo (&loop); gfc_add_ss_to_loop (&loop, arrayss); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 18f515c..1582c88 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-07-04 Jakub Jelinek <jakub@redhat.com> + + * gfortran.dg/maxloc_1.f90: New test. + 2009-07-04 Janus Weil <janus@gcc.gnu.org> PR fortran/40593 diff --git a/gcc/testsuite/gfortran.dg/maxloc_1.f90 b/gcc/testsuite/gfortran.dg/maxloc_1.f90 new file mode 100644 index 0000000..41115ed --- /dev/null +++ b/gcc/testsuite/gfortran.dg/maxloc_1.f90 @@ -0,0 +1,14 @@ +! { dg-do run } + integer :: a(3), n + a(1) = -huge(n) + a(2) = -huge(n) + a(3) = -huge(n) + a(1) = a(1) - 1 + a(2) = a(2) - 1 + a(3) = a(3) - 1 + n = maxloc (a, dim = 1) + if (n .ne. 1) call abort + a(2) = -huge(n) + n = maxloc (a, dim = 1) + if (n .ne. 2) call abort +end |