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,5b3aa4bc9027f04e X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news2.google.com!news2.google.com!npeer02.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!cyclone1.gnilink.net!gnilink.net!nx01.iad.newshosting.com!newshosting.com!newsfeed.icl.net!newsfeed.fjserv.net!oleane.net!oleane!hunter.axlog.fr!nobody From: Jean-Pierre Rosen Newsgroups: comp.lang.ada Subject: Re: Unconstrained Arrays Date: Fri, 20 Mar 2009 12:40:04 +0100 Organization: Adalog Message-ID: References: <1a8008fb-c840-45bc-824c-d10eec9fe569@d36g2000prf.googlegroups.com> <0caa9cf8-0620-4544-9b2c-2c9f24142b7f@v23g2000pro.googlegroups.com> <386b0e00-a1c6-4c5f-adf7-89b8543d0e2d@c11g2000yqj.googlegroups.com> <46281cbb-2804-41e8-87a0-251c9060d4d1@c36g2000yqn.googlegroups.com> NNTP-Posting-Host: mailhost.axlog.fr Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: s1.news.oleane.net 1237542101 23137 195.25.228.57 (20 Mar 2009 09:41:41 GMT) X-Complaints-To: abuse@oleane.net NNTP-Posting-Date: Fri, 20 Mar 2009 09:41:41 +0000 (UTC) User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) In-Reply-To: <46281cbb-2804-41e8-87a0-251c9060d4d1@c36g2000yqn.googlegroups.com> Xref: g2news2.google.com comp.lang.ada:5174 Date: 2009-03-20T12:40:04+01:00 List-Id: sjw a �crit : > There is a deep language-lawyerly reason (which I don't understand) > why an array like your My_Array can't be aliased (at any rate in > Ada95); you have to use the initialize-with-aggregate approach. > Perhaps that's what leads to the initialize-with-aggregate style. Here is an example: procedure essai is type Acc is access all String; V : Acc; S1 : aliased String := "abcd"; S2 : aliased String (1..4); begin V := S1'Access; V := S2'Access; end; And this is what GNAT says: essai.adb:5:04: warning: aliased object has explicit bounds essai.adb:5:04: warning: declare without bounds (and with explicit initialization) essai.adb:5:04: warning: for use with unconstrained access essai.adb:8:09: object subtype must statically match designated subtype The message is pretty explicit. The underlying reason has to do with dope vectors (i.e. how the bounds of an array are attached to the array). It might be different, depending on whether the array is /declared/ constrained or not (S1 is declared unconstrained, although constrained by initialization). For example, in the constrained case, the array might include a pointer to a structure that describes the subtype, while in the unconstrained case, the array might keep the bounds with the data. Therefore, a pointer to a constrained array is incompatible with a pointer to an unconstrained array. -- --------------------------------------------------------- J-P. Rosen (rosen@adalog.fr) Visit Adalog's web site at http://www.adalog.fr