J.10 Specific Suppression of Checks
Pragma Suppress can be used to suppress checks
on specific entities.
The form of a specific Suppress pragma
is as follows:
[On =>] name);
The identifier shall
be the name of a check (see 11.5). The name
shall statically denote some entity.
For a specific Suppress pragma
that is immediately within a package_specification,
the name shall denote an entity (or several
overloaded subprograms) declared immediately within the package_specification.
A specific Suppress pragma
applies to the named check from the place of the pragma
to the end of the innermost enclosing declarative region, or, if the
pragma is given in a package_specification,
to the end of the scope of the named entity. The pragma
applies only to the named entity, or, for a subtype, on objects and values
of its type. A specific Suppress pragma suppresses
the named check for any entities to which it applies (see 11.5).
Which checks are associated with a specific entity is not defined by
this International Standard.
language doesn't specify exactly which entities control whether a check
is performed. For example, in
pragma Suppress (Range_Check, On => A);
A := B;
whether or not the range
check is performed is not specified. The compiler may require that checks
are suppressed on B or on the type of A in order to omit the range check.
An implementation is allowed to place restrictions
on specific Suppress pragmas.
An implementation may support a similar On parameter
on pragma Unsuppress (see 11.5).
Wording Changes from Ada 95
This clause is new. This feature was moved here
because it is important for pragma Unsuppress that there be an unambiguous
meaning for each checking pragma. For instance, in the example
pragma Suppress (Range_Check);
pragma Unsuppress (Range_Check, On => A);
A := B;
the user needs to be able
to depend on the range check being made on the assignment. But a compiler
survey showed that the interpretation of this feature varied widely;
trying to define this carefully was likely to cause a lot of user and
implementer pain. Thus the feature was moved here, to emphasize that
its use is not portable.