[Ada] Small tweak to Narrow_Large_Operation procedure
authorEric Botcazou <ebotcazou@adacore.com>
Sat, 16 May 2020 13:42:04 +0000 (15:42 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 8 Jul 2020 14:55:48 +0000 (10:55 -0400)
gcc/ada/

* exp_ch4.adb (Narrow_Large_Operation): Use the base type instead
of the first subtype of standard integer types as narrower type.

gcc/ada/exp_ch4.adb

index 6a0b1ce763e7b0fa7f920d36ebd89e2f3162a72c..b40864fb5b478743e62ba2a97ebe12d64106ff44 100644 (file)
@@ -14067,13 +14067,15 @@ package body Exp_Ch4 is
          return;
       end if;
 
-      --  Now pick the narrower type according to the size
+      --  Now pick the narrower type according to the size. We use the base
+      --  type instead of the first subtype because operations are done in
+      --  the base type, so this avoids the need for useless conversions.
 
       if Nsiz <= RM_Size (Standard_Integer) then
-         Ntyp := Standard_Integer;
+         Ntyp := Etype (Standard_Integer);
 
       elsif Nsiz <= RM_Size (Standard_Long_Long_Integer) then
-         Ntyp := Standard_Long_Long_Integer;
+         Ntyp := Etype (Standard_Long_Long_Integer);
 
       else
          return;