CVS difference for ais/ai-00106.txt
--- ais/ai-00106.txt 1998/09/30 00:17:17 1.1
+++ ais/ai-00106.txt 1999/06/26 01:11:13 1.2
@@ -1,5 +1,6 @@
-!standard 13.14 (06) 96-11-16 AI95-00106/05
+!standard 13.14 (06) 99-06-25 AI95-00106/06
!class binding interpretation 96-04-04
+!status Corrigendum 2000 99-05-25
!status WG9 approved 96-12-07
!status ARG approved 11-0-0 96-10-07
!status work item (letter ballot was 9-3-0) 96-10-03
@@ -10,7 +11,7 @@
!subject Freezing Rules
1. An object name causes freezing where it occurs, unless the name is
part of a default_expression, a default_name, or a per-object expression
@@ -28,7 +29,7 @@
then that type or subtype is frozen at the same place where the name or
expression causes freezing.
1. Does an object_renaming_declaration cause freezing of the renamed
@@ -128,11 +129,11 @@
X: Boolean := F(10); -- Freezes type T? (Yes.)
for T'Size use 4; -- Legal? (No.)
1. Add object names to 13.14(8):
@@ -164,7 +165,7 @@
then at the place where the expression causes freezing,
T is frozen.
1. 13.14(8) says that expressions cause freezing. It does not cover
names that denote objects, but it should -- the reasons for the
@@ -220,7 +221,60 @@
should freeze even if it is removed via the Implementation Permissions
in 7.6(18-21); otherwise, there would be a portability problem.
+A static expression causes freezing where it occurs. A nonstatic
+expression causes freezing where it occurs, unless the expression is part of
+a @fa<default_expression>, a @fa<default_name>, or a per-object expression of a
+component's @fa<constraint>, in which case, the freezing occurs later as part of
+A static expression causes freezing where it occurs. An object
+name or nonstatic expression causes freezing where it occurs, unless
+the name or expression is part of a @fa<default_expression>, a
+@fa<default_name>, or a per-object expression of a component's @fa<constraint>,
+in which case, the freezing occurs later as part of another construct.
+@xbullet<At the place where a @fa<name> causes freezing, the entity denoted by
+the name is frozen, unless the @fa<name> is a @fa<prefix> of an expanded
+name; at the place where an object @fa<name> causes freezing, the
+nominal subtype associated with the @fa<name> is frozen.>
+@xbullet<At the place where a @fa<name> or @fa<implicit_dereference> causes
+freezing, the denoted entity is frozen, unless the @fa<name> is a @fa<prefix> of an
+expanded name; at the place where an object @fa<name> or @fa<implicit_dereference>
+causes freezing, the associated nominal subtype is frozen.>
+@xbullet<At the place where a subtype is frozen, its type is frozen. At
+the place where a type is frozen, any expressions or @fa<name>s within
+the full type definition cause freezing; the first subtype, and
+any component subtypes, index subtypes, and parent subtype of the
+type are frozen as well. For a specific tagged type, the
+corresponding class-wide type is frozen as well. For a
+class-wide type, the corresponding specific type is frozen as
+An implicit call to one of the subprograms in Ada.Finalization
+or System.Storage_Pools freezes the same entities that would
+be frozen by an explicit call. This is true even if the implicit
+call is removed via the Implementation Permissions in 7.6.
+If an expression is explicitly converted to a type or subtype @i<T>,
+then at the place where the expression causes freezing,
+@i<T> is frozen.
+A B-Test should be constructed to check each of the examples in this issue.
!subject Does an object renaming cause freezing?
Questions? Ask the ACAA Technical Agent