CVS difference for ai12s/ai12-0003-1.txt
--- ai12s/ai12-0003-1.txt 2015/01/22 02:41:26 1.9
+++ ai12s/ai12-0003-1.txt 2015/01/23 22:56:30 1.10
@@ -1,18 +1,20 @@
-!standard 8.2(11) 14-05-25 AI12-0003-1/05
+!standard 8.2(11) 15-01-23 AI12-0003-1/06
!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.1/3)
!standard 13.11.3(6.2/3)
!class Amendment 11-06-19
!status work item 11-06-19
!status received 11-03-21
!priority Low
!difficulty Medium
-!subject Default storage pool for storage pools
+!subject Specifying the standard storage pool
!summary
The standard storage pool can be specified in a Default_Storage_Pool
-pragma.
+pragma or aspect.
!problem
@@ -40,52 +42,82 @@
region extending from immediately after the pragma
to end of the pragma's nearest enclosing declarative
region.
+
+Modify 13.11.3(3.1/3):
-Modify 13.11.3(3.1/3):
storage_pool_indicator ::= storage_pool_name | null {| Standard}
Modify 13.11.3 (4.1/3):
- 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.]
+ 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.
+ Except within the immediate scope of a later 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.
+
<<< AI Note: the wording carefully ties into 13.11, so that it works for
instances. >>>>
+ A direct_name shall not be a homograph of the package Standard that denotes a
+ declaration other than package Standard when declared within a compilation
+ unit for which the Standard default pool applies.
+
+ AARM Reason: Any use of an identifier with the name Standard resprensenting
+ anything other than the package Standard would be confusing in a compilation
+ unit with Standard specified as the default storage pool. Such a choice for
+ an identifier is not recommended and very unlikely to occur, so a simple rule
+ was chosen to prevent such confusion.
+
Add after 13.11.3(4.2/3):
- The Standard storage_pool_indicator is an identifier specific to a
+
+ 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
+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.
+
+Modify 13.11.3(5/3):
+
+ The language-defined aspect Default_Storage_Pool may be specified for a
+ generic instance; it defines the default pool for access types within an
+ instance. {The Default_Storage_Pool aspect may be specified as Standard,
+ which defines the default pool to be Standard, otherwise the} [The] expected
+ type for the Default_Storage_Pool aspect is Root_Storage_Pool'Class[.
+ The]{and the} aspect_definition must be a name that denotes a variable. This
+ aspect overrides any Default_Storage_Pool pragma that might apply to the
+ generic unit; if the aspect is not specified, the default pool of the
+ instance is that defined for the generic unit.
+
+Add after 13.11.3(6.1/3):
+
+ If the default pool is Standard, the implementation chooses a standard
+ storage pool for the Storage_Pool attribute in an implementation-defined
+ manner.
-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.
+Modify 13.11.3(6.2/3):
-Modify 13.11.3(6.2/3): If the default pool is {neither}
- [non]null {nor Standard}, the Storage_Pool attribute is that pool.
+ If the default pool is {neither} [non]null {nor Standard}, the Storage_Pool
+ attribute is that pool.
!discussion
@@ -93,17 +125,13 @@
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
-have a clever way of combining a general heap with pools of cached,
-equally-sized memory blocks.
-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
+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
+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
@@ -999,5 +1027,17 @@
Sent: Sunday, January 18, 2015 11:10 AM
OK, will do.
+
+****************************************************************
+
+From: Brad Moore
+Sent: Friday, January 23, 2015 12:26 AM
+
+Here is my homework. [This is version /06 of the AI - ED]
+
+The quick summary of the change is that one is not allowed to use the name
+Standard in a compilation unit if it refers to something other than the package
+Standard, when a Default_Storage_Pool aspect or pragma within that same
+compilation unit has the default pool specified as Standard.
****************************************************************
Questions? Ask the ACAA Technical Agent