From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on ip-172-31-65-14.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-3.2 required=3.0 tests=BAYES_00,NICE_REPLY_A, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 Path: eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "Jeffrey R.Carter" Newsgroups: comp.lang.ada Subject: Re: Formal Package Compiler Differences Date: Fri, 14 Jul 2023 21:27:34 +0200 Organization: A noiseless patient Spider Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 14 Jul 2023 19:27:34 -0000 (UTC) Injection-Info: dont-email.me; posting-host="4fe757db35c7f68d0f3d5b21fae86dc6"; logging-data="11808"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+PIVRgBL8OwylqXz77c1C47j252IcHirI=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Cancel-Lock: sha1:HNfKvDWLxPmNnrsuZ8NvA3MBjRo= Content-Language: en-US In-Reply-To: Xref: news.eternal-september.org comp.lang.ada:65442 List-Id: On 2023-07-14 21:17, Jeffrey R.Carter wrote: > I have a generic pkg; > > with Ada.Containers.Vectors; > > generic -- Vector_Conversions >    type Index is range <>; >    type Element is private; >    type Fixed is array (Index range <>) of Element; > >    with function "=" (Left : in Element; Right : in Element) return Boolean >    is <>; Oops! This "=" should be removed to get the behavior described. > >    with package Unbounded is new Ada.Containers.Vectors >       (Index_Type => Index, Element_Type => Element); > package Vector_Conversions is >    -- Empty > end Vector_Conversions; > > and an instantiation of > > with Ada.Containers.Vectors; > with Ada.Strings.Unbounded; > with Vector_Conversions; > > procedure Instance_Test is >    use Ada.Strings.Unbounded; > >    package String_Lists is new Ada.Containers.Vectors >       (Index_Type => Positive, Element_Type => Unbounded_String); > >    type String_List is array (Positive range <>) of Unbounded_String; > >    package Conversions is new Vector_Conversions >       (Index     => Positive, >        Element   => Unbounded_String, >        Fixed     => String_List, >        Unbounded => String_Lists); > begin -- Instance_Test >    null; > end Instance_Test; > > Compiler G compiles this and it works fine. > > Compiler O fails to compile the instantiation with the error msg "The subprogram > actuals for the formal package and actual package must statically denote the > same entity", pointing to the Unbounded parameter association and referencing > ARM 12.7(8). If I add an explicit "=" with "is <>" to Vector_Conversions, then > compiler O compiles it and it works fine. > > Possibly one of the compilers has an error, but possibly they're both correct, > and I'm wondering if it's possible to tell which is the case. > > (If anyone is interested, the actual generic pkg where I encountered this is > PragmARC.Conversions.Vectors from the PragmAda Reusable Components > [https://github.com/jrcarter/PragmARC]), and I will supply the actual code that > instantiates it on demand. What I've presented is a first attempt at a minimal > reproducer.) > -- Jeff Carter "Make sure your code 'does nothing' gracefully." Elements of Programming Style 196