https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90046

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Author: redi
Date: Thu Apr 11 19:58:14 2019
New Revision: 270291

URL: https://gcc.gnu.org/viewcvs?rev=270291&root=gcc&view=rev
Log:
PR libstdc++/90046 fix build failure on epiphany-elf

The epiphany-elf target aligns structs to 8 bytes, which causes the
static_assert(alignof(_Chunk) == 1) to fail.

Instead of requiring _Chunks to be positionable at any alignment, ensure
new buffers are aligned to alignof(_Chunk). Because the buffer size is a
power of two, we know that both the buffer size and sizeof(_Chunk) are
multiples of alignof(_Chunk). So is p is aligned to alignof(_Chunk) then
so is (p + size - sizeof(_Chunk)). So just ensure the new buffer is
aligned to at least alignof(_Chunk), which should already be true
because the caller requests at least alignof(max_align_t).

        PR libstdc++/90046
        * src/c++17/memory_resource.cc
        (monotonic_buffer_resource::_Chunk::allocate): Increase alignment if
        needed to allow placing a _Chunk at the end of the buffer.
        (monotonic_buffer_resource::_M_new_buffer): Remove static_assert.

Modified:
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/src/c++17/memory_resource.cc

Reply via email to