diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f9ae961007a416aa37c40a86dc8f3d7763fe4195..a0755f88124e07212bafd953b3ed4701b91ed688 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2008-05-01 Bud Davis <bdavis9659@sbcglobal.net> + + PR35940/Fortran + * simplify.c (gfc_simplify_index): Check for direction argument + being a constant. + 2008-05-01 Janus Weil <jaydub66@gmail.com> * gfortran.h (struct gfc_symbol): Moving "interface" member to diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 62c1cd45aec94a227c287f25e7b4be7e6630b6b7..cde4770a1ecc2e6d0a94f007b68aad7b1f871b76 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -1570,7 +1570,8 @@ gfc_simplify_index (gfc_expr *x, gfc_expr *y, gfc_expr *b, gfc_expr *kind) int back, len, lensub; int i, j, k, count, index = 0, start; - if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT) + if (x->expr_type != EXPR_CONSTANT || y->expr_type != EXPR_CONSTANT + || ( b != NULL && b->expr_type != EXPR_CONSTANT)) return NULL; if (b != NULL && b->value.logical != 0) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c4ef1364b47f49c2c4e1b73f66648baadfdbf320..82d3a4da6cca4dd6faed01582aad323445d2c12f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-05-01 Bud Davis <bdavis9659@sbcglobal.net> + + PR fortran/PR35940 + * gfortran.dg/index.f90: New test. + 2008-05-01 Simon Baldwin <simonb@google.com> * testsuite/gcc.dg/Warray-bounds.c: Updated for frontend warnings, diff --git a/gcc/testsuite/gfortran.dg/index.f90 b/gcc/testsuite/gfortran.dg/index.f90 new file mode 100644 index 0000000000000000000000000000000000000000..58cd25c701ee56c732be24589b6c0495456352c6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/index.f90 @@ -0,0 +1,22 @@ +! { dg-do run } +! pr35940 + program FA1031 + implicit none + integer I + INTEGER IDA1(10) + LOGICAL GDA1(10) + INTEGER RSLT(10) + DATA RSLT /4,1,4,1,4,1,4,1,4,1/ + IDA1 = 0 + gda1 = (/ (i/2*2 .ne. I, i=1,10) /) + + IDA1 = INDEX ( 'DEFDEF' , 'DEF', GDA1 ) !fails + do I = 1, 10 + if (IDA1(i).NE.RSLT(i)) call abort + end do + IDA1 = INDEX ( (/ ('DEFDEF',i=1,10) /) , 'DEF', GDA1 ) !works + do I = 1, 10 + if (IDA1(i).NE.RSLT(i)) call abort + end do + + END