summaryrefslogtreecommitdiff
path: root/gcc/ada/s-stoele.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/s-stoele.adb')
-rw-r--r--gcc/ada/s-stoele.adb45
1 files changed, 37 insertions, 8 deletions
diff --git a/gcc/ada/s-stoele.adb b/gcc/ada/s-stoele.adb
index 0bab843c138..cd3e22ef907 100644
--- a/gcc/ada/s-stoele.adb
+++ b/gcc/ada/s-stoele.adb
@@ -37,6 +37,10 @@ package body System.Storage_Elements is
pragma Suppress (All_Checks);
+ -- Conversion to/from address
+
+ -- Note qualification below of To_Address to avoid ambiguities on VMS
+
function To_Address is
new Ada.Unchecked_Conversion (Storage_Offset, Address);
function To_Offset is
@@ -47,38 +51,62 @@ package body System.Storage_Elements is
-- These functions must be place first because they are inlined_always
-- and are used and inlined in other subprograms defined in this unit.
- function To_Integer (Value : Address) return Integer_Address is
- begin
- return Integer_Address (Value);
- end To_Integer;
+ ----------------
+ -- To_Address --
+ ----------------
function To_Address (Value : Integer_Address) return Address is
begin
return Address (Value);
end To_Address;
+ ----------------
+ -- To_Integer --
+ ----------------
+
+ function To_Integer (Value : Address) return Integer_Address is
+ begin
+ return Integer_Address (Value);
+ end To_Integer;
+
-- Address arithmetic
+ ---------
+ -- "+" --
+ ---------
+
function "+" (Left : Address; Right : Storage_Offset) return Address is
begin
- return To_Address (To_Integer (Left) + To_Integer (To_Address (Right)));
+ return Storage_Elements.To_Address
+ (To_Integer (Left) + To_Integer (To_Address (Right)));
end "+";
function "+" (Left : Storage_Offset; Right : Address) return Address is
begin
- return To_Address (To_Integer (To_Address (Left)) + To_Integer (Right));
+ return Storage_Elements.To_Address
+ (To_Integer (To_Address (Left)) + To_Integer (Right));
end "+";
+ ---------
+ -- "-" --
+ ---------
+
function "-" (Left : Address; Right : Storage_Offset) return Address is
begin
- return To_Address (To_Integer (Left) - To_Integer (To_Address (Right)));
+ return Storage_Elements.To_Address
+ (To_Integer (Left) - To_Integer (To_Address (Right)));
end "-";
function "-" (Left, Right : Address) return Storage_Offset is
begin
- return To_Offset (To_Address (To_Integer (Left) - To_Integer (Right)));
+ return To_Offset (Storage_Elements.To_Address
+ (To_Integer (Left) - To_Integer (Right)));
end "-";
+ -----------
+ -- "mod" --
+ -----------
+
function "mod"
(Left : Address;
Right : Storage_Offset) return Storage_Offset
@@ -98,4 +126,5 @@ package body System.Storage_Elements is
raise Constraint_Error;
end if;
end "mod";
+
end System.Storage_Elements;