]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Use intermediate integer type with proper signedness
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 1 Jul 2021 15:57:16 +0000 (17:57 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Thu, 1 Jul 2021 16:13:12 +0000 (18:13 +0200)
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.

gcc/ada/exp_attr.adb

index 2e1cb85d5dfa349146e3a9746ea9261c94aa0f29..af7f205d50ce6136a3bdc3ae762c0f491237c1ba 100644 (file)
@@ -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;
 
       ---------------------------------