13.12 Pragma Restrictions
[A
pragma
Restrictions expresses the user's intent to abide by certain restrictions.
This may facilitate the construction of simpler run-time environments.]
Syntax
The form of a
pragma
Restrictions is as follows:
Name Resolution Rules
{expected type (restriction
parameter expression) [partial]} Unless
otherwise specified for a particular restriction, the
expression
is expected to be of any integer type.
Legality Rules
Unless otherwise specified for a particular restriction,
the
expression
shall be static, and its value shall be nonnegative.
Static Semantics
{
AI95-00394-01}
The set of restrictions is implementation defined.
Implementation defined: The set of restrictions
allowed in a
pragma
Restrictions.
Post-Compilation Rules
{configuration pragma
(Restrictions) [partial]} {pragma,
configuration (Restrictions) [partial]} A
pragma Restrictions
is a configuration pragma; unless otherwise specified for a particular
restriction, a partition shall obey the restriction if a
pragma
Restrictions applies to any compilation unit included in the partition.
{
8652/0042}
{
AI95-00130-01}
For the purpose of checking whether a partition contains constructs that
violate any restriction (unless specified otherwise for a particular
restriction):
{
8652/0042}
{
AI95-00130-01}
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;
{
8652/0042}
{
AI95-00130-01}
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.
Implementation Permissions
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
defined.
Implementation defined: The consequences
of violating limitations on Restrictions
pragmas.
Ramification: Such limitations may be
enforced at compile time or at run time. Alternatively, the implementation
is allowed to declare violations of the restrictions to be erroneous,
and not enforce them at all.
{
8652/0042}
{
AI95-00130-01}
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.
{
8652/0043}
{
AI95-00190-01}
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 {
AI95-00347-01}
Restrictions intended to facilitate the construction of efficient tasking
run-time systems are defined in
D.7. 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.
Discussion: It is not the intent that
an implementation will support a different run-time system for every
possible combination of restrictions. An implementation might support
only two run-time systems, and document a set of restrictions that is
sufficient to allow use of the more efficient and safe one.
Extensions to Ada 83
{
extensions to Ada 83}
Pragma
Restrictions is new to Ada 95.
Wording Changes from Ada 95
{
8652/0042}
{
AI95-00130-01}
Corrigendum: Corrected the wording so that restrictions are checked
inside of generic instantiations and in default expressions. Since not
making these checks would violate the purpose of restrictions, we are
not documenting this as an incompatibility.
{
8652/0043}
{
AI95-00190-01}
Corrigendum: Added a permission that restrictions can be enforced
at compile-time. While this is technically incompatible, documenting
it as such would be unnecessarily alarming - there should not be any
programs depending on the runtime failure of restrictions.