[Ada] Adding support for unsupported type conversion in CCG

2019-12-13  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_N_Unchecked_Type_Conversion): Generate an
	extra temporary for cases unsupported by the C backend.

From-SVN: r279356
This commit is contained in:
Javier Miranda 2019-12-13 09:04:43 +00:00 committed by Pierre-Marie de Rodat
parent cfedf3e51b
commit 02458cc742
2 changed files with 26 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2019-12-13 Javier Miranda <miranda@adacore.com>
* exp_ch4.adb (Expand_N_Unchecked_Type_Conversion): Generate an
extra temporary for cases unsupported by the C backend.
2019-12-13 Steve Baird <baird@adacore.com>
* einfo.ads: Correct comment for Derived_Type_Link to reflect

View File

@ -12471,6 +12471,27 @@ package body Exp_Ch4 is
end;
end if;
-- Generate an extra temporary for cases unsupported by the C backend
if Modify_Tree_For_C then
declare
Source : constant Node_Id := Unqual_Conv (Expression (N));
Source_Typ : Entity_Id := Get_Full_View (Etype (Source));
begin
if Is_Packed_Array (Source_Typ) then
Source_Typ := Packed_Array_Impl_Type (Source_Typ);
end if;
if Nkind (Source) = N_Function_Call
and then (Is_Composite_Type (Etype (Source))
or else Is_Composite_Type (Target_Type))
then
Force_Evaluation (Source);
end if;
end;
end if;
-- Nothing to do if conversion is safe
if Safe_Unchecked_Type_Conversion (N) then