13.12 Pragma Restrictions and Pragma Profile
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 may facilitate the construction of 
simpler run-time environments. 
 
Syntax
The form of a 
pragma 
Restrictions is as follows: 
 
Name Resolution Rules
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. 
 
Paragraph 7 was deleted. 
Post-Compilation Rules
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 specified 
for the particular restriction:
 
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.
A restriction may impose requirements on the run-time 
behavior of the program, as indicated by the specification of run-time 
behavior associated with a violation of the requirement.
  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. 
 
Implementation Permissions
  An implementation may provide implementation-defined 
restrictions; the identifier for an implementation-defined restriction 
shall differ from those of the language-defined restrictions. 
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. 
 
  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. 
Syntax
The form of a 
pragma 
Profile is as follows: 
 
Legality Rules
Static Semantics
 A profile is equivalent to the set of configuration 
pragmas that is defined for each usage profile. 
Post-Compilation Rules
 A 
pragma 
Profile is a configuration pragma. There may be more than one 
pragma 
Profile for a partition. 
 
Implementation Permissions
 An implementation may provide implementation-defined 
usage profiles; the identifier for an implementation-defined usage profile 
shall differ from those of the language-defined usage profiles.
36  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.
 
37  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. 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe