[Ada] Couple of small tweaks related to integer conversions

2020-06-17  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Get_Integer_Type): Use standard types without
	a specific size.
	* sem_res.adb (Resolve_Unchecked_Type_Conversion): Remove a
	redundant intermediate conversion to Universal_Integer.
This commit is contained in:
Eric Botcazou 2020-04-14 11:20:18 +02:00 committed by Pierre-Marie de Rodat
parent c3a2dc654c
commit 4ea4df3af8
2 changed files with 19 additions and 7 deletions

View File

@ -1756,17 +1756,17 @@ package body Exp_Attr is
begin
-- We need to accommodate unsigned values
if Siz < 8 then
Int_Typ := Standard_Integer_8;
if Siz < RM_Size (Standard_Short_Short_Integer) then
Int_Typ := Standard_Short_Short_Integer;
elsif Siz < 16 then
Int_Typ := Standard_Integer_16;
elsif Siz < RM_Size (Standard_Short_Integer) then
Int_Typ := Standard_Short_Integer;
elsif Siz < 32 then
Int_Typ := Standard_Integer_32;
elsif Siz < RM_Size (Standard_Integer) then
Int_Typ := Standard_Integer;
else
Int_Typ := Standard_Integer_64;
Int_Typ := Standard_Long_Long_Integer;
end if;
return Int_Typ;

View File

@ -11998,6 +11998,18 @@ package body Sem_Res is
Resolve (Operand, Opnd_Type);
-- If the expression is a conversion to universal integer of an
-- an expression with an integer type, then we can eliminate the
-- intermediate conversion to universal integer.
if Nkind (Operand) = N_Type_Conversion
and then Entity (Subtype_Mark (Operand)) = Universal_Integer
and then Is_Integer_Type (Etype (Expression (Operand)))
then
Rewrite (Operand, Relocate_Node (Expression (Operand)));
Analyze_And_Resolve (Operand);
end if;
-- In an inlined context, the unchecked conversion may be applied
-- to a literal, in which case its type is the type of the context.
-- (In other contexts conversions cannot apply to literals).