CVS difference for ai22s/ai22-0024-1.html

Differences between 1.3 and version 1.4
Log of other versions for file ai22s/ai22-0024-1.html

--- ai22s/ai22-0024-1.html	2022/10/22 07:29:03	1.3
+++ ai22s/ai22-0024-1.html	2022/11/18 05:01:40	1.4
@@ -1,12 +1,12 @@
-<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0024-1/04</title>
+<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0024-1/05</title>
 <style type="text/css">
 table td,table th{padding:0}
-.c32{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:0pt;border-right-width:0pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:0pt;border-top-style:solid;background-c
olor:#f0f0f0;border-left-style:solid;border-bottom-width:0pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}
-.c8{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}
-.c16{border-spacing:0;border-collapse:collapse;margin-right:auto}
-.c17{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}
-.c27{color:inherit;text-decoration:inherit}
-.c18{height:0pt}
+.c14{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:0pt;border-right-width:0pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:0pt;border-top-style:solid;background-c
olor:#f0f0f0;border-left-style:solid;border-bottom-width:0pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}
+.c25{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}
+.c32{border-spacing:0;border-collapse:collapse;margin-right:auto}
+.c33{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}
+.c9{color:inherit;text-decoration:inherit}
+.c11{height:0pt}
 P.head{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:0pt; color:#000000; font-size:14pt; padding-bottom:0pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; orphans:2; widows:2; text-align:left; font-weight:
400; text-decoration:none; vertical-align:baseline; font-style:normal}
 H2.head{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:12pt; color:#000000; font-size:14pt; padding-bottom:6pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; page-break-after:avoid; orphans:2; widows:2; tex
t-align:left; font-weight:400; text-decoration:none; vertical-align:baseline; font-style:normal}
 P.inst{margin-bottom:0; margin-top:0; margin-left:18pt; margin-right:0; padding-top:9pt; color:#000000; font-size:12pt; padding-bottom:6pt; font-family:"Arial","Liberation Sans",sans-serif;line-height:1.15; orphans:2; widows:2; text-align:left; font-weigh
t:400; text-decoration:none; vertical-align:baseline; font-style:normal}
@@ -23,12 +23,12 @@
 SPAN.name{font-family:"Lucida Calligraphy",cursive; font-style:normal}
 SPAN.ins{color:#005500}
 SPAN.ntrm{font-family:"Arial","Liberation Sans",sans-serif}
-P.a5{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0;color:#000000;font-size:26pt;font-family:"Arial","Liberation Sans",sans-serif; padding-top:0pt; padding-bottom:3pt; line-height:1.15; page-break-after:avoid; orphans:2; widows:2; text-align
:left; font-weight:400; text-decoration:none; vertical-align:baseline; font-style:normal}
-SPAN.a35{text-decoration-skip-ink:none; -webkit-text-decoration-skip:none; color:#1155cc; text-decoration:underline}
+P.a4{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0;color:#000000;font-size:26pt;font-family:"Arial","Liberation Sans",sans-serif; padding-top:0pt; padding-bottom:3pt; line-height:1.15; page-break-after:avoid; orphans:2; widows:2; text-align
:left; font-weight:400; text-decoration:none; vertical-align:baseline; font-style:normal}
+SPAN.a34{text-decoration-skip-ink:none; -webkit-text-decoration-skip:none; color:#1155cc; text-decoration:underline}
 </style>
-</head><body class="c17 doc-content"><p class="a5">AI22-0024-1</p>
+</head><body class="c33 doc-content"><p class="a4">AI22-0024-1</p>
 <p class="head">!standard 3.9.3(7/5) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;22-10-21 &nbsp;AI22-0024-1/04</p>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;22-11-17 &nbsp;AI22-0024-1/05</p>
 <p class="head">!standard 4.1.3(9.2/3)</p>
 <p class="head">!class binding interpretation 22-01-20</p>
 <p class="head">!status Corrigendum 1-2022 &nbsp;22-09-09</p>
@@ -52,8 +52,8 @@
 <h2 class="head">!issue</h2>
 <p class="text">Following is a distillation of another ACATS test that gets different results </p>
 <p class="text">in different Ada 2012 compilers:</p>
-<a id="t.0539a8d78e6c3da25e277d06a9eed551b6241ac7"></a><a id="t.0"></a><table class="c16"><tr class="c18"></tr></table><p class="text">&nbsp;</p>
-<a id="t.0a83fcf6f0060650be3d1940649573282238d897"></a><a id="t.1"></a><table class="c16"><tr class="c18"><td class="c32">
+<a id="t.0539a8d78e6c3da25e277d06a9eed551b6241ac7"></a><a id="t.0"></a><table class="c32"><tr class="c11"></tr></table><p class="text">&nbsp;</p>
+<a id="t.0a83fcf6f0060650be3d1940649573282238d897"></a><a id="t.1"></a><table class="c32"><tr class="c11"><td class="c14">
 <p class="codt"><b>procedure</b> B950001 <b>is</b><br>
  &nbsp; <b>package</b> Nested <b>is</b><br>
  &nbsp; &nbsp; &nbsp;<b>type</b> Intf <b>is</b> <b>synchronized</b> <b>interface</b>;<br>
@@ -94,7 +94,7 @@
 
 <p class="txts">The test also renames these calls:</p>
 
-<a id="t.99e97e28b61f37c8758585a612fac6cc328ca2d4"></a><a id="t.2"></a><table class="c16"><tr class="c18"><td class="c32">
+<a id="t.99e97e28b61f37c8758585a612fac6cc328ca2d4"></a><a id="t.2"></a><table class="c32"><tr class="c11"><td class="c14">
 <p class="codt"><b>procedure</b> RPE139 <b>renames</b> Intf_In_Parm.PEN1; &nbsp;-- ERROR: Prefix is
 constant<br>
 <b>procedure</b> RPE149 <b>renames</b> Intf_In_Out_Parm.PEN1; -- OK. Prefix is variable</p>
@@ -109,16 +109,16 @@
 <ul class="wbl"><li>For the purposes of defining the primitive operations of the formal type, each
 of the primitive operations of the actual type is considered to be a subprogram (with an intrinsic
 calling convention &mdash; see
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-3-1.html">6.3.1</a></span>)
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-3-1.html">6.3.1</a></span>)
 whose body consists of a dispatching call upon the corresponding operation of <i>T</i>, with its
 formal parameters as the actual parameters. If it is a function, the result of the dispatching call
 is returned.</li>
 <li>If the corresponding operation of <i>T</i> has no controlling formal parameters, then the
 controlling tag value is determined by the context of the call, according to the rules for
 tag-indeterminate calls (see
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-3-9-2.html">3.9.2</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-3-9-2.html">3.9.2</a></span>
 and
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-5-2.html">5.2</a></span>).
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-5-2.html">5.2</a></span>).
 In the case where the tag would be statically determined to be that of the formal type, the call
 raises Program_Error. If such a function is renamed, any call on the renaming raises
 Program_Error.</li>
@@ -129,29 +129,29 @@
 <p class="text">If we look at the current rules relating to prefixed views, we find that the
 profile of a prefixed view is defined in 4.1.3(9.2/3):</p>
 <p class="wrds">The
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
 denotes a view of this subprogram that omits the first formal parameter. This view is called a
 <i>prefixed view</i> of the subprogram, and the
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of the
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
 (after any implicit dereference) is called the <i>prefix</i> of the prefixed view.</p>
 
 <p class="text">&nbsp;The semantics of a call on a prefixed view are given in RM 6.4(9.1/5):</p>
 <p class="wrds">If the
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
 or
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of a subprogram call denotes a prefixed view (see
-<span class="a35"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html">4.1.3</a></span>),
+<span class="a34"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html">4.1.3</a></span>),
 the subprogram call is equivalent to a call on the underlying subprogram, with the first actual
 parameter being provided by the
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of the prefixed view (or the Access attribute of this
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 if the first formal parameter is an access parameter), and the remaining actual parameters given by
 the
-<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-4.html#S0219">actual_parameter_part</a></span>,
+<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-4.html#S0219">actual_parameter_part</a></span>,
 if any. </p>
 
 <p class="txts">This does not clarify the properties of a <i>renaming</i> of a prefixed view when
@@ -182,31 +182,29 @@
 subprogram, and the <span class="ntrm">prefix</span> of the
 <span class="ntrm">selected_component</span><span class="ntrm"> </span>(after any implicit
 dereference) is called the <i>prefix</i> of the prefixed view. <span class="ins">{In the special
-case where the <span class="ntrm">prefix </span>is class-wide and controlling, the prefixed view is
-not abstract, even if the &nbsp;unprefixed view is abstract; otherwise the prefixed view is
-abstract if and</span></p>
+case where the prefix is class-wide and controlling, the prefixed view is not abstract, even if the
+&nbsp;unprefixed view is abstract; otherwise the prefixed view is abstract if and</span></p>
 <p class="wrds"><span class="ins">only if the unprefixed view is abstract.</span></p>
 
 <p class="word"><span class="ins">In the context of a subprogram renaming (see 8.5.4) or the
-matching of an actual subprogram with a formal subprogram (see 12.6), a prefixed view whose
-<span class="ntrm">prefix</span> is class-wide and controlling shall have an expected profile such
-that each formal parameter or result type corresponding to a controlling parameter (or access
-parameter) or controlling result (or access result) in the unprefixed view, is (or designates) the
-same class-wide type as the <span class="ntrm">prefix</span>. In a renaming or matching of a
-prefixed view whose prefix is of a specific type or is not controlling, the unprefixed view shall
-not be abstract and the types of the formal parameters or result in the expected profile shall
-match those of the corresponding formal parameters or result of the unprefixed view. [Redundant: In
-either case, any constraints, null exclusions, or predicates on the formal parameters or results in
-the view declared by the renaming or instantiation come from the unprefixed view, as in the normal
-case.] When renaming or matching a prefixed view whose prefix is tag-indeterminate and controlling,
-the controlling tag is statically determined to be that of the type of the prefix.}</span></p>
+matching of an actual subprogram with a formal subprogram (see 12.6), a prefixed view whose prefix
+is class-wide and controlling shall have an expected profile such that each formal parameter or
+result type corresponding to a controlling parameter (or access parameter) or controlling result
+(or access result) in the unprefixed view, is (or designates) the same class-wide type as the
+prefix. In a renaming or matching of a prefixed view whose prefix is of a specific type or is not
+controlling, the unprefixed view shall not be abstract and the types of the formal parameters or
+result in the expected profile shall match those of the corresponding formal parameters or result
+of the unprefixed view. [Redundant: In either case, any constraints, null exclusions, or predicates
+on the formal parameters or results in the view declared by the renaming or instantiation come from
+the unprefixed view, as in the normal case.] When renaming or matching a prefixed view whose prefix
+is tag-indeterminate and controlling, the controlling tag is statically determined to be that of
+the type of the prefix.}</span></p>
 <p class="inst">Modify 6.4(9.1/5):</p>
 <p class="wrds">If the <span class="ntrm">name</span> or <span class="ntrm">prefix</span> of a
 subprogram call denotes a prefixed view (see 4.1.3), the subprogram call is equivalent to a call on
-the underlying subprogram, with the first actual parameter being provided by the
-<span class="ntrm">prefix</span> of the prefixed view (or the Access attribute of this
-<span class="ntrm">prefix</span><span class="ntrm"> </span>if the first formal parameter is an
-access parameter), and the remaining actual parameters given by the
+the underlying subprogram, with the first actual parameter being provided by the prefix of the
+prefixed view (or the Access attribute of this prefix if the first formal parameter is an access
+parameter), and the remaining actual parameters given by the
 <span class="ntrm">actual_parameter_part</span>, if any. <span class="ins">{[Redundant: In the case
 where the prefix is class-wide and controlling, if there are multiple controlling parameters, a
 check is made that they all have the same tag, as defined in 3.9.2. A call on a renaming of a
@@ -242,7 +240,8 @@
 
 <ul class="bull"><li>In the case where there the first parameter of the underlying abstract
 subprogram is the only controlling parameter, then there are two cases:</li>
-<ul><li>if the type of the prefix is class-wide, a call would be a legal dispatching
+</ul>
+<ul class="bull"><li>if the type of the prefix is class-wide, a call would be a legal dispatching
 call and the other parameters (if any) have no effect on that. So in this case, we should allow the
 prefixed view to be created, and it should not be abstract, and it should <i>always</i> do a
 dispatching call &quot;internally&quot;.</li>
@@ -250,7 +249,7 @@
 abstract operation, and again the other parameters have no effect on that. So in that case, a
 renaming of the prefixed view might as well be illegal.</li>
 </ul>
-<li>In the case where the first parameter of the unprefixed view is not a
+<ul class="blts"><li>In the case where the first parameter of the unprefixed view is not a
 controlling parameter (it still needs to be tagged; it might be class-wide), then one or more of
 the remaining parameters might be controlling parameter(s). In such a case, we propose that the
 renaming be legal only if the unprefixed view is <i>not</i> abstract, for simplicity (we could some
@@ -269,7 +268,7 @@
 
 <p class="txts">It might help to look at an example:</p>
 
-<a id="t.6eb1b62e67134fed732e2319eb5d650e67ac3f6d"></a><a id="t.3"></a><table class="c16"><tr class="c18"><td class="c32">
+<a id="t.6eb1b62e67134fed732e2319eb5d650e67ac3f6d"></a><a id="t.3"></a><table class="c32"><tr class="c11"><td class="c14">
 <p class="codt"><b>package</b> P1 <b>is</b><br>
  &nbsp; <b>type</b> Intf <b>is</b> <b>interface</b>;<br>
  &nbsp; <b>function</b> F1 (A : <b>in</b> Intf; B : <b>in</b> Natural)<br>
@@ -307,7 +306,7 @@
  &nbsp; &nbsp; &nbsp;<b>null</b>;<br>
  &nbsp; <b>end</b> <b>if</b>;<br>
 <b>end</b> Test;</p>
-</td></tr><tr class="c18"><td class="c32">
+</td></tr><tr class="c11"><td class="c14">
 <p class="codt">&nbsp;</p>
 </td></tr></table><p class="text">&nbsp;</p>
 <p class="text">R1a and R1b correspond to the two alternatives of the first case above. R1a is
@@ -323,6 +322,50 @@
 class-wide parameter where before it had a controlling parameter. &nbsp;Internally R3 does a
 dispatching call, with a Tag_Check, but from the &quot;outside&quot; it is now a class-wide
 operation.</p>
+<h2 class="head">!corrigendum 4.1.3(9.2/3)</h2>
+<p class="text">@drepl</p>
+<p class="text">The @fa{selected_component} denotes a view of this subprogram that omits the first
+formal parameter. This view is called a @i{prefixed view} of the subprogram, and the @fa{prefix} of
+the @fa{selected_component} (after any implicit dereference) is called the @i{prefix} of the
+prefixed view.</p>
+<p class="text">@dby</p>
+<p class="text">The @fa{selected_component} denotes a view of this subprogram that omits the first
+formal parameter. This view is called a @i{prefixed view} of the subprogram, and the @fa{prefix} of
+the @fa{selected_component} (after any implicit dereference) is called the @i{prefix} of the
+prefixed view. In the special case where the prefix is class-wide and controlling, the prefixed
+view is not abstract, even if the &nbsp;unprefixed view is abstract; otherwise the prefixed view is
+abstract if and</p>
+<p class="txts">only if the unprefixed view is abstract.</p>
+
+<p class="text">In the context of a subprogram renaming (see 8.5.4) or the matching of an actual
+subprogram with a formal subprogram (see 12.6), a prefixed view whose prefix is class-wide and
+controlling shall have an expected profile such that each formal parameter or result type
+corresponding to a controlling parameter (or access parameter) or controlling result (or access
+result) in the unprefixed view, is (or designates) the same class-wide type as the prefix. In a
+renaming or matching of a prefixed view whose prefix is of a specific type or is not controlling,
+the unprefixed view shall not be abstract and the types of the formal parameters or result in the
+expected profile shall match those of the corresponding formal parameters or result of the
+unprefixed view. In either case, any constraints, null exclusions, or predicates on the formal
+parameters or results in the view declared by the renaming or instantiation come from the
+unprefixed view, as in the normal case. When renaming or matching a prefixed view whose prefix is
+tag-indeterminate and controlling, the controlling tag is statically determined to be that of the
+type of the prefix.</p>
+<h2 class="head">!corrigendum 6.4(9.1/5)</h2>
+<p class="text">@drepl</p>
+<p class="text">If the @fa{name} or @fa{prefix} of a subprogram call denotes a prefixed view (see
+4.1.3), the subprogram call is equivalent to a call on the underlying subprogram, with the first
+actual parameter being provided by the prefix of the prefixed view (or the Access attribute of this
+prefix if the first formal parameter is an access parameter), and the remaining actual parameters
+given by the @fa{actual_parameter_part}, if any.</p>
+<p class="text">@dby</p>
+<p class="text">If the @fa{name} or @fa{prefix} of a subprogram call denotes a prefixed view (see
+4.1.3), the subprogram call is equivalent to a call on the underlying subprogram, with the first
+actual parameter being provided by the prefix of the prefixed view (or the Access attribute of this
+prefix if the first formal parameter is an access parameter), and the remaining actual parameters
+given by the @fa{actual_parameter_part}, if any. In the case where the prefix is class-wide and
+controlling, if there are multiple controlling parameters, a check is made that they all have the
+same tag, as defined in 3.9.2. A call on a renaming of a prefixed view results in a dispatching
+call if the prefix of the prefixed view is class-wide and controlling.</p>
 <h2 class="head">!ACATS test</h2>
 <p class="text">The existing B950001 contains these cases (now commented out).</p>
 <h2 class="head">!appendix</h2>

Questions? Ask the ACAA Technical Agent