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?
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.
Sysop: | DaiTengu |
---|---|
Location: | Appleton, WI |
Users: | 1,064 |
Nodes: | 10 (0 / 10) |
Uptime: | 150:05:52 |
Calls: | 13,691 |
Calls today: | 1 |
Files: | 186,936 |
D/L today: |
438 files (115M bytes) |
Messages: | 2,410,972 |