From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,4158e4de0999807a X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news1.google.com!newsread.com!newsprint.newsread.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!xindi.nntp.kabelfoon.nl!news.astraweb.com!newsrouter-eu.astraweb.com!proxad.net!193.252.118.146.MISMATCH!news.wanadoo.fr!news.wanadoo.fr!not-for-mail Message-ID: <4325A9CA.3050204@recherche.enac.Fr> Date: Mon, 12 Sep 2005 18:16:10 +0200 From: James User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.10) Gecko/20050802 Debian/1.7.10-1 X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.lang.ada To: James Subject: Re: GNAT 4.0 strange behaviour References: <4324c57b$0$17248$8fcfb975@news.wanadoo.fr> <1126485412.479800.227880@o13g2000cwo.googlegroups.com> <4325a8c7$0$5368$8fcfb975@news.wanadoo.fr> In-Reply-To: <4325a8c7$0$5368$8fcfb975@news.wanadoo.fr> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Organization: les newsgroups par Wanadoo NNTP-Posting-Date: 12 Sep 2005 18:16:11 CEST NNTP-Posting-Host: 82.125.183.234 X-Trace: 1126541771 news.wanadoo.fr 5368 82.125.183.234:32781 X-Complaints-To: abuse@wanadoo.fr Xref: g2news1.google.com comp.lang.ada:4591 Date: 2005-09-12T18:16:11+02:00 List-Id: James wrote: > jimmaureenrogers@worldnet.att.net wrote: > >> 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. >> >> Strictly speaking, the subtypes used in part 1 below do not >> match the subype used in Bitboard array index definition. >> >> The part 1 approach to indexing look suspiciuosly like C coding >> logic. The part 2 approach is closer to a classical Ada. >> >> The most correct and maintainable approach to the looping >> is: >> >> for I in A_B'Range loop >> A_B(I) := 1; >> Put(Bit'Image(A-B(I))); >> end loop; >> >> Clearly your goal is to set each element of A_B to 1 and >> then print a string representation of that element. The >> approack shown above will correctly satisfy that goal even >> if the index range of A_B should change sometime in the >> future due to changes in system requirements. >> >> >>> type Bitboard is array (0..63) of Bit; >>> pragma Pack(Bitboard); >>> for Bitboard'Size use 64; >>> >>> A_B : Bitboard; >>> A_I : Intboard; >>> for A_I'Address use A_B'Address; --label1 >>> -- for A_B'Address use A_I'Address; --label2 >>> >>> begin >>> --part 1 >>> for I in 0 .. 7 loop >>> for J in 0 .. 7 loop >>> A_B(I*8+J) := 1; >>> Put(Bit'Image(A_B(I*8+J))); >>> end loop; >>> end loop; >>> >>> --part 2 >>> -- for I in 0 .. 63 loop >>> -- A_B(I) := 1; >>> -- Put(Bit'Image(A_B(I))); >>> -- end loop; >>> end Toto; >> >> >> >> Jim Rogers >> > Well, in fact in the beginning it was a boolean type. But I followed > your suggestion using modular types and the result is exactly identical... > I must stress the fact that: > 1) I don't use the overlay, I just declare it and never use it. > 2) Part 2 is absolutely identical to part 1 from a semantical point of > view, I just use two loops in part 1 instead of one in part 2, but the > range is exactly the same (0..63). So the result should be the same if > the compiler was working properly according to me, whatever the size, > type or any other thing. > > Any ideas? Well, just a last word: everything is OK with gnat 3.4. So, it's a certainly a bug in gnat 4.0 Thanks