Fix a strict aliasing violation.

This commit is contained in:
Jason Evans 2013-12-12 15:05:24 -08:00
parent 00a9cc7b6d
commit dfecadf4b2

View File

@ -602,13 +602,15 @@ void fill_array64(sfmt_t *ctx, uint64_t *array, int size) {
* @param seed a 32-bit integer used as the seed. * @param seed a 32-bit integer used as the seed.
*/ */
sfmt_t *init_gen_rand(uint32_t seed) { sfmt_t *init_gen_rand(uint32_t seed) {
void *p;
sfmt_t *ctx; sfmt_t *ctx;
int i; int i;
uint32_t *psfmt32; uint32_t *psfmt32;
if (posix_memalign((void **)&ctx, sizeof(w128_t), sizeof(sfmt_t)) != 0) { if (posix_memalign(&p, sizeof(w128_t), sizeof(sfmt_t)) != 0) {
return NULL; return NULL;
} }
ctx = (sfmt_t *)p;
psfmt32 = &ctx->sfmt[0].u[0]; psfmt32 = &ctx->sfmt[0].u[0];
psfmt32[idxof(0)] = seed; psfmt32[idxof(0)] = seed;
@ -631,6 +633,7 @@ sfmt_t *init_gen_rand(uint32_t seed) {
* @param key_length the length of init_key. * @param key_length the length of init_key.
*/ */
sfmt_t *init_by_array(uint32_t *init_key, int key_length) { sfmt_t *init_by_array(uint32_t *init_key, int key_length) {
void *p;
sfmt_t *ctx; sfmt_t *ctx;
int i, j, count; int i, j, count;
uint32_t r; uint32_t r;
@ -639,9 +642,10 @@ sfmt_t *init_by_array(uint32_t *init_key, int key_length) {
int size = N * 4; int size = N * 4;
uint32_t *psfmt32; uint32_t *psfmt32;
if (posix_memalign((void **)&ctx, sizeof(w128_t), sizeof(sfmt_t)) != 0) { if (posix_memalign(&p, sizeof(w128_t), sizeof(sfmt_t)) != 0) {
return NULL; return NULL;
} }
ctx = (sfmt_t *)p;
psfmt32 = &ctx->sfmt[0].u[0]; psfmt32 = &ctx->sfmt[0].u[0];
if (size >= 623) { if (size >= 623) {