Ada Reference Manual (Ada 2022) — Legal Information

# 4.9.1 Statically Matching Constraints and Subtypes

#### Static Semantics

1/2
A constraint statically matches another constraint if:
1.1/2
both are null constraints;
1.2/2
both are static and have equal corresponding bounds or discriminant values;
1.3/2
both are nonstatic and result from the same elaboration of a constraint of a subtype_indication or the same evaluation of a range of a discrete_subtype_definition; or
1.4/2
both are nonstatic and come from the same formal_type_declaration.
1.5/5
The Global or Global'Class aspects (see 6.1.2) of two entities statically match if both consist of a single global_aspect_definition where each is the reserved word null, or each is of the form “global_mode global_designator” with each global_mode being the same sequence of reserved words and each global_designator being the same reserved word, or each being a global_name that statically names the same entity.
2/5
A subtype statically matches another subtype of the same type if they have statically matching constraints, all predicate specifications that apply to them come from the same declarations, Nonblocking aspects have the same value, global aspects statically match, Object_Size (see 13.3) has been specified to have a nonconfirming value for either both or neither, and the nonconfirming values, if any, are the same, and, for access subtypes, either both or neither exclude null. Two anonymous access-to-object subtypes statically match if their designated subtypes statically match, and either both or neither exclude null, and either both or neither are access-to-constant. Two anonymous access-to-subprogram subtypes statically match if their designated profiles are subtype conformant, and either both or neither exclude null.
3
Two ranges of the same type statically match if both result from the same evaluation of a range, or if both are static and have equal corresponding bounds.
4/3
A constraint is statically compatible with a scalar subtype if it statically matches the constraint of the subtype, or if both are static and the constraint is compatible with the subtype. A constraint is statically compatible with an access or composite subtype if it statically matches the constraint of the subtype, or if the subtype is unconstrained.
5/3
Two statically matching subtypes are statically compatible with each other. In addition, a subtype S1 is statically compatible with a subtype S2 if:
6/3
the constraint of S1 is statically compatible with S2, and
7/3
if S2 excludes null, so does S1, and
8/3
either:
9/3
all predicate specifications that apply to S2 apply also to S1, or
10/4
both subtypes are static, every value that satisfies the predicates of S1 also satisfies the predicates of S2, and it is not the case that both types each have at least one applicable predicate specification, predicate checks are enabled (see 11.4.2) for S2, and predicate checks are not enabled for S1.

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