Skip to content

Commit bf9cebf

Browse files
committed
Fix a bug in linearize and get the captured tydescs type right.
1 parent caa5b92 commit bf9cebf

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

src/comp/middle/trans.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,12 @@ fn T_tydesc() -> TypeRef {
240240

241241
auto th = mk_type_handle();
242242
auto abs_tydesc = llvm.LLVMResolveTypeHandle(th.llth);
243-
243+
auto tydescpp = T_ptr(T_ptr(abs_tydesc));
244244
auto pvoid = T_ptr(T_i8());
245245
auto glue_fn_ty = T_ptr(T_fn(vec(T_taskptr(),
246-
T_ptr(abs_tydesc),
246+
tydescpp,
247247
pvoid), T_void()));
248-
auto tydesc = T_struct(vec(T_ptr(abs_tydesc), // first_param
248+
auto tydesc = T_struct(vec(tydescpp, // first_param
249249
T_int(), // size
250250
T_int(), // align
251251
glue_fn_ty, // take_glue_off
@@ -907,8 +907,8 @@ fn linearize_ty_params(@block_ctxt cx, @ty.t t)
907907
let vec[ValueRef] param_vals = vec();
908908
let vec[ast.def_id] param_defs = vec();
909909
type rr = rec(@block_ctxt cx,
910-
mutable vec[ValueRef] vals,
911-
mutable vec[ast.def_id] defs);
910+
mutable vec[ValueRef] vals,
911+
mutable vec[ast.def_id] defs);
912912

913913
state obj folder(@rr r) {
914914
fn fold_simple_ty(@ty.t t) -> @ty.t {
@@ -921,7 +921,7 @@ fn linearize_ty_params(@block_ctxt cx, @ty.t t)
921921
}
922922
}
923923
if (!seen) {
924-
r.vals += cx.fcx.lltydescs.get(pid);
924+
r.vals += r.cx.fcx.lltydescs.get(pid);
925925
r.defs += pid;
926926
}
927927
}
@@ -957,6 +957,8 @@ fn get_tydesc(&@block_ctxt cx, @ty.t t) -> ValueRef {
957957
make_tydesc(cx.fcx.ccx, t, tys._0);
958958
}
959959

960+
auto root = cx.fcx.ccx.tydescs.get(t);
961+
960962
cx.fcx.ccx.sess.unimpl("derived type descriptors");
961963
}
962964

@@ -977,9 +979,9 @@ fn make_tydesc(@crate_ctxt cx, @ty.t t, vec[ast.def_id] typaram_defs) {
977979
auto llty = type_of(cx, t);
978980
auto pvoid = T_ptr(T_i8());
979981
auto glue_fn_ty = T_ptr(T_fn(vec(T_taskptr(),
980-
T_ptr(T_tydesc()),
982+
T_ptr(T_ptr(T_tydesc())),
981983
pvoid), T_void()));
982-
auto tydesc = C_struct(vec(C_null(T_ptr(T_tydesc())),
984+
auto tydesc = C_struct(vec(C_null(T_ptr(T_ptr(T_tydesc()))),
983985
llsize_of(llty),
984986
llalign_of(llty),
985987
take_glue, // take_glue_off
@@ -1003,7 +1005,7 @@ fn make_generic_glue(@crate_ctxt cx, @ty.t t, str name,
10031005
val_and_ty_fn helper,
10041006
vec[ast.def_id] typaram_defs) -> ValueRef {
10051007
auto llfnty = T_fn(vec(T_taskptr(),
1006-
T_ptr(T_tydesc()),
1008+
T_ptr(T_ptr(T_tydesc())),
10071009
T_ptr(T_i8())), T_void());
10081010

10091011
auto fn_name = cx.names.next("_rust_" + name) + "." + ty.ty_to_str(t);

0 commit comments

Comments
 (0)