From ed50b130827a8cd24314b52988690c7ba2490853 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Wed, 13 May 2020 07:40:26 +0200 Subject: synth-objtypes: use Address to avoid compiler warnings. For #1308. Use intermediate type Address to convert between Memory_Ptr and scalar types, as Address has no alignment. --- src/synth/synth-objtypes.adb | 45 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'src/synth/synth-objtypes.adb') diff --git a/src/synth/synth-objtypes.adb b/src/synth/synth-objtypes.adb index 0876da3cb..69fb76e50 100644 --- a/src/synth/synth-objtypes.adb +++ b/src/synth/synth-objtypes.adb @@ -19,7 +19,7 @@ -- MA 02110-1301, USA. with Ada.Unchecked_Conversion; -with System; +with System; use System; with System.Storage_Elements; with Mutils; use Mutils; @@ -261,7 +261,6 @@ package body Synth.Objtypes is function Create_Bound_Array (Ndims : Dim_Type) return Bound_Array_Acc is - use System; subtype Data_Type is Bound_Array (Ndims); Res : Address; begin @@ -386,7 +385,6 @@ package body Synth.Objtypes is function Create_Rec_El_Array (Nels : Iir_Index32) return Rec_El_Array_Acc is - use System; subtype Data_Type is Rec_El_Array (Nels); Res : Address; begin @@ -596,18 +594,24 @@ package body Synth.Objtypes is end case; end Is_Matching_Bounds; + -- For conversions use Address to avoidcompiler warnings about alignment. + function To_Address is new Ada.Unchecked_Conversion + (Memory_Ptr, Address); + function To_Memory_Ptr is new Ada.Unchecked_Conversion + (Address, Memory_Ptr); + type Ghdl_U8_Ptr is access all Ghdl_U8; function To_U8_Ptr is - new Ada.Unchecked_Conversion (Memory_Ptr, Ghdl_U8_Ptr); + new Ada.Unchecked_Conversion (Address, Ghdl_U8_Ptr); procedure Write_U8 (Mem : Memory_Ptr; Val : Ghdl_U8) is begin - To_U8_Ptr (Mem).all := Val; + To_U8_Ptr (To_Address (Mem)).all := Val; end Write_U8; function Read_U8 (Mem : Memory_Ptr) return Ghdl_U8 is begin - return To_U8_Ptr (Mem).all; + return To_U8_Ptr (To_Address (Mem)).all; end Read_U8; function Read_U8 (Mt : Memtyp) return Ghdl_U8 @@ -619,58 +623,58 @@ package body Synth.Objtypes is type Ghdl_I32_Ptr is access all Ghdl_I32; function To_I32_Ptr is - new Ada.Unchecked_Conversion (Memory_Ptr, Ghdl_I32_Ptr); + new Ada.Unchecked_Conversion (Address, Ghdl_I32_Ptr); procedure Write_I32 (Mem : Memory_Ptr; Val : Ghdl_I32) is begin - To_I32_Ptr (Mem).all := Val; + To_I32_Ptr (To_Address (Mem)).all := Val; end Write_I32; function Read_I32 (Mem : Memory_Ptr) return Ghdl_I32 is begin - return To_I32_Ptr (Mem).all; + return To_I32_Ptr (To_Address (Mem)).all; end Read_I32; type Ghdl_U32_Ptr is access all Ghdl_U32; function To_U32_Ptr is - new Ada.Unchecked_Conversion (Memory_Ptr, Ghdl_U32_Ptr); + new Ada.Unchecked_Conversion (Address, Ghdl_U32_Ptr); procedure Write_U32 (Mem : Memory_Ptr; Val : Ghdl_U32) is begin - To_U32_Ptr (Mem).all := Val; + To_U32_Ptr (To_Address (Mem)).all := Val; end Write_U32; function Read_U32 (Mem : Memory_Ptr) return Ghdl_U32 is begin - return To_U32_Ptr (Mem).all; + return To_U32_Ptr (To_Address (Mem)).all; end Read_U32; type Ghdl_I64_Ptr is access all Ghdl_I64; function To_I64_Ptr is - new Ada.Unchecked_Conversion (Memory_Ptr, Ghdl_I64_Ptr); + new Ada.Unchecked_Conversion (Address, Ghdl_I64_Ptr); procedure Write_I64 (Mem : Memory_Ptr; Val : Ghdl_I64) is begin - To_I64_Ptr (Mem).all := Val; + To_I64_Ptr (To_Address (Mem)).all := Val; end Write_I64; function Read_I64 (Mem : Memory_Ptr) return Ghdl_I64 is begin - return To_I64_Ptr (Mem).all; + return To_I64_Ptr (To_Address (Mem)).all; end Read_I64; type Fp64_Ptr is access all Fp64; function To_Fp64_Ptr is - new Ada.Unchecked_Conversion (Memory_Ptr, Fp64_Ptr); + new Ada.Unchecked_Conversion (Address, Fp64_Ptr); procedure Write_Fp64 (Mem : Memory_Ptr; Val : Fp64) is begin - To_Fp64_Ptr (Mem).all := Val; + To_Fp64_Ptr (To_Address (Mem)).all := Val; end Write_Fp64; function Read_Fp64 (Mem : Memory_Ptr) return Fp64 is begin - return To_Fp64_Ptr (Mem).all; + return To_Fp64_Ptr (To_Address (Mem)).all; end Read_Fp64; function Read_Fp64 (Mt : Memtyp) return Fp64 is @@ -678,11 +682,6 @@ package body Synth.Objtypes is return Read_Fp64 (Mt.Mem); end Read_Fp64; - function To_Address is new Ada.Unchecked_Conversion - (Memory_Ptr, System.Address); - function To_Memory_Ptr is new Ada.Unchecked_Conversion - (System.Address, Memory_Ptr); - function "+" (Base : Memory_Ptr; Off : Size_Type) return Memory_Ptr is use System.Storage_Elements; -- cgit v1.2.3