]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/17036 (ICE: (A >> N) & 1 ? (1 << N) : 0 where A of type unsigned...
authorPaolo Bonzini <bonzini@gcc.gnu.org>
Tue, 17 Aug 2004 07:40:22 +0000 (07:40 +0000)
committerPaolo Bonzini <bonzini@gcc.gnu.org>
Tue, 17 Aug 2004 07:40:22 +0000 (07:40 +0000)
gcc/ChangeLog:
2004-08-17  Paolo Bonzini  <bonzini@gnu.org>

PR middle-end/17036
* fold-const.c (fold): Check for integer operand when
folding (A >> N) & 1 ? (1 << N) : 0.  Fix from Andrew
Pinski  <pinskia@physics.uc.edu>.

gcc/testsuite/ChangeLog:
2004-08-17  Paolo Bonzini  <bonzini@gnu.org>

* gcc.dg/pr17036-1.c: New test.

From-SVN: r86112

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr17036-1.c [new file with mode: 0644]

index 7f581a9f4b433c745721b268d72df14ba48efa52..ece9c7b89c3fe66671f589253d00b05ce7454df3 100644 (file)
@@ -1,3 +1,10 @@
+2004-08-17  Paolo Bonzini  <bonzini@gnu.org>
+
+       PR middle-end/17036
+       * fold-const.c (fold): Check for integer operand when
+       folding (A >> N) & 1 ? (1 << N) : 0.  Fix from Andrew
+       Pinski  <pinskia@physics.uc.edu>.
+
 2004-08-17  Paolo Bonzini  <bonzini@gnu.org>
 
        * configure.ac: Trust toplevel's notion of BISON/FLEX/MAKEINFO.
 2004-08-16  Nathanael Nerode  <neroden@gcc.gnu.org>
 
        * tree-ssa-copyrename.c (copy_rename_partition_coalesce):
-       Check for arificial variables, not is_gimple_tmp_var.
+       Check for artificial variables, not is_gimple_tmp_var.
        * tree-ssa-live.c (var_union): Likewise.
 
->>>>>>> 2.4930
 2004-08-16  Nathan Sidwell  <nathan@codesourcery.com>
 
        * calls.c (load_register_parameters): Remove spurious FIXME token.
index c404613f842b1e3ac914fb1c3e1b3cbc651e2c09..319e455f4336dbbb2806a32eb2c5ef643302c6f8 100644 (file)
@@ -8859,6 +8859,7 @@ fold (tree expr)
          tree tem = TREE_OPERAND (arg0, 0);
          STRIP_NOPS (tem);
          if (TREE_CODE (tem) == RSHIFT_EXPR
+              && TREE_CODE (TREE_OPERAND (tem, 1)) == INTEGER_CST
               && (unsigned HOST_WIDE_INT) tree_log2 (arg1) ==
                 TREE_INT_CST_LOW (TREE_OPERAND (tem, 1)))
            return fold (build2 (BIT_AND_EXPR, type,
index 319fe1da9ec1b7f1b2651efa9b70af914c6c6bab..0f65b7381809f9dc9ebe57c2562df040111f2d22 100644 (file)
@@ -1,3 +1,7 @@
+2004-08-17  Paolo Bonzini  <bonzini@gnu.org>
+
+       * gcc.dg/pr17036-1.c: New test.
+       
 2004-08-16  Devang Patel  <dpatel@apple.com>
 
        * gcc.dg/darwin-20040809-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/pr17036-1.c b/gcc/testsuite/gcc.dg/pr17036-1.c
new file mode 100644 (file)
index 0000000..ea2c9ca
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+
+int main ()
+{
+  int R, N = 4;
+  unsigned int A = 2;
+  signed int B = 2;
+  ((B >> N) & 1) ? 1 : 0;
+  ((A >> N) & 1) ? 1 : 0;
+  return 0;
+}