darray: fix strict aliasing issue

This commit is contained in:
Alan Wu 2021-02-19 11:02:09 -05:00
Родитель 0658ab73ee
Коммит 9ce2771697
1 изменённых файлов: 6 добавлений и 2 удалений

Просмотреть файл

@ -146,7 +146,9 @@ rb_darray_ensure_space(void *ptr_to_ary, size_t header_size, size_t element_size
doubled_ary->capa = new_capa;
*ptr_to_ptr_to_meta = doubled_ary;
// We don't have access to the type of the dynamic array in function context.
// Write out result with memcpy to avoid strict aliasing issue.
memcpy(ptr_to_ary, &doubled_ary, sizeof(doubled_ary));
return 1;
}
@ -167,7 +169,9 @@ rb_darray_make_impl(void *ptr_to_ary, int32_t array_size, size_t header_size, si
meta->size = array_size;
meta->capa = array_size;
*ptr_to_ptr_to_meta = meta;
// We don't have access to the type of the dynamic array in function context.
// Write out result with memcpy to avoid strict aliasing issue.
memcpy(ptr_to_ary, &meta, sizeof(meta));
return 1;
}