diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2009-01-28 21:48:53 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2009-01-28 21:48:53 +0000 |
commit | 61a3961538a6b911e8010eb68332875f61dbbf57 (patch) | |
tree | e13e8efea1b864dfafd2a18c470041a2c15dd1b8 /gcc/fortran | |
parent | 001b9eb6b19df30cceb3e9bddeb7fbec526ff958 (diff) | |
download | gcc-61a3961538a6b911e8010eb68332875f61dbbf57.zip gcc-61a3961538a6b911e8010eb68332875f61dbbf57.tar.gz gcc-61a3961538a6b911e8010eb68332875f61dbbf57.tar.bz2 |
re PR fortran/38852 ([4.3] UBOUND fails for negative stride triplets)
2009-01-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38852
PR fortran/39006
* trans-intrinsic.c (gfc_conv_intrinsic_bound): Use the array
descriptor ubound for UBOUND, when the array lbound == 1.
2009-01-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/38852
PR fortran/39006
* gfortran.dg/bound_6.f90: New test.
From-SVN: r143743
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 7 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6facf64d..1186064 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2009-01-28 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/38852 + PR fortran/39006 + * trans-intrinsic.c (gfc_conv_intrinsic_bound): Use the array + descriptor ubound for UBOUND, when the array lbound == 1. + 2009-01-27 Daniel Kraft <d@domob.eu> PR fortran/38883 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index e3941c5..50b4293 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -972,12 +972,17 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, int upper) cond4 = fold_build2 (LT_EXPR, boolean_type_node, stride, gfc_index_zero_node); - cond4 = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, cond4, cond2); if (upper) { + tree cond5; cond = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, cond3, cond4); + cond5 = fold_build2 (EQ_EXPR, boolean_type_node, gfc_index_one_node, lbound); + cond5 = fold_build2 (TRUTH_AND_EXPR, boolean_type_node, cond4, cond5); + + cond = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, cond, cond5); + se->expr = fold_build3 (COND_EXPR, gfc_array_index_type, cond, ubound, gfc_index_zero_node); } |