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-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,b1264e586250f470 X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 2003-07-10 07:12:28 PST Path: archiver1.google.com!postnews1.google.com!not-for-mail From: mheaney@on2.com (Matthew Heaney) Newsgroups: comp.lang.ada Subject: Re: Elaboration of nested generic package. Date: 10 Jul 2003 07:12:27 -0700 Organization: http://groups.google.com/ Message-ID: <1ec946d1.0307100612.20a3d000@posting.google.com> References: <5437fafb.0307071905.5d3bbc4e@posting.google.com> <1ec946d1.0307080946.7e61cda9@posting.google.com> <5437fafb.0307091710.5cb4b0eb@posting.google.com> <3F0CC2D1.10904@attbi.com> NNTP-Posting-Host: 66.162.65.162 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Trace: posting.google.com 1057846348 7090 127.0.0.1 (10 Jul 2003 14:12:28 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: 10 Jul 2003 14:12:28 GMT Xref: archiver1.google.com comp.lang.ada:40167 Date: 2003-07-10T14:12:28+00:00 List-Id: "Robert I. Eachus" wrote in message news:<3F0CC2D1.10904@attbi.com>... > Don Westermeyer wrote: > > > Usually I do use pragma Elaborate_All for every dependancy anyway > > since one does not have control over every software module developed. > > Using it is always safer and causes no penalties that I know of > > (assuming the design stays clear of mutual dependancies). > > This is silly. The reason that Ada doesn't automagically assume > Elaborate_Body or Elaborate_All, is that there is a better assumption. > The implementation knows the potential elaboration issues and is > encouraged to chose one that cannot result in Program_Error. I was talking about library-level instantiations of generic packages. Back in 1997, Bob Duff and Robert Dewar seemed to suggest that you always need Elaborate_All on the generic package: with GP; pragma Elaborate_All (GP); --Do you need this pragma... package P is new GP; --...in order to instantiate? If we're not talking about with'ing a generic package, then I agree that it is silly to use the Elaborate_All on every dependency. It only makes it harder for the compiler to find an acceptable elaboration order, because you have constrained the size of the set of possible orders. You should only use it when the dependent unit calls subprograms provided by the with'd unit during its own elaboration. > Using pragma Elaborate, Elaborate_All, or Elaborate_Body > indiscriminantly can only make the Ada compiler's job harder. There are > two exceptions though. If you know that the subprograms declared in a > package are used before the main program is elaborated, by all means use > Elaborate_All. Yes. I would still like a definitive answer, though. In order to make a library-level package instantiation, do I need to use Elaborate_All on the generic unit? (As in the example above.) Also: do the categorization pragmas in a generic unit make any difference? In other words, you still need to say Elaborate_All, irrespective of what the generic unit says about categorization -- correct?