13.12 Pragma Restrictions
Restrictions expresses the user's intent to abide by certain restrictions.
This may facilitate the construction of simpler run-time environments.
The form of
is as follows:
Name Resolution Rules
Unless otherwise specified for
a particular restriction, the expression
is expected to be of any integer type.
Unless otherwise specified for a particular restriction,
shall be static, and its value shall be nonnegative.
The set of restrictions is implementation defined.
Restrictions is a configuration pragma; unless otherwise specified for
a particular restriction, a partition shall obey the restriction if a
applies to any compilation unit included in the partition.
For the purpose of
checking whether a partition contains constructs that violate any restriction
(unless specified otherwise for a particular restriction):
- Generic instances are logically expanded
at the point of instantiation;
- If an object of a type is declared
or allocated and not explicitly initialized, then all expressions appearing
in the definition for the type and any of its ancestors are presumed
to be used;
- A default_expression
for a formal parameter or a generic formal object is considered to be
used if and only if the corresponding actual parameter is not provided
in a given call or instantiation.
An implementation may place limitations on the values
of the expression
that are supported, and limitations on the supported combinations of
restrictions. The consequences of violating such limitations are implementation
An implementation is permitted to omit restriction
checks for code that is recognized at compile time to be unreachable
and for which no code is generated.
Whenever enforcement of a restriction is not required
prior to execution, an implementation may nevertheless enforce the restriction
prior to execution of a partition to which the restriction applies, provided
that every execution of the partition would violate the restriction.
29 Restrictions intended to facilitate
the construction of efficient tasking run-time systems are defined in
. Restrictions intended for use when constructing
high integrity systems are defined in H.4
30 An implementation has to enforce the
restrictions in cases where enforcement is required, even if it chooses
not to take advantage of the restrictions in terms of efficiency.