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=1.1 required=3.0 tests=AC_FROM_MANY_DOTS,BAYES_00, T_SCC_BODY_TEXT_LINE autolearn=no 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: Formal Package Compiler Differences Date: Fri, 14 Jul 2023 21:17:13 +0200 Organization: A noiseless patient Spider Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 14 Jul 2023 19:17:13 -0000 (UTC) Injection-Info: dont-email.me; posting-host="4fe757db35c7f68d0f3d5b21fae86dc6"; logging-data="11799"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/Mrxl7PyVF6UXyv84PvOtlAFvRM4Gml/A=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Cancel-Lock: sha1:iq/sgLZBBnYIiEleFH0Fdz25ay0= Content-Language: en-US Xref: news.eternal-september.org comp.lang.ada:65441 List-Id: 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 <>; 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