Avoid unaligned writes through 'pos' pointer #6
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.
In
Graph::serialize_mmap,posis set to a non-4-byte aligned pointer and is then dereferenced as various other types. This is Undefined Behavior with respect to the C++ standard, due to both writing through unaligned pointers and breaking strict aliasing rules.This change replaces such writes with
memcpythat has an exception in the standard to bypass both aliasing and alignment restrictions.This is not the only alignment/aliasing issue in this function; it looks like operations involving
end_of_lastrankandmapping_startalso break these rules. But these are left as-is for now.