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,e5a3abec221df39 X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!postnews.google.com!x16g2000prn.googlegroups.com!not-for-mail From: Jerry Newsgroups: comp.lang.ada Subject: Re: Possible compiler bug with this simple program Date: Thu, 28 Aug 2008 14:29:41 -0700 (PDT) Organization: http://groups.google.com Message-ID: <97b1150b-cb8f-4972-b594-2ae59af84147@x16g2000prn.googlegroups.com> References: <1edc3682-855f-405b-8348-72b423377b1a@i20g2000prf.googlegroups.com> <48b65b3b$0$25384$4f793bc4@news.tdc.fi> NNTP-Posting-Host: 75.171.118.139 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1219958982 30426 127.0.0.1 (28 Aug 2008 21:29:42 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 28 Aug 2008 21:29:42 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: x16g2000prn.googlegroups.com; posting-host=75.171.118.139; posting-account=x5rpZwoAAABMN2XPwcebPWPkebpwQNJG User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/525.18 (KHTML, like Gecko, Safari/525.20) OmniWeb/v622.1.0.104377,gzip(gfe),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:1815 Date: 2008-08-28T14:29:41-07:00 List-Id: On Aug 28, 2:01=A0pm, "Randy Brukardt" wrote: > "Niklas Holsti" wrote in message > > news:48b65b3b$0$25384$4f793bc4@news.tdc.fi... > ... > > > In fact, when an Ada subprogram has an unconstrained array parameter wi= th > > Convention C, it seems to me that the subprogram's body cannot make any > > use of individual elements of the array, because it doesn't know the in= dex > > range, so the compiler should reject any indexing of such an array > > parameter, as well as any attempt to pass it on as a Convention Ada > > parameter. > > This is the subject of AI05-0002-1. (It was carried over from the Ada 95.= ) > [Now, I have to go look this one up because I don't remember anything abo= ut > what we decided...] Ah, yes: > > "We do not require support for C convention interfacing pragmas for > unconstrained > array objects, unconstrained array function results, and most unconstrain= ed > array parameters." > > In particular, "An implementation need not support ... an Export or > Convention pragma applied to a subprogram which has a parameter of an > unconstrained array subtype;". The wording goes on to include unconstrain= ed > array objects and function results as well. > > Note that an implementation *can* support this if it wants; some > implementations do implement this with various meanings (Tucker reported > that their compiler gives the array maximum bounds) and it was thought to= be > bad to break user programs that depend on such behaviors. But if it does > support it, it ought to do something sensible (raising random exceptions > doesn't count). (Also note that it is required to support pragma Import i= n > this case, as C doesn't care about the bounds and they can just be droppe= d.) > > > Conclusion: Your program tries to do something that cannot possibly wor= k, > > but the compiler should have told you so. > > Well, not necessarily (see Tucker's implementation, for instance). But > either it should do something defined *or* reject it at compile-time. > (Janus/Ada would have rejected the Convention pragma.) In any case, it is > not required to support this in any useful way, and, as it is not portabl= e, > it should be avoided. > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0Randy. Thanks, Randy. This is useful. Superficially, in my situation, it appears that GNAT 4.3.0 on OS X PPC supports it and GNAT 4.3.1-2 on Debian lenny on Intel duo does not support it. I suppose there could be an element of dumb luck of GNAT is not supposed to support it and it just happens to work on OS X. On the other hand, if GNAT is supposed to support it then the Debian/ Intel version is broken. The fact that warnings are issued (see my other post today where I actually list the two warnings) indicates that passing unconstrained arrays is supported but the caller had better not screw things up by trying to access outside bounds (which my example handles correctly). If that is the case, it looks like the Debian/Intel box is broken. And yes, portability isn't good, according to your report. FWIW, in the _real_ application that I am working on, plmap is written in C (and accessed from my binding by an Import). Do AdaCore people have any comments on this? Jerry