Skip to content

Commit 11d181f

Browse files
committed
fixup! make arrays follow alignment as well.
1 parent 262887b commit 11d181f

File tree

3 files changed

+6
-12
lines changed

3 files changed

+6
-12
lines changed

src/array.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ static jl_array_t *_new_array_(jl_value_t *atype, uint32_t ndims, size_t *dims,
122122
a->flags.ndims = ndims;
123123
a->flags.ptrarray = !isunboxed;
124124
a->elsize = elsz;
125-
a->elalign = elalign;
126125
a->flags.isshared = 0;
127126
a->flags.isaligned = 1;
128127
a->offset = 0;
@@ -197,7 +196,6 @@ JL_DLLEXPORT jl_array_t *jl_reshape_array(jl_value_t *atype, jl_array_t *data,
197196
assert(isboxed == data->flags.ptrarray);
198197
if (!isboxed) {
199198
a->elsize = elsz;
200-
a->elalign = align;
201199
jl_value_t *ownerty = jl_typeof(owner);
202200
size_t oldelsz = 0, oldalign = 0;
203201
if (ownerty == (jl_value_t*)jl_string_type) {
@@ -214,7 +212,6 @@ JL_DLLEXPORT jl_array_t *jl_reshape_array(jl_value_t *atype, jl_array_t *data,
214212
}
215213
else {
216214
a->elsize = sizeof(void*);
217-
a->elalign = sizeof(void*);
218215
a->flags.ptrarray = 1;
219216
}
220217

@@ -268,7 +265,6 @@ JL_DLLEXPORT jl_array_t *jl_string_to_array(jl_value_t *str)
268265
a->data = jl_string_data(str);
269266
a->flags.isaligned = 0;
270267
a->elsize = 1;
271-
a->elalign = 0;
272268
a->flags.ptrarray = 0;
273269
jl_array_data_owner(a) = str;
274270
a->flags.how = 3;
@@ -316,7 +312,6 @@ JL_DLLEXPORT jl_array_t *jl_ptr_to_array_1d(jl_value_t *atype, void *data,
316312
a->length = nel;
317313
#endif
318314
a->elsize = elsz;
319-
a->elalign = align;
320315
a->flags.ptrarray = !isunboxed;
321316
a->flags.ndims = 1;
322317
a->flags.isshared = 1;
@@ -383,7 +378,6 @@ JL_DLLEXPORT jl_array_t *jl_ptr_to_array(jl_value_t *atype, void *data,
383378
a->length = nel;
384379
#endif
385380
a->elsize = elsz;
386-
a->elalign = align;
387381
a->flags.ptrarray = !isunboxed;
388382
a->flags.ndims = ndims;
389383
a->offset = 0;
@@ -1047,7 +1041,7 @@ JL_DLLEXPORT void jl_array_sizehint(jl_array_t *a, size_t sz)
10471041
JL_DLLEXPORT jl_array_t *jl_array_copy(jl_array_t *ary)
10481042
{
10491043
size_t elsz = ary->elsize;
1050-
size_t elalign = ary->elalign;
1044+
size_t elalign = ary->flags.ptrarray ? sizeof(void*) : jl_datatype_align(jl_tparam0(jl_typeof(ary)));
10511045
size_t len = jl_array_len(ary);
10521046
jl_array_t *new_ary = _new_array_(jl_typeof(ary), jl_array_ndims(ary),
10531047
&ary->nrows, !ary->flags.ptrarray, elsz, elalign);

src/dump.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,16 +574,17 @@ static void jl_serialize_value_(jl_serializer_state *s, jl_value_t *v, int as_li
574574
}
575575
else if (jl_is_array(v)) {
576576
jl_array_t *ar = (jl_array_t*)v;
577+
size_t elalign = ar->flags.ptrarray ? sizeof(void*) : jl_datatype_align(jl_tparam0(jl_typeof(ar)));
577578
if (ar->flags.ndims == 1 && ar->elsize < 128) {
578579
writetag(s->s, (jl_value_t*)Array1d_tag);
579580
write_uint8(s->s, (ar->flags.ptrarray<<7) | (ar->elsize & 0x7f));
580-
write_uint8(s->s, ar->elalign & 0x7f);
581+
write_uint8(s->s, elalign);
581582
}
582583
else {
583584
writetag(s->s, (jl_value_t*)jl_array_type);
584585
write_uint16(s->s, ar->flags.ndims);
585586
write_uint16(s->s, (ar->flags.ptrarray<<15) | (ar->elsize & 0x7fff));
586-
write_uint16(s->s, ar->elalign);
587+
write_uint16(s->s, elalign);
587588
}
588589
for (i=0; i < ar->flags.ndims; i++)
589590
jl_serialize_value(s, jl_box_long(jl_array_dim(ar,i)));
@@ -1338,15 +1339,15 @@ static jl_value_t *jl_deserialize_value_array(jl_serializer_state *s, jl_value_t
13381339
elalign = read_uint8(s->s);
13391340
isunboxed = !(elsize >> 7);
13401341
elsize = elsize & 0x7f;
1341-
elalign = elalign & 0x7f;
1342+
elalign = elalign;
13421343
}
13431344
else {
13441345
ndims = read_uint16(s->s);
13451346
elsize = read_uint16(s->s);
13461347
elalign = read_uint16(s->s);
13471348
isunboxed = !(elsize >> 15);
13481349
elsize = elsize & 0x7fff;
1349-
elalign = elalign & 0x7fff;
1350+
elalign = elalign;
13501351
}
13511352
uintptr_t pos = backref_list.len;
13521353
if (usetable)

src/julia.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ JL_EXTENSION typedef struct {
155155
#endif
156156
jl_array_flags_t flags;
157157
uint16_t elsize;
158-
uint16_t elalign;
159158
uint32_t offset; // for 1-d only. does not need to get big.
160159
size_t nrows;
161160
union {

0 commit comments

Comments
 (0)