Skip to content

Commit 5186b6b

Browse files
authored
flambda-backend: Port #743 (#2052)
1 parent 1645ead commit 5186b6b

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

runtime/bigarray.c

+12-12
Original file line numberDiff line numberDiff line change
@@ -90,31 +90,31 @@ CAMLexport value
9090
caml_ba_alloc(int flags, int num_dims, void * data, intnat * dim)
9191
{
9292
uintnat num_elts, asize, size;
93-
int i, is_managed;
93+
int i;
9494
value res;
9595
struct caml_ba_array * b;
9696
intnat dimcopy[CAML_BA_MAX_NUM_DIMS];
9797

9898
CAMLassert(num_dims >= 0 && num_dims <= CAML_BA_MAX_NUM_DIMS);
9999
CAMLassert((flags & CAML_BA_KIND_MASK) <= CAML_BA_CHAR);
100100
for (i = 0; i < num_dims; i++) dimcopy[i] = dim[i];
101-
num_elts = 1;
102-
for (i = 0; i < num_dims; i++) {
103-
if (caml_umul_overflow(num_elts, dimcopy[i], &num_elts))
104-
caml_raise_out_of_memory();
105-
}
106-
if (caml_umul_overflow(num_elts,
107-
caml_ba_element_size[flags & CAML_BA_KIND_MASK],
108-
&size))
109-
caml_raise_out_of_memory();
101+
size = 0;
110102
if (data == NULL) {
103+
num_elts = 1;
104+
for (i = 0; i < num_dims; i++) {
105+
if (caml_umul_overflow(num_elts, dimcopy[i], &num_elts))
106+
caml_raise_out_of_memory();
107+
}
108+
if (caml_umul_overflow(num_elts,
109+
caml_ba_element_size[flags & CAML_BA_KIND_MASK],
110+
&size))
111+
caml_raise_out_of_memory();
111112
data = malloc(size);
112113
if (data == NULL && size != 0) caml_raise_out_of_memory();
113114
flags |= CAML_BA_MANAGED;
114115
}
115116
asize = SIZEOF_BA_ARRAY + num_dims * sizeof(intnat);
116-
is_managed = ((flags & CAML_BA_MANAGED_MASK) == CAML_BA_MANAGED);
117-
res = caml_alloc_custom_mem(&caml_ba_ops, asize, is_managed ? size : 0);
117+
res = caml_alloc_custom_mem(&caml_ba_ops, asize, size);
118118
b = Caml_ba_array_val(res);
119119
b->data = data;
120120
b->num_dims = num_dims;

0 commit comments

Comments
 (0)