aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/boot/me/trans.ml13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/boot/me/trans.ml b/src/boot/me/trans.ml
index 4fe63012..037c18a7 100644
--- a/src/boot/me/trans.ml
+++ b/src/boot/me/trans.ml
@@ -2258,8 +2258,17 @@ let trans_visitor
trans_void_upcall "upcall_join" [| trans_atom (Ast.ATOM_lval task) |]
and trans_send (chan:Ast.lval) (src:Ast.lval) : unit =
- let (srccell, _) = trans_lval src in
- aliasing false srccell
+ let (src_cell, src_ty) = trans_lval src in
+ begin
+ match (ty_mem_ctrl src_ty) with
+ | MEM_rc_opaque
+ | MEM_rc_struct
+ | MEM_gc ->
+ iflog (fun _ -> annotate "incr_refcount of src obj");
+ incr_refcount src_cell;
+ | _ -> ()
+ end;
+ aliasing false src_cell
begin
fun src_alias ->
trans_void_upcall "upcall_send"