Ada Reference Manual (Ada 2022) — Legal Information

# 13.9.2 The Valid Attribute

1
The Valid attribute can be used to check the validity of data produced by unchecked conversion, input, interface to foreign languages, and the like.

#### Static Semantics

2
For a prefix X that denotes a scalar object (after any implicit dereference), the following attribute is defined:
3/4
X'Valid
Yields True if and only if the object denoted by X is normal, has a valid representation, and then, if the preceding conditions hold, the value of X also satisfies the predicates of the nominal subtype of X. The value of this attribute is of the predefined type Boolean.
4
NOTE 1 Invalid data can be created in the following cases (not counting erroneous or unpredictable execution):
5
an uninitialized scalar object,
6
the result of an unchecked conversion,
7
input,
8
interface to another language (including machine code),
9
aborting an assignment,
10
disrupting an assignment due to the failure of a language-defined check (see 11.6), and
11
use of an object whose Address has been specified.
12/5
NOTE 2 Determining whether X is normal and has a valid representation as part of the evaluation of X'Valid is not considered to include an evaluation of X; hence, it is not an error to check the validity of an object that is invalid or abnormal. Determining whether X satisfies the predicates of its nominal subtype can include an evaluation of X, but only after it has been determined that X has a valid representation.
13/4
If X is volatile, the evaluation of X'Valid is considered a read of X.
14/5
NOTE 3 The Valid attribute can be used to check the result of calling an instance of Unchecked_Conversion (or any other operation that can return invalid values). However, an exception handler is still useful because implementations are permitted to raise Constraint_Error or Program_Error if they detect the use of an invalid representation (see 13.9.1).

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe