From dcdc83a1857653c02c8997e5787c6a41244bdb95 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tobias=20Schl=C3=BCter?= Date: Thu, 4 Oct 2007 09:34:38 +0200 Subject: [PATCH] re PR fortran/33626 (Parentheses get wrong kind during matching) PR fortran/33626 fortran/ * resolve.c (resolve_operator): Always copy the type for expressions in parentheses. testsuite/ * gfortran.dg/parens_6.f90: New. From-SVN: r129002 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/resolve.c | 11 +++-------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/parens_6.f90 | 11 +++++++++++ 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/parens_6.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 327d9a5..0ebb27c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-10-04 Tobias Schlüter + + PR fortran/33626 + * resolve.c (resolve_operator): Always copy the type for + expressions in parentheses. + 2007-10-04 Paul Thomas PR fortran/33542 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 82b50a3..82c990d 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2942,6 +2942,9 @@ resolve_operator (gfc_expr *e) goto bad_op; case INTRINSIC_PARENTHESES: + e->ts = op1->ts; + if (e->ts.type == BT_CHARACTER) + e->ts.cl = op1->ts.cl; break; default: @@ -3026,14 +3029,6 @@ resolve_operator (gfc_expr *e) break; case INTRINSIC_PARENTHESES: - - /* This is always correct and sometimes necessary! */ - if (e->ts.type == BT_UNKNOWN) - e->ts = op1->ts; - - if (e->ts.type == BT_CHARACTER && !e->ts.cl) - e->ts.cl = op1->ts.cl; - case INTRINSIC_NOT: case INTRINSIC_UPLUS: case INTRINSIC_UMINUS: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6a49363..dc74032 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-10-04 Tobias Schlüter + + PR fortran/33626 + * gfortran.dg/parens_6.f90: New. + 2007-10-04 Paul Thomas PR fortran/33542 diff --git a/gcc/testsuite/gfortran.dg/parens_6.f90 b/gcc/testsuite/gfortran.dg/parens_6.f90 new file mode 100644 index 0000000..5a888a6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/parens_6.f90 @@ -0,0 +1,11 @@ +! { dg-do run } +! PR fortran/33626 +! Types were not always propagated correctly + logical(kind=1) :: i, j + integer(kind=1) :: a, b + character*1 :: c, d + if (any( (/ kind(i .and. j), kind(.not. (i .and. j)), kind((a + b)), & + kind((42_1)), kind((j .and. i)), kind((.true._1)), & + kind(c // d), kind((c) // d), kind((c//d)) /) /= 1 )) call abort() + if (any( (/ len(c // d), len((c) // d), len ((c // d)) /) /= 2)) call abort() +end -- 2.7.4