C.4 Preelaboration Requirements
This subclause specifies additional implementation
and documentation requirements for the Preelaborate pragma (see 10.2.1
The implementation shall not incur any run-time overhead
for the elaboration checks of subprograms and protected_bodies
declared in preelaborated library units.
The implementation shall not execute any memory write
operations after load time for the elaboration of constant objects declared
immediately within the declarative region of a preelaborated library
package, so long as the subtype and initial expression (or default initial
expressions if initialized by default) of the object_declaration
satisfy the following restrictions.
The meaning of
is implementation defined.
denotes a statically constrained subtype, with statically constrained
subcomponents, if any;
denotes a controlled type, a private type, a private extension, a generic
formal private type, a generic formal derived type, or a descendant of
such a type;
is for an access-to-constant type;
any uses of predefined operators appear only within
for the Access or Address attributes, appear only within static expressions;
that is not part of a static expression is an expanded name or direct_name
that statically denotes some entity;
no language-defined check associated with the elaboration
of the object_declaration
The implementation shall document any circumstances
under which the elaboration of a preelaborated package causes code to
be executed at run time.
The implementation shall document whether the method
used for initialization of preelaborated variables allows a partition
to be restarted without reloading.
It is recommended that preelaborated packages be
implemented in such a way that there should be little or no code executed
at run time for the elaboration of entities not already covered by the
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe