From: "Jeffrey R.Carter" <spam.jrcarter.not@spam.acm.org.not>
Subject: Re: Formal Package Compiler Differences
Date: Fri, 14 Jul 2023 21:27:34 +0200 [thread overview]
Message-ID: <u8s7j6$bh0$1@dont-email.me> (raw)
In-Reply-To: <u8s6vp$bgn$1@dont-email.me>
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
prev parent reply other threads:[~2023-07-14 19:27 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-14 19:17 Formal Package Compiler Differences Jeffrey R.Carter
2023-07-14 19:27 ` Jeffrey R.Carter [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox