diff options
author | Falk Hueffner <falk.hueffner@student.uni-tuebingen.de> | 2003-03-16 19:43:53 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2003-03-16 11:43:53 -0800 |
commit | 0a71919d5257d2e9097d79d00d840f4ecfd746c4 (patch) | |
tree | b2938cc461d63e42039bf0d2ef7b462ae30c5c39 /gcc | |
parent | 1f5a253a36c2e680af7a627a5077a61fb8afe6b6 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20030316-1.c | 12 | ||||
-rw-r--r-- | gcc/tree.c | 3 |
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; +} @@ -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; |