J.10 Specific Suppression of Checks
This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue
Pragma Suppress can be used to suppress checks on specific entities.
Syntax
2/2The form of a specific Suppress pragma
is as follows:
pragma Suppress(identifier
, [On =>] name
);
Legality Rules
4/2The 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
.
Static Semantics
6/2A 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 document.
The 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.
Implementation Permissions
7/2An implementation is allowed to place restrictions on specific Suppress pragma
s.
Wording Changes from Ada 95
This subclause 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.