Remove reinterpret_casts when assigning ecs_ctx_free_t
which were breaking aliasing rules
#1416
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.
The code was casting functions pointers of the signature
void (*)(T *)
tovoid (*)(void *)
and then calling them on avoid *
. This breaks aliasing rules and is undefined behaviour. This commit removes these casts by changing the template to take avoid *
directly.This was caught by
-fsanitize=undefined
under clang.I'm suspicious of a couple other places which seem to
reinterpret_cast
function pointers, but since I have no concrete evidence I'd rather not touch them.