aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2006-02-20 00:34:12 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2006-02-20 00:34:12 +0000
commit6a34c78895f891207fa2314abe4bd103523f90d1 (patch)
tree7a2b4312e72d7c2ab8e9e8309209df91039afe1d
parent3cdab2662d9f2d69b8aa829b63b9c2bc0671a7ea (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/logical_1.f9022
-rw-r--r--gcc/varasm.c2
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: