]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c/20187 (wrong code for ((unsigned char)(unsigned long long)((a?a:1)&(a*b)...
authorRichard Sandiford <richard@codesourcery.com>
Thu, 28 Jul 2005 16:34:42 +0000 (16:34 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 28 Jul 2005 16:34:42 +0000 (16:34 +0000)
PR c/20187
* fold-const.c (fold): When shortening comparisons of widened operands,
check whether the tree returned by get_unwidened really is wider.

From-SVN: r102495

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog

index ec9f065d9b21c86c0405a5fefad5ae88aabef215..017127f472691e14f1eeb9bf4059715910d3fd00 100644 (file)
@@ -1,3 +1,9 @@
+2005-07-28  Richard Sandiford  <richard@codesourcery.com>
+
+       PR c/20187
+       * fold-const.c (fold): When shortening comparisons of widened operands,
+       check whether the tree returned by get_unwidened really is wider.
+
 2005-07-28  Richard Sandiford  <richard@codesourcery.com>
 
        PR c/22589
index 64b0b51e11c80c280eb403ab6eacbdf6b27f4b53..bcc7dcdebbb48bdca46cdfa2702969d6dd590b03 100644 (file)
@@ -7500,6 +7500,8 @@ fold (tree expr)
       else if (TREE_CODE (TREE_TYPE (arg0)) == INTEGER_TYPE
               && TREE_CODE (arg0) == NOP_EXPR
               && (tem = get_unwidened (arg0, NULL_TREE)) != arg0
+              && (TYPE_PRECISION (TREE_TYPE (tem))
+                  > TYPE_PRECISION (TREE_TYPE (arg0)))
               && (code == EQ_EXPR || code == NE_EXPR
                   || TREE_UNSIGNED (TREE_TYPE (arg0))
                      == TREE_UNSIGNED (TREE_TYPE (tem)))
index 696d97664c3978c81534771d5589f387fd95c844..e9f90da27348f4f5ceaa024e63246e988be39031 100644 (file)
@@ -1,3 +1,8 @@
+2005-07-28  Richard Sandiford  <richard@codesourcery.com>
+
+       PR c/20187
+       * gcc.c-torture/execute/pr20187-1.c: New test.
+
 2005-07-28  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
 
        Backport: