Preelaboration Requirements
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# C.4 Preelaboration Requirements

1
This clause specifies additional implementation and documentation requirements for the Preelaborate pragma (see 10.2.1).

#### Implementation Requirements

2
The implementation shall not incur any run-time overhead for the elaboration checks of subprograms and protected_bodies declared in preelaborated library units.
3
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 load time is implementation defined.
4

- Any subtype_mark denotes a statically constrained subtype, with statically constrained subcomponents, if any;

4.1/2

- no subtype_mark 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;

5

- any constraint is a static constraint;

6

- any allocator is for an access-to-constant type;

7

- any uses of predefined operators appear only within static expressions;

8

- any primaries that are names, other than attribute_references for the Access or Address attributes, appear only within static expressions;

9

- any name that is not part of a static expression is an expanded name or direct_name that statically denotes some entity;

10

- any discrete_choice of an array_aggregate is static;

11

- no language-defined check associated with the elaboration of the object_declaration can fail.

#### Documentation Requirements

12
The implementation shall document any circumstances under which the elaboration of a preelaborated package causes code to be executed at run time.
13
The implementation shall document whether the method used for initialization of preelaborated variables allows a partition to be restarted without reloading.

#### Implementation Advice

14
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 Implementation Requirements.

Sponsored by Ada-Europe