Syntax:
pragma Assert ( boolean_EXPRESSION [, string_EXPRESSION]);
The effect of this pragma depends on whether the corresponding command line switch is set to activate assertions. The pragma expands into code equivalent to the following:
if assertions-enabled then if not boolean_EXPRESSION then System.Assertions.Raise_Assert_Failure (string_EXPRESSION); end if; end if;
The string argument, if given, is the message that will be associated
with the exception occurrence if the exception is raised. If no second
argument is given, the default message is file
:nnn
,
where file
is the name of the source file containing the assert,
and nnn
is the line number of the assert.
Note that, as with the if
statement to which it is equivalent, the
type of the expression is either Standard.Boolean
, or any type derived
from this standard type.
Assert checks can be either checked or ignored. By default they are ignored.
They will be checked if either the command line switch `-gnata' is
used, or if an Assertion_Policy
or Check_Policy
pragma is used
to enable Assert_Checks
.
If assertions are ignored, then there is no run-time effect (and in particular, any side effects from the expression will not occur at run time). (The expression is still analyzed at compile time, and may cause types to be frozen if they are mentioned here for the first time).
If assertions are checked, then the given expression is tested, and if
it is False
then System.Assertions.Raise_Assert_Failure
is called
which results in the raising of Assert_Failure
with the given message.
You should generally avoid side effects in the expression arguments of this pragma, because these side effects will turn on and off with the setting of the assertions mode, resulting in assertions that have an effect on the program. However, the expressions are analyzed for semantic correctness whether or not assertions are enabled, so turning assertions on and off cannot affect the legality of a program.
Note that the implementation defined policy DISABLE
, given in a
pragma Assertion_Policy
, can be used to suppress this semantic analysis.
Note: this is a standard language-defined pragma in versions of Ada from 2005 on. In GNAT, it is implemented in all versions of Ada, and the DISABLE policy is an implementation-defined addition.