[libcxx-commits] [libcxx] [z/OS][libc++] Guard to be used only when `align_val_t` is available (PR #114396)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Nov 4 08:21:25 PST 2024
================
@@ -66,16 +66,24 @@ class __small_buffer {
if constexpr (__fits_in_buffer<_Stored>) {
return std::launder(reinterpret_cast<_Stored*>(__buffer_));
} else {
+# ifdef _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION
byte* __allocation = static_cast<byte*>(::operator new[](sizeof(_Stored), align_val_t{alignof(_Stored)}));
std::construct_at(reinterpret_cast<byte**>(__buffer_), __allocation);
return std::launder(reinterpret_cast<_Stored*>(__allocation));
+# else
+ return static_cast<_Stored*>(std::__libcpp_allocate(_BufferSize * sizeof(byte), _LIBCPP_ALIGNOF(byte)));
+# endif // _LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION
----------------
ldionne wrote:
I think what we want is this:
```c++
return static_cast<_Stored*>(std::__libcpp_allocate(_BufferSize * sizeof(byte), alignof(_Stored)));
```
We're always passing the right alignment, but we let `__libcpp_allocate` discard it based on `_LIBCPP_HAS_LIBRARY_ALIGNED_ALLOCATION`. So we don't need any `#if` here.
https://github.com/llvm/llvm-project/pull/114396
More information about the libcxx-commits
mailing list