OSDN Git Service

PR target/9164
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Mar 2003 19:43:53 +0000 (19:43 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 16 Mar 2003 19:43:53 +0000 (19:43 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@64440 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20030316-1.c [new file with mode: 0644]
gcc/tree.c

index ad26846..d7d2eb4 100644 (file)
@@ -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"
index d4558f6..423b43d 100644 (file)
@@ -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 (file)
index 0000000..bde2e13
--- /dev/null
@@ -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;
+}
index 0130859..30a1c59 100644 (file)
@@ -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;