Pragma Check_Policy (GNAT Reference Manual)

### 2.27 Pragma Check_Policy ¶

Syntax:

    pragma Check_Policy
     ([Name   =>] CHECK_KIND,
      [Policy =>] POLICY_IDENTIFIER);

    pragma Check_Policy (
        CHECK_KIND => POLICY_IDENTIFIER
     {, CHECK_KIND => POLICY_IDENTIFIER});

    ASSERTION_KIND ::= RM_ASSERTION_KIND | ID_ASSERTION_KIND

    CHECK_KIND ::= IDENTIFIER           |
                   Pre'Class            |
                   Post'Class           |
                   Type_Invariant'Class |
                   Invariant'Class

    The identifiers Name and Policy are not allowed as CHECK_KIND values. This
    avoids confusion between the two possible syntax forms for this pragma.

    POLICY_IDENTIFIER ::= ON | OFF | CHECK | DISABLE | IGNORE

This pragma is used to set the checking policy for assertions (specified by aspects or pragmas), the `Debug` pragma, or additional checks to be checked using the `Check` pragma. It may appear either as a configuration pragma, or within a declarative part of package. In the latter case, it applies from the point where it appears to the end of the declarative region (like pragma `Suppress`).

The `Check_Policy` pragma is similar to the predefined `Assertion_Policy` pragma, and if the check kind corresponds to one of the assertion kinds that are allowed by `Assertion_Policy`, then the effect is identical.

If the first argument is Debug, then the policy applies to Debug pragmas, disabling their effect if the policy is `OFF`, `DISABLE`, or `IGNORE`, and allowing them to execute with normal semantics if the policy is `ON` or `CHECK`. In addition if the policy is `DISABLE`, then the procedure call in `Debug` pragmas will be totally ignored and not analyzed semantically.

Finally the first argument may be some other identifier than the above possibilities, in which case it controls a set of named assertions that can be checked using pragma `Check`. For example, if the pragma:

    pragma Check_Policy (Critical_Error, OFF);

is given, then subsequent `Check` pragmas whose first argument is also `Critical_Error` will be disabled.

The check policy is `OFF` to turn off corresponding checks, and `ON` to turn on corresponding checks. The default for a set of checks for which no `Check_Policy` is given is `OFF` unless the compiler switch ‘-gnata’ is given, which turns on all checks by default.

The check policy settings `CHECK` and `IGNORE` are recognized as synonyms for `ON` and `OFF`. These synonyms are provided for compatibility with the standard `Assertion_Policy` pragma. The check policy setting `DISABLE` causes the second argument of a corresponding `Check` pragma to be completely ignored and not analyzed.