From 4e77ad242f46c1dcbebca2fc2f63ec4f40269d46 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Thu, 24 Apr 2008 03:48:00 +0000 Subject: [PATCH] re PR fortran/35994 (MAXLOC and MINLOC off by one with mask) 2008-04-23 Jerry DeLisle Francois-Xavier Coudert PR fortran/35994 * trans-instrinsic.c (gfc_conv_intrinsic_minmaxloc): Correctly adjust loop counter offset. Co-Authored-By: Francois-Xavier Coudert From-SVN: r134615 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/trans-intrinsic.c | 9 +++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index dedc52ad0e0..4de64f1951d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2008-04-23 Jerry DeLisle + Francois-Xavier Coudert + + PR fortran/35994 + * trans-instrinsic.c (gfc_conv_intrinsic_minmaxloc): Correctly adjust + loop counter offset. + 2008-04-23 Paolo Bonzini * trans-expr.c (gfc_conv_structure): Don't set TREE_INVARIANT. diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index e832b8a30e9..f3cd4de9bca 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -2171,11 +2171,12 @@ gfc_conv_intrinsic_minmaxloc (gfc_se * se, gfc_expr * expr, int op) /* Remember where we are. An offset must be added to the loop counter to obtain the required position. */ - if (loop.temp_dim) - tmp = build_int_cst (gfc_array_index_type, 1); + if (loop.from[0]) + tmp = fold_build2 (MINUS_EXPR, gfc_array_index_type, + gfc_index_one_node, loop.from[0]); else - tmp =fold_build2 (MINUS_EXPR, gfc_array_index_type, - gfc_index_one_node, loop.from[0]); + tmp = build_int_cst (gfc_array_index_type, 1); + gfc_add_modify_expr (&block, offset, tmp); tmp = fold_build2 (PLUS_EXPR, TREE_TYPE (pos), -- 2.30.2