From: Tero Koskinen <tero.koskinen@iki.fi>
Subject: Re: Feature or Bug? 2#1111# shifted by 4 is 224
Date: Mon, 2 Jun 2008 19:11:45 +0300
Date: 2008-06-02T19:11:45+03:00 [thread overview]
Message-ID: <20080602191145.1b75b1ee.tero.koskinen@iki.fi> (raw)
In-Reply-To: g212u0$fl7$1@aioe.org
On Mon, 02 Jun 2008 17:17:19 +0200 Dennis Hoppe wrote:
> Hi,
>
> we probably found a bug in Ada or we cannot realize, that this is indeed
> a feature ;)
[snip]
>
> In Example B, we limit the parameter N to Positive, because we do not
> want "negative" shifts. The result of Shift_Left(2#1111#, 4) is 224
> (2#11100000#) !
>
> -- Example B
> type Modular_Type is mod 2**4;
> function Shift_Left (Item : in Modular_Type;
> N : in Positive) return Modular_Type is
> begin
> return Item * 2**N;
> end Shift_Left;
>
> Why does this happen?
It is a bug in GCC on i386 platform. I can repeat it with GNAT GPL 2007
and GCC 4.3.0 (OpenBSD/i386). With GCC 4.3.0 optimization flags
(-O2 vs. -O0) seem to affect to the result.
On Solaris (5.10 Generic_127111-05 sun4u sparc SUNW,Sun-Fire-V240) with
GCC 4.2.1 the example returns 0 always.
Here is more complete test case:
with Ada.Text_IO; use Ada.Text_IO;
procedure Shift is
type Modular_Type is mod 2**4;
function Shift_Left (Item : in Modular_Type;
N : in Positive) return Modular_Type is
begin
return Item * (2**N);
end Shift_Left;
X : Modular_Type;
begin
X := Shift_Left(2#1111#, 4);
Put_Line (X'Img);
end Shift;
--
Tero Koskinen - http://iki.fi/tero.koskinen/
next prev parent reply other threads:[~2008-06-02 16:11 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-02 15:17 Feature or Bug? 2#1111# shifted by 4 is 224 Dennis Hoppe
2008-06-02 16:11 ` Tero Koskinen [this message]
2008-06-02 17:59 ` Ludovic Brenta
2008-06-02 18:52 ` Dennis Hoppe
2008-06-03 0:51 ` Jeffrey R. Carter
2008-06-03 4:26 ` Gautier
2008-06-03 19:36 ` Jeffrey R. Carter
2008-06-03 17:56 ` Adam Beneschan
2008-06-03 19:39 ` Jeffrey R. Carter
2008-06-03 8:10 ` Ludovic Brenta
2008-06-03 12:59 ` Samuel Tardieu
2008-06-04 3:36 ` Tero Koskinen
2008-06-02 22:32 ` Gautier
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox