“The recommended level of support for `record_representation_clause's is:
An implementation should support storage places that can be extracted with a load, mask, shift sequence of machine code, and set with a load, shift, mask, store sequence, given the available machine instructions and run-time model.”
“A storage place should be supported if its size is equal to the
Sizeof the component subtype, and it starts and ends on a boundary that obeys the
Alignmentof the component subtype.”
“If the default bit ordering applies to the declaration of a given type, then for a component whose subtype’s
Sizeis less than the word size, any storage place that does not cross an aligned word boundary should be supported.”
“An implementation may reserve a storage place for the tag field of a tagged type, and disallow other components from overlapping that place.”
Followed. The storage place for the tag field is the beginning of the tagged record, and its size is Address’Size. GNAT will reject an explicit component clause for the tag field.
“An implementation need not support a `component_clause' for a component of an extension part if the storage place is not after the storage places of all components of the parent type, whether or not those storage places had been specified.”
Followed. The above advice on record representation clauses is followed, and all mentioned features are implemented.