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 3239b11de..cec8b9172 100644 --- a/byterun/array.c +++ b/byterun/array.c @@ -137,7 +137,9 @@ value make_vect(value len, value init) /* ML */ if (size == 0) { res = Atom(0); } - else if (Is_block(init) && Tag_val(init) == Double_tag) { + else if (Is_block(init) + && (Is_atom(init) || Is_young(init) || Is_in_heap(init)) + && Tag_val(init) == Double_tag) { d = Double_val(init); wsize = size * Double_wosize; if (wsize > Max_wosize) invalid_argument("Array.make"); @@ -177,7 +179,9 @@ value make_array(value init) /* ML */ CAMLreturn (init); } else { v = Field(init, 0); - if (Is_long(v) || Tag_val(v) != Double_tag) { + if (Is_long(v) + || (!Is_atom(v) && !Is_young(v) && !Is_in_heap(v)) + || Tag_val(v) != Double_tag) { CAMLreturn (init); } else { Assert(size < Max_young_wosize); |