Commit a760d142 by Gary Dismukes Committed by Pierre-Marie de Rodat

[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
parent 64c6e367
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> 2019-12-18 Ed Schonberg <schonberg@adacore.com>
* par-ch12.adb (P_Formal_Derived_Type_Definition): In Ada_2020 * par-ch12.adb (P_Formal_Derived_Type_Definition): In Ada_2020
......
...@@ -11827,12 +11827,35 @@ package body Sem_Res is ...@@ -11827,12 +11827,35 @@ package body Sem_Res is
Set_Etype (Expression (N), Opnd); Set_Etype (Expression (N), Opnd);
end if; 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 if Is_Access_Type (Opnd) then
Opnd := Designated_Type (Opnd); 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; end if;
if Is_Access_Type (Target_Typ) then if Is_Access_Type (Target_Typ) then
Target := Designated_Type (Target); 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; end if;
if Opnd = Target then if Opnd = Target then
...@@ -11840,6 +11863,10 @@ package body Sem_Res is ...@@ -11840,6 +11863,10 @@ package body Sem_Res is
-- Conversion from interface type -- 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 elsif Is_Interface (Opnd) then
-- Ada 2005 (AI-217): Handle entities from limited views -- Ada 2005 (AI-217): Handle entities from limited views
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment