aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFalk Hueffner <falk.hueffner@student.uni-tuebingen.de>2003-03-16 19:43:53 +0000
committerRichard Henderson <rth@gcc.gnu.org>2003-03-16 11:43:53 -0800
commit0a71919d5257d2e9097d79d00d840f4ecfd746c4 (patch)
treeb2938cc461d63e42039bf0d2ef7b462ae30c5c39 /gcc
parent1f5a253a36c2e680af7a627a5077a61fb8afe6b6 (diff)
downloadgcc-0a71919d5257d2e9097d79d00d840f4ecfd746c4.zip
gcc-0a71919d5257d2e9097d79d00d840f4ecfd746c4.tar.gz
gcc-0a71919d5257d2e9097d79d00d840f4ecfd746c4.tar.bz2
re PR target/9164 ([Alpha] improper code generation)
PR target/9164 * tree.c (get_narrower): For extensions with unchanged bit number, return the unsignedness of the outer mode. * gcc.c-torture/execute/20030316-1.c: New test case. From-SVN: r64440
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20030316-1.c12
-rw-r--r--gcc/tree.c3
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ad26846..d7d2eb4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-03-16 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
+
+ PR target/9164
+ * tree.c (get_narrower): For extensions with unchanged bit number,
+ return the unsignedness of the outer mode.
+
2003-03-16 Roger Sayle <roger@eyesopen.com>
* c-typeck.c (build_component_ref): Turn "for" into "do .. while"
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d4558f6..423b43d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-16 Falk Hueffner <falk.hueffner@student.uni-tuebingen.de>
+
+ * gcc.c-torture/execute/20030316-1.c: New test case.
+
2003-03-16 Nathan Sidwell <nathan@codesourcery.com>
PR c++/9629
diff --git a/gcc/testsuite/gcc.c-torture/execute/20030316-1.c b/gcc/testsuite/gcc.c-torture/execute/20030316-1.c
new file mode 100644
index 0000000..bde2e13
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20030316-1.c
@@ -0,0 +1,12 @@
+/* PR target/9164 */
+/* The comparison operand was sign extended erraneously. */
+
+int
+main (void)
+{
+ long j = 0x40000000;
+ if ((unsigned int) (0x40000000 + j) < 0L)
+ abort ();
+
+ return 0;
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index 0130859..30a1c59 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -3958,10 +3958,10 @@ get_narrower (op, unsignedp_ptr)
/* See what's inside this conversion. If we decide to strip it,
we will set WIN. */
- op = TREE_OPERAND (op, 0);
if (bitschange > 0)
{
+ op = TREE_OPERAND (op, 0);
/* An extension: the outermost one can be stripped,
but remember whether it is zero or sign extension. */
if (first)
@@ -3980,6 +3980,7 @@ get_narrower (op, unsignedp_ptr)
if (first)
uns = TREE_UNSIGNED (TREE_TYPE (op));
first = 0;
+ op = TREE_OPERAND (op, 0);
}
win = op;