aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Schlüter <tobi@gcc.gnu.org>2007-10-04 09:34:38 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2007-10-04 09:34:38 +0200
commitdcdc83a1857653c02c8997e5787c6a41244bdb95 (patch)
tree5d613f9362d2db5a149669cd486b176bac4e9468 /gcc
parent40700892a05255bcfb07f759cdbe61481e3ed670 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c11
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/parens_6.f9011
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