[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:
parent
cfedf3e51b
commit
02458cc742
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user