[libcxx-commits] [libcxx] [libc++] Base string's alignment on __STDCPP_DEFAULT_NEW_ALIGNMENT__ (PR #171785)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jan 28 07:52:03 PST 2026
================
@@ -2364,7 +2364,15 @@ private:
static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 size_type __align_it(size_type __s) _NOEXCEPT {
return (__s + (__a - 1)) & ~(__a - 1);
}
- enum { __alignment = 8 };
+
+# ifdef __STDCPP_DEFAULT_NEW_ALIGNMENT__
+ static inline const size_t
+ __alignment = __is_std_allocator_v<allocator_type> && __STDCPP_DEFAULT_NEW_ALIGNMENT__ > sizeof(void*)
+ ? __STDCPP_DEFAULT_NEW_ALIGNMENT__
+ : sizeof(void*);
+# else
+ static inline const size_t __alignment = sizeof(void*);
+# endif
// This makes sure that we're using a capacity with some extra alignment, since allocators almost always over-align
----------------
ldionne wrote:
Let's also add a libc++ specific test where we pass a custom alignment using `-fnew-alignment`, and confirm that our string allocations are respecting that request.
https://github.com/llvm/llvm-project/pull/171785
More information about the libcxx-commits
mailing list