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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,2d56530d3025e324 X-Google-Attributes: gid103376,public From: Stephen Leake Subject: Re: Program error from assignment?? Date: 1998/07/22 Message-ID: #1/1 X-Deja-AN: 373888634 References: <6p3070$bvn$1@nnrp1.dejanews.com> <6p4skk$j73$1@nnrp1.dejanews.com> Organization: NASA Goddard Space Flight Center -- Greenbelt, Maryland USA Newsgroups: comp.lang.ada Date: 1998-07-22T00:00:00+00:00 List-Id: dennison@telepath.com writes: > Program_Error can happen on this assignment when the accessability level of > the source pointer's object is deeper than that of the target object's type. > That's so I can't keep around a pointer to an object after it goes away. Fair > enough. > > So now this turns into an "accessability level" question. The object that is > pointed to is declared in the declaration section of the main routine. It > exists the entire program. I don't understand the exact rules on accessability > levels, but in my book I should *never* fail an accessability check with this > object. The access type is declared in a package spec. > > T.E.D. The compiler doesn't know that this routine is your main routine, so it assumes it could be called from some other routine; then the accessibility check makes sense. (uh oh; is this an advantage for C "main"? :). You have two options: 1) Declare the object in a library level package (I usually call such a package main_aux.ads or some such). 2) Use 'Unchecked_Access. This situation is pretty much what Unchecked_Access is for; you are telling the compiler that you are smarter than it is (well, at least you promise not to use the pointer after the object goes out of scope :). -- Stephe