"The recommended level of support for all representation items is qualified as follows:
An implementation need not support representation items containing nonstatic expressions, except that an implementation should support a representation item for a given entity if each nonstatic expression in the representation item is a name that statically denotes a constant declared before the entity."
Followed. In fact, GNAT goes beyond the recommended level of support by allowing nonstatic expressions in some representation clauses even without the need to declare constants initialized with the values of such expressions. For example:
X : Integer; Y : Float; for Y'Address use X'Address;>> "An implementation need not support a specification for the `Size` for a given composite subtype, nor the size or storage place for an object (including a component) of a given composite subtype, unless the constraints on the subtype and its composite subcomponents (if any) are all static constraints."
Followed. Size Clauses are not permitted on nonstatic components, as described above.
"An aliased component, or a component whose type is by-reference, should always be allocated at an addressable location."