13.12.1 Language-Defined Restrictions
Static Semantics
1/2
{
AI95-00257-01}
The following restriction_identifiers
are language-defined (additional restrictions are defined in the Specialized
Needs Annexes):
2/2
{
AI95-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
{
AI95-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
{
AI95-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
{
AI95-00381-01}
The following restriction_parameter_identifier
is language defined:
6/2
Specifies a library unit on which there are no
semantic dependences.
Legality Rules
7/2
{
AI95-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
{
AI95-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
{
AI95-00257-01}
{
AI95-00368-01}
{extensions to Ada 95} Restrictions
No_Implementation_Attributes, No_Implementation_Pragmas, and No_Obsolescent_Features
are new.
8.c/2