comp.lang.ada
 help / color / mirror / Atom feed
From: Blady <p.p11@orange.fr>
Subject: Re: Pack aspect with aliased component.
Date: Thu, 6 Mar 2025 21:52:44 +0100	[thread overview]
Message-ID: <vqd1us$34pkb$1@dont-email.me> (raw)
In-Reply-To: <vq1fma$o9gj$1@dont-email.me>

Le 02/03/2025 à 12:33, Jeffrey R.Carter a écrit :
> On 2025-03-02 10:29, Blady wrote:
>>
>> With the following AARM example:
>> 14.e/3          {AI05-0229-1} procedure Q is
>>                     use P1, P2;
>>                     type Array1 is array(Integer range <>) of aliased S1
>>                        with Pack; -- warning: cannot pack aliased 
>> components (RM 13.2(7))
>>
>> GNAT issues the warning in comment above.
>>
>> Why packed type couldn't have aliased components?
> 
> This is a warning, not an error. The compiler has accepted the 
> declaration and you can use it.
> 
> Remember that Pack is a suggestion to the compiler, not a requirement, 
> and the compiler can ignore it, or pack things less tightly than you 
> might like.
> 
> An aliased component may be accessed through an alias (access value), 
> and that access will not know that the component has been packed, and so 
> access memory belonging to other components as well. For this reason, 
> aliased components cannot be packed.
> 
> You can specify Component_Size for the type; the compiler must either be 
> able to make the components that size, or reject the declaration. 
> Specifying a Component_Size for an aliased component that makes the 
> component smaller than a stand-alone object of the type will be rejected.

Thanks Jeff, your explanation seems to me clearer than the AARM ;)

      reply	other threads:[~2025-03-06 20:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-02  9:29 Pack aspect with aliased component Blady
2025-03-02 11:33 ` Jeffrey R.Carter
2025-03-06 20:52   ` Blady [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