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,e14364d52e5cbe8d X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!news4.google.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "(see below)" Newsgroups: comp.lang.ada Subject: Re: Elaboration query Date: Fri, 23 Jul 2010 15:52:03 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 8bit X-Trace: individual.net 0vPDXL9SUDiK6oopwOwxawoQANYhsh4ehOKh+8Hzqqk7noPaTE Cancel-Lock: sha1:HqgrqWb6tEBL93jFvGHLBqv8Qwg= User-Agent: Microsoft-Entourage/12.23.0.091001 Thread-Topic: Elaboration query Thread-Index: Acsqdpx6fvB4xcsb+EmeOcVzKtvahA== Xref: g2news1.google.com comp.lang.ada:12499 Date: 2010-07-23T15:52:03+01:00 List-Id: On 23/07/2010 03:10, in article b8dcce8d-979d-4347-a84f-a2a15a318285@m35g2000prn.googlegroups.com, "Adam Beneschan" wrote: > On Jul 22, 5:17�pm, "(see below)" wrote: >> I have a package which is a grandchild, and GNAT issues elaboration warnings >> on its body, thus: >> >> >> >> >> >>> with IOC.shift; pragma Elaborate_All(IOC.shift); >>> package body IOC.shift.TR is >>> ... >>> � �overriding >>> � �procedure Initialize (the_reader : in out IOC.shift.TR.device) is >>> � �begin >>> � � � ... >>> � � � open(...); >>> � � � | >>>>>> info: call to "open" during elaboration >>>>>> info: implicit pragma Elaborate_All for "IO" generated >>>>>> warning: "Initialize" called at line 31 >>>>>> warning: call to "open" in elaboration code requires pragma Elaborate_All >>>>>> on "IO" >>> � �... >>> � �end Initialize; ... >>> end IOC.shift.TR; >> >> The "open" operation it is complaining about is in the the IO package. >> >> The ancestors of IOC.shift.TR begin thus: >> >>> with IOC; pragma Elaborate_All(IOC); >>> package IOC.shift is ... >> >> and: >> >>> with IO; pragma Elaborate_All(IO); >>> package IOC is ... >> >> How do I get rid of the warning? >> >> I cannot put an explicit "pragma Elaborate_All(IO)" in IOC.shift.TR, because >> it does not "with" IO. >> >> Surely I should not have to "with" IO all the way down the parent/child >> hierarchy? What am I doing wrong? > > If you want to reference "IO" in a pragma in the context clause, then > yes, you do have to WITH it in the same context clause. This is > because the visibility rules are different in context clauses. See > 10.1.6, especially 10.1.6(3). I can understand why you think you > "shouldn't have to" do this, because you don't have to do it when > referencing IO inside the child package body. But the rules are > different here. Sorry. Thanks, Adam. BTW the code is part of an emulator for the English Electric KDF9 computer (announced 1960). It's about 19 KSLOC, so a non-trivial Ada 2005 program. See . This week it passed a strenuous test, correctly compiling and running the famous Whetstone Benchmark (which originated, in Algol 60, on the KDF9). Amusingly, the output was validated by also running the test on a virtual ICL 1904A, which dates from about 1970; but the 1904A emulator was written (by Bill Gallagher) in C++. -- Bill Findlay chez blueyonder.co.uk