[Ada] Fix host/target confusion for attribute To_Address
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 23 Apr 2020 14:22:28 +0000 (16:22 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Thu, 18 Jun 2020 09:08:29 +0000 (05:08 -0400)
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_attr.adb (Analyze_Attribute) <To_Address>: Use the address
size of the target instead of the host when checking the value of
a static expression.  Also use standard idiom for exponentiation.

gcc/ada/sem_attr.adb

index d444b9f1c9db0afbcd820e317eddd7ff2eb4924a..8045193771566e4a102c44e2dea242a73b2ef1f4 100644 (file)
@@ -6274,9 +6274,9 @@ package body Sem_Attr is
          if Is_OK_Static_Expression (E1) then
             Val := Expr_Value (E1);
 
-            if Val < -(2 ** UI_From_Int (Standard'Address_Size - 1))
+            if Val < -(Uint_2 ** (System_Address_Size - 1))
                  or else
-               Val > 2 ** UI_From_Int (Standard'Address_Size) - 1
+               Val > Uint_2 ** System_Address_Size - 1
             then
                Error_Attr ("address value out of range for % attribute", E1);
             end if;
@@ -6293,7 +6293,7 @@ package body Sem_Attr is
             elsif Val < 0 then
                Set_Etype (E1, Universal_Integer);
 
-            --  Otherwise set type to Unsigned_64 to accommodate max values
+            --  Otherwise set type to Unsigned_64 to accommodate large values
 
             else
                Set_Etype (E1, Standard_Unsigned_64);