diff options
Diffstat (limited to 'byterun/array.c')
-rw-r--r-- | byterun/array.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/byterun/array.c b/byterun/array.c index 327f2b564..ba6fd701b 100644 --- a/byterun/array.c +++ b/byterun/array.c @@ -214,9 +214,13 @@ CAMLprim value caml_make_array(value init) || Tag_val(v) != Double_tag) { CAMLreturn (init); } else { - Assert(size < Max_young_wosize); wsize = size * Double_wosize; - res = caml_alloc_small(wsize, Double_array_tag); + if (wsize <= Max_young_wosize) { + res = caml_alloc_small(wsize, Double_array_tag); + } else { + res = caml_alloc_shr(wsize, Double_array_tag); + res = caml_check_urgent_gc(res); + } for (i = 0; i < size; i++) { Store_double_field(res, i, Double_val(Field(init, i))); } |