* fold-const.c (fold_binary) <BIT_IOR_EXPR>: Add missing conversions.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 Mar 2008 15:54:05 +0000 (15:54 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 30 Mar 2008 15:54:05 +0000 (15:54 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133732 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/bit_packed_array2.adb [new file with mode: 0644]

index a008d0d..4d954bf 100644 (file)
@@ -1,3 +1,7 @@
+2008-03-30  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * fold-const.c (fold_binary) <BIT_IOR_EXPR>: Add missing conversions.
+
 2008-03-30  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/31023
index c420b79..6e5d940 100644 (file)
@@ -10425,8 +10425,10 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
        {
          return fold_build1 (BIT_NOT_EXPR, type,
                              build2 (BIT_AND_EXPR, type,
-                                     TREE_OPERAND (arg0, 0),
-                                     TREE_OPERAND (arg1, 0)));
+                                     fold_convert (type,
+                                                   TREE_OPERAND (arg0, 0)),
+                                     fold_convert (type,
+                                                   TREE_OPERAND (arg1, 0))));
        }
 
       /* See if this can be simplified into a rotate first.  If that
index 5b61aee..3124811 100644 (file)
@@ -1,3 +1,7 @@
+2008-03-30  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/bit_packed_array2.adb: New test.
+
 2008-03-30  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/35740
diff --git a/gcc/testsuite/gnat.dg/bit_packed_array2.adb b/gcc/testsuite/gnat.dg/bit_packed_array2.adb
new file mode 100644 (file)
index 0000000..b403122
--- /dev/null
@@ -0,0 +1,19 @@
+-- { dg-do compile }
+-- { dg-options "-gnatws" }
+
+procedure Bit_Packed_Array2 is
+
+  type Bit_Array is array (integer range <>) of Boolean;
+  pragma Pack(Bit_Array);
+
+  b1  : Bit_Array(1..64);
+  b2  : Bit_array(1..64);
+  res : Bit_array(1..64);
+
+begin
+
+  if (not((not b1) or (not b2))) /= res then 
+    null;
+  end if;
+
+end;