Skip to main content

J.10 Specific Suppression of Checks

danger

This Reference Manual output has not been verified, and may contain omissions or errors. Report any problems on the tracking issue

1/2

Pragma Suppress can be used to suppress checks on specific entities.

Syntax

2/2

The form of a specific Suppress pragma is as follows:

3/2

pragma Suppress(identifier, [On =>] name);

Legality Rules

4/2

The identifier shall be the name of a check (see 11.5). The name shall statically denote some entity.

5/2

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/2

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 document.

6.a/2
discussion

The language doesn't specify exactly which entities control whether a check is performed. For example, in

6.b

pragma Suppress (Range_Check, On => A); A := B;

6.c

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/2

An implementation is allowed to place restrictions on specific Suppress pragmas.

8/5

NOTE An implementation can support a similar On parameter on pragma Unsuppress (see 11.5).

Wording Changes from Ada 95

8.a/3

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

8.b

pragma Suppress (Range_Check); pragma Unsuppress (Range_Check, On => A); A := B;

8.c

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.