HomePhabricator

[OCaml] Fix unsafe uses of Store_field

Authored by jberdine on Mar 27 2021, 8:16 AM.

Description

[OCaml] Fix unsafe uses of Store_field

Using Store_field to initialize fields of blocks allocated with
caml_alloc_small is unsafe. The fields of blocks allocated by
caml_alloc_small are not initialized, and Store_field calls the
OCaml GC write barrier. If the uninitialized value of a field happens
to point into the OCaml heap, then it will e.g. be added to a conflict
set or followed and have what the GC thinks are color bits
changed. This leads to crashes or memory corruption.

This diff fixes a few (I think all) instances of this problem. Some of
these are creating option values. OCaml 4.12 has a dedicated
caml_alloc_some function for this, so this diff adds a compatible
function with a version check to avoid conflict. With that, macros for
accessing option values are also added.

Differential Revision: https://reviews.llvm.org/D99471

Details

Committed
jberdineApr 5 2021, 2:55 AM
Differential Revision
D99471: [OCaml] Fix unsafe uses of Store_field
Parents
rG162848654842: ignore -flto= options recognized by GCC
Branches
Unknown
Tags
Unknown