diff options
| author | tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-10-04 07:34:38 +0000 |
|---|---|---|
| committer | tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-10-04 07:34:38 +0000 |
| commit | ce2aba1ed882776f4d24f72838d3698f9ee38d67 (patch) | |
| tree | 5d613f9362d2db5a149669cd486b176bac4e9468 | |
| parent | 3e86138649d78f8ec2b6b9ea22f59b4467d803b9 (diff) | |
| download | ppe42-gcc-ce2aba1ed882776f4d24f72838d3698f9ee38d67.tar.gz ppe42-gcc-ce2aba1ed882776f4d24f72838d3698f9ee38d67.zip | |
PR fortran/33626
fortran/
* resolve.c (resolve_operator): Always copy the type for
expressions in parentheses.
testsuite/
* gfortran.dg/parens_6.f90: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129002 138bc75d-0d04-0410-961f-82ee72b054a4
| -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 327d9a5c0b1..0ebb27cfb27 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 82b50a35a76..82c990d9a9d 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 6a493633916..dc740322949 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 00000000000..5a888a60056 --- /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 |

