Next: , Previous: 13.12, Up: 13.12


13.12.1 Language-Defined Restrictions

Static Semantics

1/2
{00257AI95−00257−01} The following restriction_identifiers are language−defined (additional restrictions are defined in the Specialized Needs Annexes):

2/2
{00257AI95−00257−01} {Restrictions (No_Implementation_Attributes)} No_Implementation_Attributes

There are no implementation−defined attributes. This restriction applies only to the current compilation or environment, not the entire partition.

2.a/2

Discussion: This restriction (as well as No_Implementation_Pragmas) only applies to the current compilation, because it is likely that the runtime (and possibly user−written low−level code) will need to use implementation−defined entities. But a partition−wide restriction applies everywhere, including the runtime.

3/2
{00257AI95−00257−01} {Restrictions (No_Implementation_Pragmas)} 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.

4/2
{00368AI95−00368−01} {Restrictions (No_Obsolescent_Features)} No_Obsolescent_Features

There is no use of language features defined in Annex J. It is implementation−defined if uses of the renamings of J.1 are detected by this restriction. This restriction applies only to the current compilation or environment, not the entire partition.

4.a/2

Reason: A user could compile a rename like

4.b/2

     with Ada.Text_IO;
     package Text_IO renames Ada.Text_IO;

4.c/2

Such a rename must not be disallowed by this restriction, nor should the compilation of such a rename be restricted by an implementation. Many implementations implement the renames of J.1 by compiling them normally; we do not want to require implementations to use a special mechanism to implement these renames.

5/2
{00381AI95−00381−01} The following restriction_parameter_identifier is language defined:

6/2
{00381AI95−00381−01} {Restrictions (No_Dependence)} No_Dependence

Specifies a library unit on which there are no semantic dependences.
Legality Rules

7/2
{00381AI95−00381−01} 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.a/2

Ramification: This name is not resolved.
Post-Compilation Rules

8/2
{00381AI95−00381−01} No compilation unit included in the partition shall depend semantically on the library unit identified by the name.

8.a/2

Ramification: There is no requirement that the library unit actually exist. One possible use of the pragma is to prevent the use of implementation−defined units; when the program is ported to a different compiler, it is perfectly reasonable that no unit with the name exist.
Extensions to Ada 95

8.b/2

{00257AI95−00257−01} {00368AI95−00368−01} {extensions to Ada 95} Restrictions No_Implementation_Attributes, No_Implementation_Pragmas, and No_Obsolescent_Features are new.

8.c/2

{00381AI95−00381−01} Restriction No_Dependence is new.