CVS difference for ais/ai-00161.txt

Differences between 1.8 and version 1.9
Log of other versions for file ais/ai-00161.txt

--- ais/ai-00161.txt	1999/09/23 18:39:38	1.8
+++ ais/ai-00161.txt	2001/10/19 01:36:43	1.9
@@ -1,5 +1,8 @@
-!standard 10.02.01 (09)                               99-09-23  AI95-00161/05
+!standard 10.02.01 (09)                               01-10-17  AI95-00161/06
+!standard 10.02.01 (11)
+!standard C.04 (04)
 !class binding interpretation 99-02-23
+!status ARG approved 7-0-1  01-10-07
 !status work item 98-04-16
 !status received 96-09-10
 !priority Medium
@@ -169,6 +172,97 @@
 Preelaborable_Initialization, because that would make it impossible to
 instantiate Generic_Bounded_Length with a non-static expression for the
 parameter Max.
+!corrigendum 10.02.01(9)
+@xbullet<The creation of a default-initialized object (including a component) of
+a descendant of a private type, private extension, controlled type, task type,
+or protected type with @fa<entry_declaration>s; similarly the evaluation of an
+@fa<extension_aggregate> with an ancestor @fa<subtype_mark> denoting a subtype
+of such a type.>
+@xbullet<The creation of an object (including a component) of a type which does
+not have preelaborable initialization. Similarly the evaluation of an
+@fa<extension_aggregate> with an ancestor @fa<subtype_mark> denoting a subtype
+of such a type.>
+!corrigendum 10.02.01(11)
+If a @fa<pragma> Preelaborate (or @fa<pragma> Pure -- see below) applies to a
+library unit, then it is preelaborated. If a library unit is preelaborated,
+then its declaration, if any, and body, if any, are elaborated prior to all
+non-preelaborated @fa<library_item>s of the partition. The declaration and body
+of a preelaborated library unit, and all subunits that are elaborated as part
+of elaborating the library unit,All compilation units of a preelaborated
+library unit shall be preelaborable. In addition to the places where Legality
+Rules normally apply (see 12.3), this rule applies also in the private part of
+an instance of a generic unit. In addition, all compilation units of a
+preelaborated library unit shall depend semantically only on compilation units
+of other preelaborated library units.
+The following rules specify which entities have preelaborable initialization:
+@xbullet<The partial view of a private type or private extension, a protected
+type without @fa<entry_declaration>s, a generic formal private type, or a
+generic formal derived type, have preelaborable initialization if and only if
+the pragma Preelaborable_Initialization has been applied to them.>
+@xbullet<Protected types with @fa<entry_declaration>s and task types do not
+have preelaborable initialization.>
+@xbullet<A component (including a discriminant) of a record or protected type
+has preelaborable initialization if its declaration includes a
+@fa<default_expression> whose execution does not perform any actions prohibited
+in preelaborable constructs as described above, or if its declaration does not
+include a default expression and its type has preelaborable initialization.>
+@xbullet<A derived type has preelaborable initialization if its parent type has
+preelaborable initialization and (in the case of a derived record or protected
+type) if the non-inherited components all have preelaborable initialization.
+Moreover, a user-defined controlled type with a local override for the
+Initialize procedure does not have preelaborable initialization.>
+@xbullet<A view of a type has preelaborable initialization if it is an
+elementary type, an array type whose component type has preelaborable
+initialization, or a record type whose components all have preelaborable
+A @fa<pragma> Preelaborable_Initialization specifies that a type has
+preelaborable initialization. The form of this @fa<pragma> is as follows:
+@xindent<@b<pragma> Preelaborable_Initialization (@fa<direct_name>);
+This pragma must appear in the visible part of a package or generic package.
+If the pragma appears in the first list of declarative_items of a
+@fa<package_specification>, then the @fa<direct_name> shall denote the
+first subtype of a protected type without @fa<entry_declaration>s, private
+type, or private extension declared within the same package as the @fa<pragma>.
+If the @fa<pragma> is applied to a protected type, each component of the
+protected type shall have preelaborable initialization. If the @fa<pragma> is
+applied to a private type or a private extension, the full view of the type
+shall have preelaborable initialization. In addition to the places where
+Legality Rules normally apply, these rules apply also in the private part of
+an instance of a generic unit.
+If the @fa<pragma> appears in a @fa<generic_formal_part>, then the
+@fa<direct_name> shall denote a generic formal private type or a generic formal
+derived type declared in the same @fa<generic_formal_part> as the @fa<pragma>.
+In a @fa<generic_instantiation> the corresponding actual type shall have
+preelaborable initialization.
+!corrigendum C.4(4)
+@xbullet<Any @fa<subtype_mark> denotes a statically constrained subtype, with
+statically constrained subcomponents, if any;>
+@xbullet<No @fa<subtype_mark> denotes a controlled type, a
+private type, a private extension, a generic formal private type, a generic
+formal derived type, or a descendant of such a type;>
 !ACATS test

Questions? Ask the ACAA Technical Agent