@@ -56,7 +56,10 @@ fn add_gc_root(cx: &@block_ctxt, llval: ValueRef, ty: ty::t) -> @block_ctxt {
56
56
tk_derived. {
57
57
// It's a derived type descriptor. First, spill it.
58
58
let lltydescptr = trans:: alloca ( bcx, val_ty ( lltydesc) ) ;
59
- bld:: Store ( bcx, lltydesc, lltydescptr) ;
59
+
60
+ let llderivedtydescs =
61
+ trans:: llderivedtydescs_block_ctxt ( bcx_fcx ( bcx) ) ;
62
+ bld:: Store ( llderivedtydescs, lltydesc, lltydescptr) ;
60
63
61
64
let number = gc_cx. next_tydesc_num ;
62
65
gc_cx. next_tydesc_num += 1 u;
@@ -71,10 +74,10 @@ fn add_gc_root(cx: &@block_ctxt, llval: ValueRef, ty: ty::t) -> @block_ctxt {
71
74
lldestindex = lll:: LLVMConstPointerCast ( lldestindex, T_ptr ( T_i8 ( ) ) ) ;
72
75
llsrcindex = lll:: LLVMConstPointerCast ( llsrcindex, T_ptr ( T_i8 ( ) ) ) ;
73
76
74
- lltydescptr =
75
- bld :: PointerCast ( bcx , lltydescptr , T_ptr ( T_ptr ( T_i8 ( ) ) ) ) ;
77
+ lltydescptr = bld :: PointerCast ( llderivedtydescs , lltydescptr ,
78
+ T_ptr ( T_ptr ( T_i8 ( ) ) ) ) ;
76
79
77
- bld:: Call ( bcx , gcroot, [ lltydescptr, lldestindex] ) ;
80
+ bld:: Call ( llderivedtydescs , gcroot, [ lltydescptr, lldestindex] ) ;
78
81
bld:: Call ( bcx, gcroot, [ llvalptr, llsrcindex] ) ;
79
82
}
80
83
tk_param. {
0 commit comments