10.1.5 Pragmas and Program Units
1
This subclause discusses pragmas related to program
units, library units, and compilations.
Name Resolution Rules
2
Certain
pragmas
are defined to be
program unit pragmas.
A
name given 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
names
given as arguments, the
pragma applies to
the immediately enclosing program unit.
Legality Rules
3
A program unit pragma
shall appear in one of these places:
4
- At the place of a compilation_unit,
in which case the pragma shall immediately
follow in the same compilation (except for
other pragmas) a library_unit_declaration
that is a subprogram_declaration, generic_subprogram_declaration,
or generic_instantiation, and the pragma
shall have an argument that is a name denoting
that declaration.
5/1
- 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.
6
- At the place of a declaration other
than the first, of a declarative_part or program
unit declaration, in which case the pragma
shall have an argument, which shall be a direct_name
that denotes one or more of the following (and nothing else): a subprogram_declaration,
a generic_subprogram_declaration, or a generic_instantiation,
of the same declarative_part or program unit
declaration.
7
Certain
program unit pragmas are defined to be
library unit pragmas. The
name, if any, in a library unit pragma shall
denote the declaration of a library unit.
Static Semantics
7.1/1
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.
Post-Compilation Rules
8
Certain
pragmas
are defined to be
configuration pragmas; they shall appear before
the first
compilation_unit of a
compilation.
They are generally used to select a partition-wide or system-wide option.
The
pragma applies to all
compilation_units
appearing in the
compilation, unless there
are none, in which case it applies to all future
compilation_units
compiled into the same environment.
Implementation Permissions
9/2
An implementation may require that configuration
pragmas that select partition-wide or system-wide options be compiled
when the environment contains no library_items
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.
Implementation Advice
10/1
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.