Version 1.4 of ai12s/ai12-0203-1.txt
!standard 4.1.5(5.1/4) 17-04-25 AI12-0203-1/03
!standard 4.1.5(7/3)
!class presentation 16-10-06
!status Amendment 1-2012 16-11-10
!status ARG Approved 10-0-0 16-10-08
!status work item 16-10-06
!status received 16-09-08
!priority Low
!difficulty Easy
!qualifier Clarification
!subject Overriding a nonoverridable aspect
!summary
A nonoverridable aspect can nevertheless be specified by an
aspect specifictaion provided the value is unchanged.
!question
4.1.5(5.1/4) says:
The Implicit_Dereference aspect is nonoverridable (see 13.1.1).
while 4.1.5(7/3) starts:
Given a reference type T, the Implicit_Dereference aspect is
inherited by descendants of type T if not overridden.
Since the aspect can't be overridden, why the "if not overridden" above?
!recommendation
A nonoverridable aspect can have a confirming aspect value specified,
and that is the case that has to be covered by the 4.1.5(7/3) sentence.
A clarification is suggested.
(See Summary.)
!wording
Modify 4.1.5(7/3):
Given a reference type T, the Implicit_Dereference aspect is inherited
by descendants of type T if not overridden{ Redundant[(which is only
permitted if confirming)]}. If a descendant type constrains the value of
the reference discriminant of T by a new discriminant, that new
discriminant is the reference discriminant of the descendant.
Redundant[If the descendant type
constrains the value of the reference discriminant of T by an expression
other than the name of a new discriminant, a generalized_reference that
identifies an object of the descendant type denotes the object or
subprogram designated by the value of this constraining expression.]
!discussion
(See !recommendation.)
!corrigendum 4.1.5(7/3)
Replace the paragraph:
Given a reference type T, the Implicit_Dereference aspect is inherited by
descendants of type T if not overridden. If a descendant type constrains
the value of the reference discriminant of T by a new discriminant, that
new discriminant is the reference discriminant of the descendant. If the
descendant type constrains the value of the reference discriminant of T by
an expression other than the name of a new discriminant, a
generalized_reference that identifies an object of the descendant type
denotes the object or subprogram designated by the value of this constraining
expression.
by:
Given a reference type T, the Implicit_Dereference aspect is inherited by
descendants of type T if not overridden (which is only permitted if
confirming). If a descendant type constrains
the value of the reference discriminant of T by a new discriminant, that
new discriminant is the reference discriminant of the descendant. If the
descendant type constrains the value of the reference discriminant of T by
an expression other than the name of a new discriminant, a
generalized_reference that identifies an object of the descendant type
denotes the object or subprogram designated by the value of this constraining
expression.
!ASIS
No ASIS effect.
!ACATS test
No ACATS test needed.
!appendix
The original issue was raised privately by Steve Baird; another AdaCore
person independently raised the issue a few days later. The wording was
suggested by Tucker Taft.
****************************************************************
Questions? Ask the ACAA Technical Agent