Incomplete_Or_Partial_View (T);
begin
- if not Overrides_Visible_Function (Partial_View) then
+ if not Overrides_Visible_Function (Partial_View)
+ and then
+ Is_Tagged_Type
+ (if Present (Partial_View) then Partial_View else T)
+ then
-- Here, S is "function ... return T;" declared in
-- the private part, not overriding some visible
-- operation. That's illegal in the tagged case
-- (but not if the private type is untagged).
- if ((Present (Partial_View)
- and then Is_Tagged_Type (Partial_View))
- or else (No (Partial_View)
- and then Is_Tagged_Type (T)))
- and then T = Base_Type (Etype (S))
- then
+ if T = Base_Type (Etype (S)) then
Error_Msg_N
- ("private function with tagged result must"
+ ("private function with controlling result must"
& " override visible-part function", S);
Error_Msg_N
("\move subprogram to the visible part"
& " (RM 3.9.3(10))", S);
-- Ada 2012 (AI05-0073): Extend this check to the case
- -- of a function whose result subtype is defined by an
- -- access_definition designating specific tagged type.
+ -- of a function with access result type.
elsif Ekind (Etype (S)) = E_Anonymous_Access_Type
- and then Is_Tagged_Type (Designated_Type (Etype (S)))
- and then
- not Is_Class_Wide_Type
- (Designated_Type (Etype (S)))
+ and then T = Base_Type (Designated_Type (Etype (S)))
and then Ada_Version >= Ada_2012
then
Error_Msg_N