J.10 Specific Suppression of Checks
Pragma Suppress can be used to suppress checks
on specific entities.
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
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.
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.