summaryrefslogtreecommitdiffstats
path: root/byterun/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'byterun/array.c')
-rw-r--r--byterun/array.c8
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)));
}