CVS difference for ai12s/ai12-0003-1.txt
--- ai12s/ai12-0003-1.txt 2013/06/10 21:47:44 1.5
+++ ai12s/ai12-0003-1.txt 2014/06/19 05:04:45 1.6
@@ -1,10 +1,8 @@
-!standard 3.10.2(13.2/3) 13-06-10 AI12-0003-1/04
-!standard 13.11.3(1/3)
-!standard 13.11.3(3.2/3)
+!standard 8.2(11) 15-05-25 AI12-0003-1/05
+!standard 13.11.3(3.1/3)
!standard 13.11.3(4.1/3)
!standard 13.11.3(4.2/3)
-!standard 13.11.3(5/3)
-!standard 13.11.3(6/3)
+!standard 13.11.3(6.2/3)
!class Amendment 11-06-19
!status work item 11-06-19
!status received 11-03-21
@@ -13,7 +11,8 @@
!subject Default storage pool for storage pools
!summary
-A pragma Standard_Storage_Pool is introduced.
+The standard storage pool can be specified in a Default_Storage_Pool
+pragma.
!problem
@@ -23,9 +22,9 @@
!proposal
-Add a pragma to achieve the effect of returning to the "standard"
-allocation method used by the implementation, usually the use of a
-general heap.
+Add a new argument to the Default_Storage_Pool pragma to achieve the
+effect of returning to the "standard" allocation method used by the
+implementation, usually the use of a general heap.
!wording
@@ -38,81 +37,70 @@
to end of the pragma's nearest enclosing declarative
region.
-Reinstate 13.11.3 (1/4) to read:
-Two storage pool pragmas can be used to control the setting of a
-default storage pool for access types: Default_Storage_Pool and
-Standard_Storage_Pool.
-
-
-Add after 13.11.3 (3.1/3)
- pragma Standard_Storage_Pool;
-
-
-Change 13.11.3 (3.2/3) to read:
-{A storage pool pragma} [A pragma Default_Storage_Pool]
-is allowed immediately within the visible part of a package_specification,
-immediately within a declarative_part, or as a configuration pragma.
-
-Change 13.11.3 (4.1/3) from
- "If the pragma is used as a configuration pragma, the
- storage_pool_indicator shall be null, and it defines the default
- pool to be null within all applicable compilation units (see
- 10.1.5), except within the immediate scope of another pragma
- Default_Storage_Pool. Otherwise, [the pragma occurs immediately
- within a sequence of declarations, and] it defines the default pool
- within the immediate scope of the pragma to be either null or the
- pool denoted by the storage_pool_name, except within the immediate
- scope of a later pragma Default_Storage_Pool. Redundant[Thus, an inner
- pragma overrides an outer one.]"
-
-to
-
- If the Default_Storage_Pool pragma is used as a
- configuration pragma, the storage_pool_indicator shall be null, and
- it defines the default pool to be null within all applicable
- compilation units (see 10.1.5), except within the immediate scope of
- another storage pool pragma. Otherwise, [the pragma occurs
- immediately within a sequence of declarations, and] it defines the
- default pool within the immediate scope of the pragma to be either
- null or the pool denoted by the storage_pool_name, except within the
- immediate scope of a later storage pool pragma. Redundant[Thus, an inner
- pragma overrides an outer one.]
-
-Add after 13.11.3 (4.1/3)
-Except within the immediate scope of another storage pool pragma, the
-Standard_Storage_Pool pragma causes the storage pool of any access type
-to be the standard storage pool as described in 13.11.
+Modify 13.11.3(3.1/3):
+ storage_pool_indicator ::= storage_pool_name | null {| Standard}
-<<< AI Note: the wording carefully ties into 13.11, so that it works for
-instances. >>>>
-
-
-Change 13.11.3 (4.2/3) to read:
+Modify 13.11.3 (4.1/3):
-A {storage pool} pragma [Default_Storage_Pool] shall not be used as a
- configuration pragma that applies to a compilation unit that is
- within the immediate scope of another {storage pool} pragma[
- Default_Storage_Pool].
+ If the pragma is used as a configuration pragma, the
+ storage_pool_indicator shall be {either} null {or Standard}, and it
+ defines the default pool to be {respectively} null {or Standard} within
+ all applicable compilation units (see 10.1.5), except within the
+ immediate scope of another pragma Default_Storage_Pool. Otherwise, [the
+ pragma occurs immediately within a sequence of declarations, and] it
+ defines the default pool within the immediate scope of the pragma to be
+ either null{, Standard,} or the pool denoted by the storage_pool_name,
+ except within the immediate scope of a later pragma
+ Default_Storage_Pool. Redundant [Thus, an inner pragma overrides an
+ outer one.]
+
+Add after 13.11.3 (4.1/3):
+ Except within the immediate scope of another
+ Default_Storage_Pool pragma, the Standard storage_pool_indicator causes
+ the storage pool of any access type to be the standard storage pool as
+ described in 13.11.
-Modify 13.11.3 (5/3) to read
- This aspect overrides any {storage pool}[Default_Storage_Pool] pragma
- that might apply to the generic unit.
+<<< AI Note: the wording carefully ties into 13.11, so that it works for
+instances. >>>>
+Add after 13.11.3(4.2/3):
+ The Standard storage_pool_indicator is an identifier specific to a
+ pragma (see 2.8) and does not denote any declaration.
+
+AARM Ramification: The standard storage pool is not an object of the
+ Standard package and is not restricted to having
+ Preelaborable_Initialization.
+
+AARM Reason: The Standard storage_pool_indicator does not resolve to the
+ package Standard as it is an identifier specific to a pragma. Resolving
+ to package Standard would imply that the standard pool is an object
+ declared in that package. A storage pool object however must be a
+ variable (see 13.11), yet preelaborable packages depend on package
+ Standard, which would require implementers to implement the standard
+ storage pool with Preelaborable_Initialization, which is an unnecessary
+ restriction.
-After 13.11.3 (9.c/3) add
-The pragma Standard_Storage_Pool is new.
+Modify 13.11.3(6.2/3): If the default pool is {neither}
+ [non]null {nor Standard}, the Storage_Pool attribute is that pool.
!discussion
We do not want to give the standard storage pool a name, since it
should remain implementation-defined whether, in the absence of
user-provided storage pools, the storage pool model is used by the
-implementation at all. Specifically it might just go for the heap, or
+implementation at all.
+
+Specifically it might just go for the heap, or
have a clever way of combining a general heap with pools of cached,
equally-sized memory blocks.
-A pragma that causes the implementation to revert to the standard
-allocation method seemed best to achieve the desired capability.
+Specifically it might just go for the heap, or have a clever way of
+combining a general heap with pools of cached, equally-sized memory
+blocks.
+
+Extending the Default_Storage_Pool pragma to allow it to cause the
+implementation to revert to the standard allocation method seemed best
+to achieve the desired capability.
!ACATS test
Questions? Ask the ACAA Technical Agent