From 8f0e26718e5a9e8c2609741f6c89994040c96cf7 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 30 Mar 2008 15:54:05 +0000 Subject: [PATCH] fold-const.c (fold_binary): Add missing conversions. * fold-const.c (fold_binary) : Add missing conversions. From-SVN: r133732 --- gcc/ChangeLog | 4 ++++ gcc/fold-const.c | 6 ++++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/bit_packed_array2.adb | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/bit_packed_array2.adb diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a008d0dcfed..4d954bf12a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2008-03-30 Eric Botcazou + + * fold-const.c (fold_binary) : Add missing conversions. + 2008-03-30 Richard Guenther PR middle-end/31023 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index c420b79b75c..6e5d9403e70 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b61aee5536..3124811858d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-03-30 Eric Botcazou + + * gnat.dg/bit_packed_array2.adb: New test. + 2008-03-30 Paul Thomas 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 index 00000000000..b403122f5f1 --- /dev/null +++ b/gcc/testsuite/gnat.dg/bit_packed_array2.adb @@ -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; -- 2.30.2