diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-04-24 03:48:00 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2008-04-24 03:48:00 +0000 |
commit | 4e77ad242f46c1dcbebca2fc2f63ec4f40269d46 (patch) | |
tree | 04b41bfc43f3809c60b588173402eaaa2104427a /gcc/fortran | |
parent | e50b376d61f67af4baff5522d865ba7630eef454 (diff) | |
download | gcc-4e77ad242f46c1dcbebca2fc2f63ec4f40269d46.zip gcc-4e77ad242f46c1dcbebca2fc2f63ec4f40269d46.tar.gz gcc-4e77ad242f46c1dcbebca2fc2f63ec4f40269d46.tar.bz2 |
re PR fortran/35994 (MAXLOC and MINLOC off by one with mask)
2008-04-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/35994
* trans-instrinsic.c (gfc_conv_intrinsic_minmaxloc): Correctly adjust
loop counter offset.
Co-Authored-By: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
From-SVN: r134615
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 9 |
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index dedc52a..4de64f1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2008-04-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> + Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR fortran/35994 + * trans-instrinsic.c (gfc_conv_intrinsic_minmaxloc): Correctly adjust + loop counter offset. + 2008-04-23 Paolo Bonzini <bonzini@gnu.org> * 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 e832b8a..f3cd4de 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), |