- (1)
- Certain actions that can potentially lead to erroneous execution are not
directly erroneous, but instead can cause objects to become abnormal.
Subsequent uses of abnormal objects can be erroneous.
- (2)
- A scalar object can have an invalid representation, which means that the
object's representation does not represent any value of the object's subtype.
The primary cause of invalid representations is uninitialized variables.
- (3)
- Abnormal objects and invalid representations are explained in this
subclause.
Dynamic Semantics
- (4)
- When an object is first created, and any explicit or default
initializations have been performed, the object and all of its parts are in
the normal state. Subsequent operations generally leave them normal.
However, an object or part of an object can become abnormal in the following
ways:
- (5)
- An assignment to the object is disrupted due to an abort (see
9.8) or due to the failure of a language-defined check (see
11.6).
- (6)
- The object is not scalar, and is passed to an in out or out
parameter of an imported procedure or language-defined input
procedure, if after return from the procedure the representation
of the parameter does not represent a value of the parameter's
subtype.
- (7)
- Whether or not an object actually becomes abnormal in these cases is not
specified. An abnormal object becomes normal again upon successful
completion of an assignment to the object as a whole.
Erroneous Execution
- (8)
- It is erroneous to evaluate a primary that is a name denoting an abnormal
object, or to evaluate a prefix that denotes an abnormal object.
Bounded (Run-Time) Errors
- (9)
- If the representation of a scalar object does not represent a value of
the object's subtype (perhaps because the object was not initialized), the
object is said to have an invalid representation. It is a bounded error to
evaluate the value of such an object. If the error is detected, either
Constraint_Error or Program_Error is raised. Otherwise, execution continues
using the invalid representation. The rules of the language outside this
subclause assume that all objects have valid representations. The semantics
of operations on invalid representations are as follows:
- (10)
- If the representation of the object represents a value of the
object's type, the value of the type is used.
- (11)
- If the representation of the object does not represent a value of
the object's type, the semantics of operations on such
representations is implementation-defined, but does not by itself
lead to erroneous or unpredictable execution, or to other objects
becoming abnormal.
Erroneous Execution
- (12)
- A call to an imported function or an instance of Unchecked_Conversion is
erroneous if the result is scalar, and the result object has an invalid
representation.
- (13)
- The dereference of an access value is erroneous if it does not designate
an object of an appropriate type or a subprogram with an appropriate profile,
if it designates a nonexistent object, or if it is an access-to-variable
value that designates a constant object. Such an access value can exist, for
example, because of Unchecked_Deallocation, Unchecked_Access, or Unchecked_Conversion.
-
- (14)
(18) Objects can become abnormal due to other kinds of actions that
directly update the object's representation; such actions are generally
considered directly erroneous, however.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12