From: Sebastian Poeplau Date: Wed, 20 Mar 2024 10:48:22 +0000 (+0100) Subject: ada: Use System.Address for address computation in System.Pool_Global X-Git-Tag: basepoints/gcc-16~8887 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16cdeadb33400238ea522541009ecd2a24769f0c;p=thirdparty%2Fgcc.git ada: Use System.Address for address computation in System.Pool_Global Some architectures don't let us convert System.Storage_Elements.Integer_Address back to a valid System.Address. Using the arithmetic operations on System.Address from System.Storage_Elements prevents the problem while leaving semantics unchanged. gcc/ada/ * libgnat/s-pooglo.adb (Allocate): Use arithmetic on System.Address to compute the aligned address. --- diff --git a/gcc/ada/libgnat/s-pooglo.adb b/gcc/ada/libgnat/s-pooglo.adb index dea3de15cc5..9ce21c8fd0d 100644 --- a/gcc/ada/libgnat/s-pooglo.adb +++ b/gcc/ada/libgnat/s-pooglo.adb @@ -75,9 +75,10 @@ package body System.Pool_Global is -- Realign the returned address - Aligned_Address := To_Address - (To_Integer (Allocated) + Integer_Address (Alignment) - - (To_Integer (Allocated) mod Integer_Address (Alignment))); + Aligned_Address := + Allocated + Alignment + - Storage_Offset (To_Integer (Allocated) + mod Integer_Address (Alignment)); -- Save the block address