Ada '83 Language Reference Manual
Copyright 1980, 1982, 1983 owned by the United States Government. Direct reproduction and usage requests to the Ada Information Clearinghouse.
1.6. Classification of Errors
The language definition classifies errors into several different
If a compiler is able to recognize at compilation time that a construct is
erroneous or contains an incorrect order dependence, then the compiler is
allowed to generate, in place of the code otherwise generated for the
construct, code that raises the predefined exception PROGRAM_ERROR.
Similarly, compilers are allowed to generate code that checks at run time
for erroneous constructs, for incorrect order dependences, or for both.
The predefined exception PROGRAM_ERROR is raised if such a check fails.
- Errors that must be detected at compilation time by every Ada
These errors correspond to any violation of a rule given in this
reference manual, other than the violations that correspond to (b) or
(c) below. In particular, violation of any rule that uses the terms
must, allowed, legal, or illegal belongs to this category. Any
program that contains such an error is not a legal Ada program; on
the other hand, the fact that a program is legal does not mean, per
se, that the program is free from other forms of error.
- Errors that must be detected at run time by the execution of an Ada
The corresponding error situations are associated with the names of
the predefined exceptions. Every Ada compiler is required to generate
code that raises the corresponding exception if such an error
situation arises during program execution. If an exception is certain
to be raised in every execution of a program, then compilers are
allowed (although not required) to report this fact at compilation
- Erroneous execution.
The language rules specify certain rules to be obeyed by Ada programs,
although there is no requirement on Ada compilers to provide either a
compilation-time or a run-time detection of the violation of such
rules. The errors of this category are indicated by the use of the
word erroneous to qualify the execution of the corresponding
constructs. The effect of erroneous execution is unpredictable.
- Incorrect order dependences.
Whenever the reference manual specifies that different parts of a
given construct are to be executed in some order that is not defined
by the language, this means that the implementation is allowed to
execute these parts in any given order, following the rules that
result from that given order, but not in parallel. Furthermore, the
construct is incorrect if execution of these parts in a different
order would have a different effect. Compilers are not required to
provide either compilation-time or run-time detection of incorrect
order dependences. The foregoing is expressed in terms of the process
that is called execution; it applies equally to the processes that
are called evaluation and elaboration.
Style Guide references:
5.9 Erroneous Execution
Address any questions or comments to