aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2008-09-28 15:12:07 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2008-09-28 15:12:07 +0000
commit58760a81d720022370380a3607548e7d48e9ea83 (patch)
treeff78e41067c16ff05944e5571c26cfb14b13bbfb /gcc
parent86cfb27a7d6f38b1138ad376738ec6690dfe2e8b (diff)
downloadgcc-58760a81d720022370380a3607548e7d48e9ea83.zip
gcc-58760a81d720022370380a3607548e7d48e9ea83.tar.gz
gcc-58760a81d720022370380a3607548e7d48e9ea83.tar.bz2
re PR middle-end/36575 (ACATS c460011 fails at -O3)
PR middle-end/36575 * fold-const (div_and_round_double) <ROUND_DIV_EXPR>: Fix typo. From-SVN: r140734
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/fold-const.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/conv_decimal.adb34
4 files changed, 45 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9fc7ae..e0405f6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2008-09-28 Eric Botcazou <ebotcazou@adacore.com>
+ PR middle-end/36575
+ * fold-const (div_and_round_double) <ROUND_DIV_EXPR>: Fix typo.
+
+2008-09-28 Eric Botcazou <ebotcazou@adacore.com>
+
* expmed.c (store_fixed_bit_field): Always use convert_to_mode in
order to convert between modes.
(extract_bit_field_1): Test TRULY_NOOP_TRUNCATION on the right mode.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 2c822b5..0ce122a 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -835,7 +835,7 @@ div_and_round_double (enum tree_code code, int uns,
if (hden < 0)
neg_double (lden, hden, &labs_den, &habs_den);
- /* If (2 * abs (lrem) >= abs (lden)) */
+ /* If (2 * abs (lrem) >= abs (lden)), adjust the quotient. */
mul_double ((HOST_WIDE_INT) 2, (HOST_WIDE_INT) 0,
labs_rem, habs_rem, &ltwice, &htwice);
@@ -843,7 +843,7 @@ div_and_round_double (enum tree_code code, int uns,
< (unsigned HOST_WIDE_INT) htwice)
|| (((unsigned HOST_WIDE_INT) habs_den
== (unsigned HOST_WIDE_INT) htwice)
- && (labs_den < ltwice)))
+ && (labs_den <= ltwice)))
{
if (*hquo < 0)
/* quo = quo - 1; */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cc430ac..41ba8dc 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2008-09-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/conv_decimal.adb: New test.
+
2008-09-26 Jakub Jelinek <jakub@redhat.com>
PR middle-end/37275
diff --git a/gcc/testsuite/gnat.dg/conv_decimal.adb b/gcc/testsuite/gnat.dg/conv_decimal.adb
new file mode 100644
index 0000000..d5199c1
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/conv_decimal.adb
@@ -0,0 +1,34 @@
+-- PR middle-end/36575
+-- reporter: Laurent Guerby <laurent@guerby.net>
+-- { dg-do run }
+
+procedure Conv_Decimal is
+
+ type Unsigned_Over_8 is mod 2**8+2;
+ type Signed_Over_8 is range -200 .. 200;
+
+ procedure Assert(Truth: Boolean) is
+ begin
+ if not Truth then
+ raise Program_Error;
+ end if;
+ end;
+
+ type Decim is delta 0.1 digits 5;
+
+ Halfway : Decim := 2.5;
+ Neg_Half : Decim := -2.5;
+
+ Big : Unsigned_Over_8;
+ Also_Big : Signed_Over_8;
+
+begin
+ Big := Unsigned_Over_8 (Halfway); -- Rounds up by 4.6(33).
+ Assert(Big = 3);
+
+ Also_Big := Signed_Over_8 (Halfway); -- Rounds up by 4.6(33).
+ Assert(Also_Big = 3);
+
+ Also_Big := Signed_Over_8 (Neg_Half); -- Rounds down by 4.6(33).
+ Assert(Also_Big = -3);
+end;