diff options
author | Tobias Schlüter <tobi@gcc.gnu.org> | 2007-10-04 09:34:38 +0200 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2007-10-04 09:34:38 +0200 |
commit | dcdc83a1857653c02c8997e5787c6a41244bdb95 (patch) | |
tree | 5d613f9362d2db5a149669cd486b176bac4e9468 /gcc | |
parent | 40700892a05255bcfb07f759cdbe61481e3ed670 (diff) | |
download | gcc-dcdc83a1857653c02c8997e5787c6a41244bdb95.zip gcc-dcdc83a1857653c02c8997e5787c6a41244bdb95.tar.gz gcc-dcdc83a1857653c02c8997e5787c6a41244bdb95.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/parens_6.f90 | 11 |
4 files changed, 25 insertions, 8 deletions
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 <tobi@gcc.gnu.org> + + PR fortran/33626 + * resolve.c (resolve_operator): Always copy the type for + expressions in parentheses. + 2007-10-04 Paul Thomas <pault@gcc.gnu.org> 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 <tobi@gcc.gnu.org> + + PR fortran/33626 + * gfortran.dg/parens_6.f90: New. + 2007-10-04 Paul Thomas <pault@gcc.gnu.org> 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 |