aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-03-19 10:56:34 +0100
committerMarc Poulhiès <poulhies@adacore.com>2024-05-20 09:47:03 +0200
commiteef3025547ce55cbf6a9018b495ef5c9a562047a (patch)
tree301cf6b0e116d85f80f9d2722c19bee6e23140d2 /gcc
parentd6a10f8173ca9f390cd87691477fa147d4404f3b (diff)
downloadgcc-eef3025547ce55cbf6a9018b495ef5c9a562047a.zip
gcc-eef3025547ce55cbf6a9018b495ef5c9a562047a.tar.gz
gcc-eef3025547ce55cbf6a9018b495ef5c9a562047a.tar.bz2
ada: One more adjustment coming from aliasing considerations
It is needed on PowerPC platforms because of specific calling conventions. gcc/ada/ * libgnat/g-sothco.ads (In_Addr): Add aspect Universal_Aliasing.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/libgnat/g-sothco.ads7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/ada/libgnat/g-sothco.ads b/gcc/ada/libgnat/g-sothco.ads
index 8c21933..da1e6f5 100644
--- a/gcc/ada/libgnat/g-sothco.ads
+++ b/gcc/ada/libgnat/g-sothco.ads
@@ -123,10 +123,13 @@ package GNAT.Sockets.Thin_Common is
type In_Addr is record
S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
- end record with Convention => C, Alignment => C.int'Alignment;
+ end record
+ with Convention => C, Alignment => C.int'Alignment, Universal_Aliasing;
-- IPv4 address, represented as a network-order C.int. Note that the
-- underlying operating system may assume that values of this type have
- -- C.int alignment, so we need to provide a suitable alignment clause here.
+ -- C.int's alignment, so we need to provide a suitable alignment clause.
+ -- We also need to inhibit strict type-based aliasing optimizations in
+ -- order to implement the following unchecked conversions efficiently.
function To_In_Addr is new Ada.Unchecked_Conversion (C.int, In_Addr);
function To_Int is new Ada.Unchecked_Conversion (In_Addr, C.int);