[libc-commits] [libc] [libc] Fix size of struct sockaddr_storage (PR #210037)
via libc-commits
libc-commits at lists.llvm.org
Thu Jul 16 04:33:43 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: Pavel Labath (labath)
<details>
<summary>Changes</summary>
My cleverness with the union backfired as it introduced an (architecture-specific) padding between before it. Drop the union to avoid that.
This probably wouldn't break much as the structure exists just to allocate space (and this made it larger), but we should fix it nonetheless.
---
Full diff: https://github.com/llvm/llvm-project/pull/210037.diff
2 Files Affected:
- (modified) libc/include/llvm-libc-types/struct_sockaddr_storage.h (+2-4)
- (modified) libc/test/src/sys/socket/linux/sockaddr_storage_test.cpp (+1)
``````````diff
diff --git a/libc/include/llvm-libc-types/struct_sockaddr_storage.h b/libc/include/llvm-libc-types/struct_sockaddr_storage.h
index ae59c474a0a8b..c9b19d55ede9b 100644
--- a/libc/include/llvm-libc-types/struct_sockaddr_storage.h
+++ b/libc/include/llvm-libc-types/struct_sockaddr_storage.h
@@ -15,10 +15,8 @@
// protocol-specific address structures.
struct __attribute__((may_alias)) sockaddr_storage {
sa_family_t ss_family;
- union {
- char __ss_padding[128 - sizeof(sa_family_t)]; // Ensures size.
- long __ss_align; // Ensures alignment.
- };
+ char __ss_padding[128 - sizeof(sa_family_t) - sizeof(long)]; // Ensures size.
+ long __ss_align; // Ensures alignment.
};
#endif // LLVM_LIBC_TYPES_STRUCT_SOCKADDR_STORAGE_H
diff --git a/libc/test/src/sys/socket/linux/sockaddr_storage_test.cpp b/libc/test/src/sys/socket/linux/sockaddr_storage_test.cpp
index 2b7fbcb22aae8..97cfcc9dde0dc 100644
--- a/libc/test/src/sys/socket/linux/sockaddr_storage_test.cpp
+++ b/libc/test/src/sys/socket/linux/sockaddr_storage_test.cpp
@@ -18,6 +18,7 @@ sa_family_t test_sockaddr_aliasing(struct sockaddr_storage *ss,
struct sockaddr_un *sun);
TEST_F(LlvmLibcSockaddrStorageTest, SizeAndAlignment) {
+ static_assert(sizeof(struct sockaddr_storage) == 128);
// TODO: Add other sockaddr_* types as they are defined.
static_assert(sizeof(struct sockaddr_un) <= sizeof(struct sockaddr_storage));
static_assert(alignof(struct sockaddr_un) <=
``````````
</details>
https://github.com/llvm/llvm-project/pull/210037
More information about the libc-commits
mailing list