exp_fixd.adb (Rounded_Result_Set): For multiplication and division of fixed-point...
authorEd Schonberg <schonberg@adacore.com>
Tue, 31 Oct 2006 17:56:09 +0000 (18:56 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 31 Oct 2006 17:56:09 +0000 (18:56 +0100)
2006-10-31  Ed Schonberg  <schonberg@adacore.com>

* exp_fixd.adb (Rounded_Result_Set): For multiplication and division of
fixed-point operations in an integer context, i.e. as operands of a
conversion to an integer type, indicate that result must be rounded.

From-SVN: r118265

gcc/ada/exp_fixd.adb

index fa1f8403ac894fafc83f9731cbb552447d030391..b82d3ad7b4d33f1202ec01ff7b79243db18d08e2 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2005, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2006, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -198,7 +198,7 @@ package body Exp_Fixd is
 
    function Rounded_Result_Set (N : Node_Id) return Boolean;
    --  Returns True if N is a node that contains the Rounded_Result flag
-   --  and if the flag is true.
+   --  and if the flag is true or the target type is an integer type.
 
    procedure Set_Result (N : Node_Id; Expr : Node_Id; Rchk : Boolean := False);
    --  N is the node for the current conversion, division or multiplication
@@ -2329,7 +2329,8 @@ package body Exp_Fixd is
       if (K = N_Type_Conversion or else
           K = N_Op_Divide       or else
           K = N_Op_Multiply)
-        and then Rounded_Result (N)
+        and then
+          (Rounded_Result (N) or else Is_Integer_Type (Etype (N)))
       then
          return True;
       else