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,feb9db77c9b5b310 X-Google-Attributes: gid103376,public From: jvl@ocsystems.com (Joel VanLaven) Subject: Re: Access to Unconstrained Arrays Date: 1997/04/21 Message-ID: <1997Apr21.005646.25460@ocsystems.com>#1/1 X-Deja-AN: 236244341 References: <335507B4.7A03@boeing.com> <3357B77F.44EE@boeing.com> Organization: OC Systems, Inc. Newsgroups: comp.lang.ada Date: 1997-04-21T00:00:00+00:00 List-Id: John Harbaugh (john.s.harbaugh2@boeing.com) wrote: : John Harbaugh wrote: : > : > When trying to pass pointers to objects of unconstrained array type, I : > am getting confusing compiler errors. For example: : > [snipped old code] : > List1 should be an anonymous constrained subtype of type Lists. I was : > under the impression that subtypes are simply a subset of their base : > type. Is this not the case for constrained subtypes of unconstrained : > types? : > : > Thanks in advance for any who may respond. : > : > - John : How embarrasing, please excuse the mangled code. What I meant to show : was: : procedure Main is : type Lists is array(Natural range <>) of Integer; : type Lists_Ptrs is access all Lists; : : procedure Do_Something(To : in Lists_Ptrs) is separate; : : List1 : aliased Lists(1..4) := (1,2,3,4); : List2 : aliased Lists := (1,2,3,4); : Ptr : Lists_Ptrs; : : begin : Ptr := List1'access; : Do_Something(To => Ptr); -- Compilation Error. Why? : Ptr := List2'access; : Do_Something(To => Ptr); -- No problemo!!! : end Main; : Apparently, the problem is that Lists(1..4) is a different subtype : indication than Lists. I agree with you that this code ought to compile. In fact, our compiler does compile your code without error or warning. Attempting to resolve the conflict between this fact and Robert Dewar's comments, I did a bit of Reference Manual snooping and found the following: RM95: 3.10(14) "The first subtype of a type defined by an access_type_definition or an access_to_object_definition is unconstrained if the designated subtype is an unconstrained array or discriminated type; otherwise it is constrained." So, the first subtype of Lists_Ptrs is an unconstrained access subtype. RM95 3.10(15) "An access value satisfies a composite_constraint of an access subtype if it equals the null value of its type or if it designates an object whose value satisfies the constraint." So, don't both list1'access and list2'access satisfy the (non-existant) composite_constraint of the first subtype of lists_ptr? Making both assignments valid, right? If someone says not, could you explain why not? (hopefully chapter and verse of the rm :) -- -- Joel VanLaven