about summary refs log tree commit diff
path: root/misc
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2024-05-18 09:33:19 +0200
committerFlorian Weimer <fweimer@redhat.com>2024-05-18 09:33:19 +0200
commit8d7b6b4cb27d4dec1dd5f7960298c1699275f962 (patch)
treed3233e6a49dbde86dee8ea46920714a1adbbddb7 /misc
parent2a99e2398d9d717c034e915f7846a49e623f5450 (diff)
downloadglibc-8d7b6b4cb27d4dec1dd5f7960298c1699275f962.tar.gz
glibc-8d7b6b4cb27d4dec1dd5f7960298c1699275f962.tar.xz
glibc-8d7b6b4cb27d4dec1dd5f7960298c1699275f962.zip
socket: Use may_alias on sockaddr structs (bug 19622)
This supports common coding patterns.  The GCC C front end before
version 7 rejects the may_alias attribute on a struct definition
if it was not present in a previous forward declaration, so this
attribute can only be conditionally applied.

This implements the spirit of the change in Austin Group issue 1641.

Suggested-by: Marek Polacek <polacek@redhat.com>
Suggested-by: Jakub Jelinek <jakub@redhat.com>
Reviewed-by: Sam James <sam@gentoo.org>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'misc')
-rw-r--r--misc/sys/cdefs.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index 2e8279a2c7..ab9620bd0d 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -874,4 +874,13 @@ _Static_assert (0, "IEEE 128-bits long double requires redirection on this platf
 # define __attribute_returns_twice__ /* Ignore.  */
 #endif
 
+/* Mark struct types as aliasable.  Restricted to compilers that
+   support forward declarations of structs in the presence of the
+   attribute.  */
+#if __GNUC_PREREQ (7, 1) || defined __clang__
+# define __attribute_struct_may_alias__ __attribute__ ((__may_alias__))
+#else
+# define __attribute_struct_may_alias__
+#endif
+
 #endif	 /* sys/cdefs.h */