CVS difference for ais/ai-00147.txt

Differences between 1.6 and version 1.7
Log of other versions for file ais/ai-00147.txt

--- ais/ai-00147.txt	1999/04/20 19:45:55	1.6
+++ ais/ai-00147.txt	1999/07/28 00:08:44	1.7
@@ -1,4 +1,4 @@
-!standard 07.06    (21)                               99-03-25  AI95-00147/06
+!standard 07.06    (21)                               99-07-27  AI95-00147/07
 !class binding interpretation 96-06-06
 !status ARG Approved 6-0-2  99-03-26
 !status work item 98-04-01
@@ -23,12 +23,12 @@
 Finalize calls and associated assignment operations on an object of
 non-limited controlled type if
   a) any usage of the value of the object after the implicit Initialize or
-     Adjust call and before any subsequent Finalize call on the object 
+     Adjust call and before any subsequent Finalize call on the object
      does not affect the external effect of any program execution, and
-  b) after the omission of such calls and operations, any execution of 
-     the program that executes an Initialize or Adjust call on an object 
-     or initializes an object by an aggregate will also later execute a 
-     Finalize call on the object and will always do so prior to assigning 
+  b) after the omission of such calls and operations, any execution of
+     the program that executes an Initialize or Adjust call on an object
+     or initializes an object by an aggregate will also later execute a
+     Finalize call on the object and will always do so prior to assigning
      a new value to the object.
 This permission applies even if the implicit calls have additional effects.
 
@@ -323,7 +323,12 @@
 objects of a certain type).  The sentence therefore needs to be
 amended to exclude the optimization in this case.
 
+!ACATS test
 
+This ruling gives permissions for optimizations. Such permissions aren't
+testable. However, a test that an implementation doesn't try to use the old
+7.6(21) where it would be prohibited by the new rules would be valuable.
+
 !appendix
 
 !section 7.6(21)
@@ -1085,18 +1090,18 @@
 
 > I can think of three possible interpretations of Tucker's "intermediate
 > position":
-> 
+>
 > 1) He means all of the permissions of this AI. That would mean that the
 > assignment of a type with a user-defined initialize routine gets the
 > canonical semantics - which means two Adjusts and two Finalizes.
-> 
-> I certainly hope this isn't what Tucker meant. 
+>
+> I certainly hope this isn't what Tucker meant.
 
 It isn't.
 
 > 2) He means just the permission to remove Initialize calls, and he meant
 > what he said: user-defined Initialize calls cannot be removed.
-> 
+>
 > Such a position is exactly the same as saying that Initialize calls can't
 > be removed - as the predefined Initialize does nothing. I don't see how
 > this can be an "intermediate" position - it seems to be a complex way of
@@ -1109,7 +1114,7 @@
 final rule more simply, but I was trying to relate it to
 the existing proposal.  It means effectively that user-defined Initialize
 calls cannot be optimized away (unless the compiler "looks inside" them
-somehow).  In my experience, user-defined Initialize procedures are 
+somehow).  In my experience, user-defined Initialize procedures are
 relatively rare for non-limited controlled types.  (Your experience
 may of course differ.)  They are needed only if there is some
 kind of default initialization that needs protection against
@@ -1126,7 +1131,7 @@
 
 Nope, I didn't mean that.
 
-Basically I was convinced by the well-founded claim that many Ada 
+Basically I was convinced by the well-founded claim that many Ada
 programmers avoid "limitedness" like the plague.  However, to use
 a controlled type to do something like seize a lock, you pretty
 much have to have a user-defined Initialize routine, so that seems

Questions? Ask the ACAA Technical Agent