10.1.5 Pragmas and Program Units
[This subclause discusses pragmas related to program
units, library units, and compilation
Name Resolution Rules
are defined to be program unit pragmas
as the argument of a program unit pragma shall resolve to denote the
declarations or renamings of one or more program units that occur immediately
within the declarative region or compilation
in which the pragma
immediately occurs, or it shall resolve to denote the declaration of
the immediately enclosing program unit (if any); the pragma
applies to the denoted program unit(s). If there are no name
given as arguments, the pragma
applies to the immediately enclosing program unit.
The fact that this is a
Name Resolution Rule means that the pragma
will not apply to declarations from outer declarative regions.
A program unit pragma
shall appear in one of these places:
Immediately within the visible part of a program unit and before any
nested declaration (but not within a generic formal part), in which case
the argument, if any, shall be a direct_name
that denotes the immediately enclosing program unit declaration.
Ramification: The argument is optional
in this case.
program unit pragmas are defined to be library unit pragmas
a library unit pragma applies to a program unit, the program unit shall
be a library unit.
A library unit pragma that applies to a generic unit does not apply to
its instances, unless a specific rule for the pragma specifies the contrary.
An implementation may require that configuration pragmas that select
partition-wide or system-wide options be compiled when the environment
contains no library_item
other than those of the predefined environment. In this case, the implementation
shall still accept configuration pragmas in individual compilations that
confirm the initially selected partition-wide or system-wide options.
When applied to a generic unit, a program unit pragma that is not a library
unit pragma should apply to each instance of the generic unit for which
there is not an overriding pragma applied directly to the instance.
Implementation Advice: When applied to
a generic unit, a program unit pragma that is not a library unit pragma
should apply to each instance of the generic unit for which there is
not an overriding pragma applied directly to the instance.
Wording Changes from Ada 95
The wording was corrected to ensure that a program
unit pragma cannot appear in private parts or generic formal parts.
The wording was clarified to explain the meaning
of program unit and library unit pragmas in generic units.
The Implementation Advice added by the Corrigendum
was moved, as it was not in the normal order. (This changes the paragraph
number.) It originally was directly after the new Static Semantics rule.
The permission to place restrictions was clarified to:
Ensure that it applies only to partition-wide
configuration pragmas, not ones like Assertion_Policy (see 11.4.2
which can be different in different units; and
Ensure that confirming pragmas are always
Wording Changes from Ada 2005
A library unit pragma must apply directly to a library
unit, even if no name is given in the pragma.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe