comp.lang.ada
 help / color / mirror / Atom feed
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.



  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