From: Eric Botcazou Date: Thu, 1 Jul 2021 15:57:16 +0000 (+0200) Subject: Use intermediate integer type with proper signedness X-Git-Tag: basepoints/gcc-13~6352 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cdf4576b201aa81fd853b06242b16e4215ead5a9;p=thirdparty%2Fgcc.git Use intermediate integer type with proper signedness This is a minor regression present on mainline and 11 branch, whereby the value of the Enum_Rep attribute is always unsigned. gcc/ada/ PR ada/101094 * exp_attr.adb (Get_Integer_Type): Return an integer type with the same signedness as the input type. --- diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 2e1cb85d5dfa..af7f205d50ce 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -1851,14 +1851,13 @@ package body Exp_Attr is ---------------------- function Get_Integer_Type (Typ : Entity_Id) return Entity_Id is - Siz : constant Uint := Esize (Base_Type (Typ)); + Siz : constant Uint := Esize (Base_Type (Typ)); begin -- We need to accommodate invalid values of the base type since we - -- accept them for Enum_Rep and Pos, so we reason on the Esize. And - -- we use an unsigned type since the enumeration type is unsigned. + -- accept them for Enum_Rep and Pos, so we reason on the Esize. - return Small_Integer_Type_For (Siz, Uns => True); + return Small_Integer_Type_For (Siz, Uns => Is_Unsigned_Type (Typ)); end Get_Integer_Type; ---------------------------------