Next: , Previous: 13.9.1, Up: 13.9


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
X'Valid

Yields True if and only if the object denoted by X is normal and has a valid representation. The value of this attribute is of the predefined type Boolean.

3.a

Ramification: Having checked that X'Valid is True, it is safe to read the value of X without fear of erroneous execution caused by abnormality, or a bounded error caused by an invalid representation. Such a read will produce a value in the subtype of X.

     NOTES

4

19  Invalid data can be created in the following cases (not counting erroneous or unpredictable execution):

5

6

7

8

9

10

11

12

20  X'Valid is not considered to be a read of X; hence, it is not an error to check the validity of invalid data.

13/2

21  {00426AI95−00426−01} The Valid attribute may 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 should also be provided because implementations are permitted to raise Constraint_Error or Program_Error if they detect the use of an invalid representation (see 13.9.1).

13.a

Ramification: If X is of an enumeration type with a representation clause, then X'Valid checks that the value of X when viewed as an integer is one of the specified internal codes.

13.b

Reason: Valid is defined only for scalar objects because the implementation and description burden would be too high for other types. For example, given a typical run−time model, it is impossible to check the validity of an access value. The same applies to composite types implemented with internal pointers. One can check the validity of a composite object by checking the validity of each of its scalar subcomponents. The user should ensure that any composite types that need to be checked for validity are represented in a way that does not involve implementation−defined components, or gaps between components. Furthermore, such types should not contain access subcomponents.

13.c/2

This paragraph was deleted.{00114AI95−00114−01}
Extensions to Ada 83

13.d

{extensions to Ada 83} X'Valid is new in Ada 95.
Wording Changes from Ada 95

13.e/2

{00426AI95−00426−01} Added a note explaining that handlers for Constraint_Error and Program_Error are needed in the general case of testing for validity. (An implementation could document cases where these are not necessary, but there is no language requirement.