From: Simon Wright <simon@pushface.org>
Subject: Re: GNAT 4.0 strange behaviour
Date: Mon, 12 Sep 2005 06:11:13 +0100
Date: 2005-09-12T06:11:13+01:00 [thread overview]
Message-ID: <m2fysa50r2.fsf@grendel.local> (raw)
In-Reply-To: 1126485412.479800.227880@o13g2000cwo.googlegroups.com
"jimmaureenrogers@worldnet.att.net" <jimmaureenrogers@worldnet.att.net> writes:
> James wrote:
>> This is a very small program compiled under linux debian with gnat 4
>> based on gcc 4.0
>> The output of the program is
>> 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
>> 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>> which is of course not right...
>> If line labelled 1 is removed and replaced by line labelled 2, the
>> output is correct.
>> The output is also correct if part 1 is replaced by part 2.
>> Any advice or place where I could send a bug report?
>>
>> with Text_Io;
>> use Text_Io;
>> with Interfaces;
>> use Interfaces;
>>
>>
>> procedure Toto is
>> type Intboard is new Unsigned_64;
>> for Intboard'Size use 64;
>> type Bit is new Integer range 0..1;
>> for Bit'Size use 1;
>
> You seem to think that Bit is an unsigned type.
> It is not. It is a derived type from Integer, which is a
> signed type.
>
> If you want an unsigned integer with a range of 0..1
> you should declare:
>
> type Bit is mod 2;
>
> Ada unsigned integer types are defined using modular types.
>
> I am willing to bet the answer will improve if you use a
> modular type.
It certainly _changes_ (well, I'm pretty sure it did, but I've been
playing around for a little while, so maybe I got confused ...). As it
does if you add
A_I := 0;
before James's 'part 1' (prints all 0's), or if you change
optimisation level (-O2 gave
0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 1 1 0
). This is 4.0.0 on powerpc-apple-darwin7.9.0.
I think if it was a size problem, there would have been a compilation
error with
type Bitboard is array (0 .. 63) of Bit;
pragma Pack (Bitboard);
for Bitboard'Size use 64;
or come to that with
for Bit'Size use 1;
(remember that Natural'Size is 31).
Looks like a bug. To report bugs, go to http://gcc.gnu.org, there are
links at the bottom on the left.
As a general rule, using overlays like this is not something to be
done casually, Ada.Unchecked_Conversion is usually better. That said,
I've not seen overlays give this sort of problem before.
next prev parent reply other threads:[~2005-09-12 5:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-12 0:02 GNAT 4.0 strange behaviour James
2005-09-12 0:36 ` jimmaureenrogers
2005-09-12 5:11 ` Simon Wright [this message]
2005-09-12 16:11 ` James
2005-09-12 16:16 ` James
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox