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=0.2 required=5.0 tests=BAYES_00,INVALID_MSGID, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,93dce172c8d3e2fb X-Google-Attributes: gid103376,public From: woodruff@tanana.llnl.gov (John Woodruff) Subject: Re: Which compiler is correct? Date: 1997/06/18 Message-ID: #1/1 X-Deja-AN: 249463522 References: <33A77C54.5484@bix.com> Organization: Lawrence Livermore National Lab Reply-To: woodruff1@llnl.gov Newsgroups: comp.lang.ada Date: 1997-06-18T00:00:00+00:00 List-Id: >>>>> "bobduff" == Robert A Duff writes: In article bobduff@world.std.com (Robert A Duff) writes: > In article <33A77C54.5484@bix.com>, Tom Moran > wrote: >> Compilers G and J accept this code. Compiler O gives the error >> message indicted in the comment, on said line. Which is correct >> Ada? (deletia) > The rules for this stuff are somewhat arcane. See 3.4 and 7.3.1. (tacit agreement, followed by a new case:) Here is another inquiry of the type "which compiler is correct." It is so similar to the issue Bob answered for Tom that I retain the thread (and the answer Bob gave is so clear that I imagine that this one will be equally easy to understand once I know the answer.) Let me define a package with a tagged private type: package Parent is type Obj is tagged private ; private type Obj is tagged record I : Integer ; end record ; end Parent ; The package has just one child that extends the type. Depending on the specifics of how I derive the new type, I get correct code or code that evokes an error message that I don't understand: package Parent.Child is type Good_Obj is new Parent.Obj with private ; type Bad_Obj is new Parent.Obj with null record ; procedure Do_Nothing ; -- just to require body private type Good_Obj is new Parent.Obj with null record ; end ; One of the compilers (compiler "r") is able to compile the body without error; the other compiler reports an error in the body when I try to reference the component of the parent type. package body Parent.Child is good : Good_Obj ; Bad : Bad_Obj ; procedure Do_Nothing is begin null; end ; begin Good.I := 2 ; Bad.I := 2 ; -- compiler "g" reports error end ; According to one compiler the component of type Bad_Obj is an "undefined selector". I am unable to think of a reason why the body of the child package can reference the parent's private declaration of Obj for one, but not for the other derived types. -- John Woodruff N I F \ ^ / Lawrence Livermore National Lab =====---- < 0 > 510 422 4661 / v \