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. A pragma is not a statement, so if a statement sequence contains nothing but a pragma assert, then a null statement is required in addition, as in:
... if J > 3 then pragma Assert (K > 3, "Bad value for K"); null; end if;
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.
If assertions are disabled (switch -gnata not used), 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 enabled, then the given expression is tested, and if
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.