13.12.1 Language-Defined Restrictions and Profiles
Static Semantics
The following
restriction_identifiers
are language defined (additional restrictions are defined in the Specialized
Needs Annexes):
No_Implementation_Aspect_Specifications
There are no implementation-defined aspects specified by an
aspect_specification.
This restriction applies only to the current compilation or environment,
not the entire partition.
No_Implementation_Attributes
There are no implementation-defined attributes. This restriction applies
only to the current compilation or environment, not the entire partition.
No_Implementation_Identifiers
There are no usage names that denote declarations with implementation-defined
identifiers that occur within language-defined packages or instances
of language-defined generic packages. Such identifiers can arise as follows:
The following
language-defined packages and generic packages allow implementation-defined
identifiers:
package System (see
13.7);
package Standard (see
A.1);
package Ada.Command_Line (see
A.15);
package Interfaces.C (see
B.3);
package Interfaces.C.Strings (see
B.3.1);
package Interfaces.C.Pointers (see
B.3.2);
package Interfaces.COBOL (see
B.4);
package Interfaces.Fortran (see
B.5);
The following
language-defined packages contain only implementation-defined identifiers:
package System.Machine_Code (see
13.8);
package Ada.Directories.Information
(see
A.16);
nested Implementation packages of
the Queue containers (see
A.18.28-31);
package Interfaces (see
B.2);
package Ada.Interrupts.Names (see
C.3.2).
For package Standard, Standard.Long_Integer
and Standard.Long_Float are considered language-defined identifiers,
but identifiers such as Standard.Short_Short_Integer are considered implementation-defined.
This restriction applies only to the current
compilation or environment, not the entire partition.
No_Implementation_Pragmas
There are no implementation-defined pragmas or pragma arguments. This
restriction applies only to the current compilation or environment, not
the entire partition.
There is no mention in the
context_clause
of any implementation-defined descendants of packages Ada, Interfaces,
or System. This restriction applies only to the current compilation or
environment, not the entire partition.
There is no use of language features defined in Annex J. It is implementation
defined whether uses of the renamings of
J.1
and of the
pragmas
of
J.15 are detected by this restriction.
This restriction applies only to the current compilation or environment,
not the entire partition.
The following
restriction_parameter_identifiers
are language defined:
Specifies a library unit on which there are no semantic dependences.
No_Specification_of_Aspect
Identifies an attribute for which no
attribute_reference
or
attribute_definition_clause
is given.
Identifies a
pragma
which is not to be used.
Legality Rules
The
restriction_parameter_argument
of a No_Dependence restriction shall be a
name;
the
name shall
have the form of a full expanded name of a library unit, but need not
denote a unit present in the environment.
The
restriction_parameter_argument
of a No_Use_Of_Attribute restriction shall be an
identifier
or one of the reserved words Access, Delta, Digits, Mod, or Range; this
is an identifier specific to a pragma.
Post-Compilation Rules
No compilation unit included in the partition shall
depend semantically on the library unit identified by the
name
of a No_Dependence restriction.
Static Semantics
The following
profile_identifier
is language defined:
No_Implementation_Extensions
The No_Implementation_Extensions
usage profile is equivalent to the following restrictions:
No_Implementation_Aspect_Specifications,
No_Implementation_Attributes,
No_Implementation_Identifiers,
No_Implementation_Pragmas,
No_Implementation_Units.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe