comp.lang.ada
 help / color / mirror / Atom feed
From: Ludovic Brenta <ludovic@ludovic-brenta.org>
Subject: Re: Feature or Bug?  2#1111# shifted by 4 is 224
Date: Mon, 02 Jun 2008 19:59:33 +0200
Date: 2008-06-02T19:59:33+02:00	[thread overview]
Message-ID: <873anvk9a2.fsf@ludovic-brenta.org> (raw)
In-Reply-To: 20080602191145.1b75b1ee.tero.koskinen@iki.fi

Tero Koskinen <tero.koskinen@iki.fi> writes:
> 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;

This looks like http://gcc.gnu.org/PR30740 which is fixed in Debian
unstable :)

Could you confirm that this is the same bug indeed?

-- 
Ludovic Brenta.




  reply	other threads:[~2008-06-02 17:59 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
2008-06-02 17:59   ` Ludovic Brenta [this message]
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