diff options
author | Roger Sayle <roger@eyesopen.com> | 2006-02-20 00:34:12 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2006-02-20 00:34:12 +0000 |
commit | 6a34c78895f891207fa2314abe4bd103523f90d1 (patch) | |
tree | 7a2b4312e72d7c2ab8e9e8309209df91039afe1d | |
parent | 3cdab2662d9f2d69b8aa829b63b9c2bc0671a7ea (diff) | |
download | gcc-6a34c78895f891207fa2314abe4bd103523f90d1.zip gcc-6a34c78895f891207fa2314abe4bd103523f90d1.tar.gz gcc-6a34c78895f891207fa2314abe4bd103523f90d1.tar.bz2 |
re PR middle-end/19543 ([4.1 only] fortran LOGICAL*8 not consistently distinguished from 32 bit integers)
PR middle-end/19543
* varasm.c (compare_constant) <INTEGER_CST>: Integer constants are
only equivalent if the have both the same mode and precision.
* gfortran.dg/logical_1.f90: New test case.
From-SVN: r111294
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/logical_1.f90 | 22 | ||||
-rw-r--r-- | gcc/varasm.c | 2 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index afb2bbe..4add31e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-02-19 Roger Sayle <roger@eyesopen.com> + + PR middle-end/19543 + * varasm.c (compare_constant) <INTEGER_CST>: Integer constants are + only equivalent if the have both the same mode and precision. + 2006-02-20 Ben Elliston <bje@au.ibm.com> * doc/tree-ssa.texi (Interfaces): Describe low vs. high GIMPLE. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6b586cd..1c53f178 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-02-19 Roger Sayle <roger@eyesopen.com> + + PR middle-end/19543 + * gfortran.dg/logical_1.f90: New test case. + 2006-02-19 Jakub Jelinek <jakub@redhat.com> PR middle-end/26334 diff --git a/gcc/testsuite/gfortran.dg/logical_1.f90 b/gcc/testsuite/gfortran.dg/logical_1.f90 new file mode 100644 index 0000000..3edc744 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/logical_1.f90 @@ -0,0 +1,22 @@ +! { dg-do run } +! PR middle-end/19543 +program logical_1 + implicit none + logical(1), parameter :: t1 = .TRUE., f1 = .FALSE. + logical(2), parameter :: t2 = .TRUE., f2 = .FALSE. + logical(4), parameter :: t4 = .TRUE., f4 = .FALSE. + logical(8), parameter :: t8 = .TRUE., f8 = .FALSE. + character*2 :: t(4), f(4) + + write(t(1),*) t1 + write(f(1),*) f1 + write(t(2),*) t2 + write(f(2),*) f2 + write(t(3),*) t4 + write(f(3),*) f4 + write(t(4),*) t8 + write(f(4),*) f8 + + if (any(t .ne. " T")) call abort + if (any(f .ne. " F")) call abort +end diff --git a/gcc/varasm.c b/gcc/varasm.c index 9801b1f..ed7bbb6 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -2573,6 +2573,8 @@ compare_constant (const tree t1, const tree t2) /* Integer constants are the same only if the same width of type. */ if (TYPE_PRECISION (TREE_TYPE (t1)) != TYPE_PRECISION (TREE_TYPE (t2))) return 0; + if (TYPE_MODE (TREE_TYPE (t1)) != TYPE_MODE (TREE_TYPE (t2))) + return 0; return tree_int_cst_equal (t1, t2); case REAL_CST: |