CVS difference for ais/ai-00294.txt

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

--- ais/ai-00294.txt	2003/10/29 22:54:11	1.5
+++ ais/ai-00294.txt	2004/04/30 02:35:38	1.6
@@ -1,4 +1,4 @@
-!standard  3.9.3  (09)                                 02-05-23  AI95-00294/03
+!standard  3.9.3  (09)                                 04-04-22  AI95-00294/04
 !class ramification 03-05-23
 !status work item 02-05-16
 !status received 02-05-13
@@ -73,9 +73,8 @@
    is not abstract, the corresponding primitive subprogram
    of the actual shall not be abstract.
 
-because the corresponding subprogram in this case is
-not itself abstract (although it is overridden by an
-abstract subprogram).
+because the corresponding subprogram in this case is not itself abstract
+(although it is overridden by an abstract subprogram).
 
 Thus, the test is not rejected at compile time.
 
@@ -97,21 +96,45 @@
 an integer type parameter with Boolean as long as "+" and the other mathematics
 operators aren't called, so this case should not be any different.
 
-In order to clarify the wording, we add "(nonoverridden)" to 3.9.3(9).
+In order to clarify the intent, we add an AARM note.
 
-!corrigendum 3.9.3(09)
+!wording
 
-@drepl
-If a partial view is not abstract, the corresponding full view shall not be
-abstract. If a generic formal type is abstract, then for each primitive
-subprogram of the formal that is not abstract, the corresponding primitive
-subprogram of the actual shall not be abstract.
-@dby
-If a partial view is not abstract, the corresponding full view shall not be
-abstract. If a generic formal type is abstract, then for each primitive
-subprogram of the formal that is not abstract, the corresponding
-(nonoverridden) primitive subprogram of the actual shall not be abstract.
+Add the following AARM note after 3.9.3(9):
 
+To Be Honest
+
+In the sentence about primitive subprograms above, there is some ambiguity as to
+what is meant by "corresponding" in the case where an inherited operation is
+overridden.  This is best explained by an example, where the implicit
+declarations are shown as comments:
+
+    package P1 is
+	type T1 is abstract tagged null record;
+	procedure P (X : T1); -- (1)
+    end P1;
+
+    package P2 is
+	type T2 is abstract new P1.T1 with null record;
+      -- procedure P (X : T2); -- (2)
+	procedure P (X : T2) is abstract; -- (3)
+    end P2;
+
+    generic
+	type D is abstract new P1.T1 with private;
+      -- procedure P (X : D); -- (4)
+    procedure G (X : D);
+
+    ...
+
+    procedure I is new G (P2.T2);
+
+Type T2 inherits a non-abstract procedure P (2) from the primitive procedure P
+(1) of T1. P (2) is overridden by the explicitly declared abstract procedure P
+(3). Type D inherits a non-abstract procedure P (4) from P (1). In
+instantiation I, the operation corresponding to P (4) is the one which is not
+overridden, i.e., P (3): the overridden operation P (2) does not "reemerge".
+Therefore, the instantiation is illegal.
 
 !ACATS test
 

Questions? Ask the ACAA Technical Agent