[Ada] Missing accessibility actuals on calls to interface conversion functions

2019-12-18  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* sem_res.adb (Resolve_Type_Conversion): Add handling for access
	types with designated operand and target types that are
	referenced in places that have a limited view of an interface
	type by retrieving the nonlimited view when it exists.  Add ???
	comments related to missing limited_with_clause handling for
	Target (in the non-access case).

From-SVN: r279513
This commit is contained in:
Gary Dismukes 2019-12-18 07:14:59 +00:00 committed by Pierre-Marie de Rodat
parent 64c6e3673a
commit a760d14246
2 changed files with 36 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2019-12-18 Gary Dismukes <dismukes@adacore.com>
* sem_res.adb (Resolve_Type_Conversion): Add handling for access
types with designated operand and target types that are
referenced in places that have a limited view of an interface
type by retrieving the nonlimited view when it exists. Add ???
comments related to missing limited_with_clause handling for
Target (in the non-access case).
2019-12-18 Ed Schonberg <schonberg@adacore.com>
* par-ch12.adb (P_Formal_Derived_Type_Definition): In Ada_2020

View File

@ -11827,12 +11827,35 @@ package body Sem_Res is
Set_Etype (Expression (N), Opnd);
end if;
-- It seems that Non_Limited_View should also be applied for
-- Target when it has a limited view, but that leads to missing
-- error checks on interface conversions further below. ???
if Is_Access_Type (Opnd) then
Opnd := Designated_Type (Opnd);
-- If the type of the operand is a limited view, use nonlimited
-- view when available. If it is a class-wide type, recover the
-- class-wide type of the nonlimited view.
if From_Limited_With (Opnd)
and then Has_Non_Limited_View (Opnd)
then
Opnd := Non_Limited_View (Opnd);
end if;
end if;
if Is_Access_Type (Target_Typ) then
Target := Designated_Type (Target);
-- If the target type is a limited view, use nonlimited view
-- when available.
if From_Limited_With (Target)
and then Has_Non_Limited_View (Target)
then
Target := Non_Limited_View (Target);
end if;
end if;
if Opnd = Target then
@ -11840,6 +11863,10 @@ package body Sem_Res is
-- Conversion from interface type
-- It seems that it would be better for the error checks below
-- to be performed as part of Validate_Conversion (and maybe some
-- of the error checks above could be moved as well?). ???
elsif Is_Interface (Opnd) then
-- Ada 2005 (AI-217): Handle entities from limited views