Language-Defined Restrictions and Profiles
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# 13.12.1 Language-Defined Restrictions and Profiles

#### Static Semantics

1/2
The following restriction_ identifiers are language defined (additional restrictions are defined in the Specialized Needs Annexes):
1.1/3
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.
2/2
No_Implementation_Attributes
There are no implementation-defined attributes. This restriction applies only to the current compilation or environment, not the entire partition.
2.1/3
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:
2.2/3
The following language-defined packages and generic packages allow implementation-defined identifiers:
2.3/3
package System (see 13.7);
2.4/3
package Standard (see A.1);
2.5/3
package Ada.Command_Line (see A.15);
2.6/3
package Interfaces.C (see B.3);
2.7/3
package Interfaces.C.Strings (see B.3.1);
2.8/3
package Interfaces.C.Pointers (see B.3.2);
2.9/3
package Interfaces.COBOL (see B.4);
2.10/3
package Interfaces.Fortran (see B.5);
2.11/3
The following language-defined packages contain only implementation-defined identifiers:
2.12/3
package System.Machine_Code (see 13.8);
2.13/3
package Ada.Directories.Information (see A.16);
2.14/3
nested Implementation packages of the Queue containers (see A.18.28-31);
2.15/3
package Interfaces (see B.2);
2.16/3
package Ada.Interrupts.Names (see C.3.2).
2.17/3
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.
2.18/3
This restriction applies only to the current compilation or environment, not the entire partition.
3/2
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.
3.1/3
No_Implementation_Units
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.
4/3
No_Obsolescent_Features
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.
5/3
The following restriction_parameter_ identifiers are language defined:
6/2
No_Dependence
Specifies a library unit on which there are no semantic dependences.
6.1/3
No_Specification_of_Aspect
Identifies an aspect for which no aspect_specification, attribute_definition_clause, or pragma is given.
6.2/3
No_Use_Of_Attribute
Identifies an attribute for which no attribute_reference or attribute_definition_clause is given.
6.3/3
No_Use_Of_Pragma
Identifies a pragma which is not to be used.

#### Legality Rules

7/2
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.
7.1/3
The restriction_parameter_argument of a No_Specification_of_Aspect restriction shall be an identifier; this is an identifier specific to a pragma (see 2.8) and does not denote any declaration.
7.2/3
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.
7.3/3
The restriction_parameter_argument of a No_Use_Of_Pragma restriction shall be an identifier or the reserved word Interface; this is an identifier specific to a pragma.

#### Post-Compilation Rules

8/3
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

9/3
The following profile_ identifier is language defined:
10/3
No_Implementation_Extensions
11/3
For usage profile No_Implementation_Extensions, there shall be no profile_ pragma_argument_associations.
12/3
The No_Implementation_Extensions usage profile is equivalent to the following restrictions:
13/3
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