+2015-05-28 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_util.adb (Wrong_Type): In any instance, do not emit error
+ if type of expression is the partial view of the expected type.
+
+2015-05-28 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_res.adb (Resolve_Actuals): a) The replacement of formal
+ names in named associations only needs to be done within an
+ instance, on a call to a primitive of a formal derived type,
+ where the actual subprogram may have different formal names than
+ those of the primitive operation of the formal type.
+ b) Defaulted parameters must be taken into account when obtaining
+ the names of the formals of the actual subprogram being called.
+
2015-05-28 Robert Dewar <dewar@adacore.com>
* sem_ch13.adb, sem_disp.ads: Minor reformatting.
Real_F : Entity_Id;
Real_Subp : Entity_Id;
- -- If the subprogram being called is an overridden operation,
- -- Real_Subp is the subprogram that will be called. It may have
- -- different formal names than the overridden operation, so after
- -- actual is resolved, the name of the actual in a named association
- -- must carry the name of the actual of the subprogram being called.
+ -- If the subprogram being called is an inherited operation for
+ -- a formal derived type in an instance, Real_Subp is the subprogram
+ -- that will be called. It may have different formal names than the
+ -- operation of the formal in the generic, so after actual is resolved
+ -- the name of the actual in a named association must carry the name
+ -- of the actual of the subprogram being called.
procedure Check_Aliased_Parameter;
-- Check rules on aliased parameters and related accessibility rules
if Is_Overloadable (Nam)
and then Is_Inherited_Operation (Nam)
+ and then In_Instance
and then Present (Alias (Nam))
and then Present (Overridden_Operation (Alias (Nam)))
then
Next_Actual (A);
- if Present (Real_Subp) then
- Next_Formal (Real_F);
- end if;
-
-- Case where actual is not present
else
end if;
Next_Formal (F);
+
+ if Present (Real_Subp) then
+ Next_Formal (Real_F);
+ end if;
end loop;
end Resolve_Actuals;
and then Covers (Full_View (Expected_Type), Etype (Expr))
then
return;
+
+ -- Conversely, type of expression may be the private one.
+
+ elsif Is_Private_Type (Base_Type (Etype (Expr)))
+ and then Full_View (Base_Type (Etype (Expr))) =
+ Expected_Type
+ then
+ return;
+
end if;
end if;