Fix for clang and gcc optimization build crash #79
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Detailed version is in this issue:
#77
In short, at least clang 8 and 8.3 optimize code in such a way than it should be aligned more than default
malloc
\new
alignment (that isalignof(max_align_t)
, typically 8).Since the code targets C++11, we can either use platform_specific functions like
posix_memalign
and_aligned_malloc
, or we can overallocate and use standard std::align to get address with desired alignment.I choose latter for cross-platform and because I don't know how it works for consoles, so we now allocate
size(T) + alignof(T) + sizeof(Header)
, andHeader
now also stores original pointer frommalloc
.