13.12 Pragma Restrictions and Pragma ProfilePragma Restrictions
1/3
{
AI05-0246-1}
[A
pragma
Restrictions expresses the user's intent to abide by certain restrictions.
A pragma Profile
expresses the user's intent to abide by a set of Restrictions or other
specified run-time policies. These This
may facilitate the construction of simpler run-time environments.]
Syntax
2
The form of a
pragma
Restrictions is as follows:
3
4/2
4.1/2
Name Resolution Rules
5
Unless otherwise specified for
a particular restriction, the
expression
is expected to be of any integer type.
Legality Rules
6
Unless otherwise specified for a particular restriction,
the
expression
shall be static, and its value shall be nonnegative.
Static Semantics
7/2
{
AI95-00394-01}
The set of
restrictions restrictions
is implementation defined.
7.a/2
Implementation defined: The set of
restrictions restrictions
allowed in a
pragma
Restrictions.
Post-Compilation Rules
8/3
{
AI05-0013-1}
A
pragma Restrictions
is a configuration pragma
. If a pragma
Restrictions applies to any compilation unit included in the partition,
this may impose either (or both) of two kinds of requirements, as;
unless otherwise specified for
the a
particular restriction
:,
a partition shall obey the restriction if a pragma
Restrictions applies to any compilation unit included in the partition.
8.1/3
{
AI05-0013-1}
A restriction may impose requirements on some or
all of the units comprising the partition. Unless otherwise specified
for a particular restriction, such a requirement applies to all of the
units comprising the partition and is enforced via a post-compilation
check.
8.2/3
{
AI05-0013-1}
A restriction may impose requirements on the runtime
behavior of the program, as indicated by the specification of runtime
behavior associated with a violation of the requirement.
8.a.1/3
Ramification: In
this latter case, there is no post-compilation check needed for the requirement.
8.3/1
{
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):
8.4/1
8.5/1
{
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;
8.6/1
{
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
9
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.
9.a
Implementation defined: The consequences
of violating limitations on Restrictions
pragmas.
9.b
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.
9.1/1
{
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.
9.2/1
{
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.
Syntax
10/3
11/3
Legality Rules
12/3
Static Semantics
13/3
{
AI95-00249-01}
{
AI05-0246-1}
A profile is equivalent to the set of configuration
pragmas that is defined for each usage profile.
Post-Compilation Rules
14/3
15/2
37 {
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 Safety-
and security-related restrictions are defined in
H.4.
16
38 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.
16.a
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
16.b
Pragma Restrictions is new
to Ada 95.
Extensions to Ada 95
16.c/3
Wording Changes from Ada 95
16.d/2
{
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.
16.e/2
{
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.
16.f/2
Wording Changes from Ada 2005
16.g/3
{
AI05-0013-1}
Correction: When restrictions are checked
has been clarified.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe