Skip to content

Commit 08bea1d

Browse files
committed
Revert "Change the type of the second argument of upcalls to be a %task*.", breaks win32 build.
This reverts commit dcf122e.
1 parent 9b617da commit 08bea1d

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

src/comp/middle/trans.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -861,11 +861,8 @@ fn decl_upcall_glue(ModuleRef llmod, type_names tn,
861861
let int n = _n as int;
862862
let str s = abi.upcall_glue_name(n, pass_task);
863863
let vec[TypeRef] args = vec(T_int()); // callee
864-
865-
args += vec(T_taskptr(tn));
866-
867-
if (pass_task) {
868-
n -= 1; // taskptr is included in n
864+
if (!pass_task) {
865+
args += vec(T_int()); // taskptr, will not be passed
869866
}
870867
args += _vec.init_elt[TypeRef](T_int(), n as uint);
871868

@@ -886,8 +883,10 @@ fn get_upcall(&hashmap[str, ValueRef] upcalls,
886883

887884
fn trans_upcall(@block_ctxt cx, str name, vec[ValueRef] args) -> result {
888885
auto cxx = cx.fcx.ccx;
889-
auto t = trans_upcall2(cx.build, cxx.glues, cx.fcx.lltaskptr,
890-
cxx.upcalls, cxx.tn, cxx.llmod, name, true, args);
886+
auto lltaskptr = cx.build.PtrToInt(cx.fcx.lltaskptr, T_int());
887+
auto args2 = vec(lltaskptr) + args;
888+
auto t = trans_upcall2(cx.build, cxx.glues, lltaskptr,
889+
cxx.upcalls, cxx.tn, cxx.llmod, name, true, args2);
891890
ret res(cx, t);
892891
}
893892

@@ -896,9 +895,6 @@ fn trans_upcall2(builder b, @glue_fns glues, ValueRef lltaskptr,
896895
type_names tn, ModuleRef llmod, str name,
897896
bool pass_task, vec[ValueRef] args) -> ValueRef {
898897
let int n = (_vec.len[ValueRef](args) as int);
899-
if (pass_task) {
900-
n += 1;
901-
}
902898
let ValueRef llupcall = get_upcall(upcalls, llmod, name, n);
903899
llupcall = llvm.LLVMConstPointerCast(llupcall, T_int());
904900

@@ -910,7 +906,9 @@ fn trans_upcall2(builder b, @glue_fns glues, ValueRef lltaskptr,
910906
}
911907
let vec[ValueRef] call_args = vec(llupcall);
912908

913-
call_args += vec(lltaskptr);
909+
if (!pass_task) {
910+
call_args += vec(lltaskptr);
911+
}
914912

915913
for (ValueRef a in args) {
916914
call_args += vec(b.ZExtOrBitCast(a, T_int()));
@@ -5733,9 +5731,11 @@ fn decl_native_fn_and_pair(@crate_ctxt cx,
57335731
auto arg_n = 3u;
57345732
auto pass_task;
57355733

5734+
auto lltaskptr = bcx.build.PtrToInt(fcx.lltaskptr, T_int());
57365735
alt (abi) {
57375736
case (ast.native_abi_rust) {
57385737
pass_task = true;
5738+
call_args += vec(lltaskptr);
57395739
for each (uint i in _uint.range(0u, num_ty_param)) {
57405740
auto llarg = llvm.LLVMGetParam(fcx.llfn, arg_n);
57415741
check (llarg as int != 0);
@@ -5755,8 +5755,8 @@ fn decl_native_fn_and_pair(@crate_ctxt cx,
57555755
arg_n += 1u;
57565756
}
57575757

5758-
auto r = trans_upcall2(bcx.build, cx.glues, fcx.lltaskptr, cx.upcalls,
5759-
cx.tn, cx.llmod, name, pass_task, call_args);
5758+
auto r = trans_upcall2(bcx.build, cx.glues, lltaskptr, cx.upcalls, cx.tn,
5759+
cx.llmod, name, pass_task, call_args);
57605760
auto rptr = bcx.build.BitCast(fcx.llretptr, T_ptr(T_i32()));
57615761
bcx.build.Store(r, rptr);
57625762
bcx.build.RetVoid();

0 commit comments

Comments
 (0)