@@ -857,22 +857,22 @@ fn get_upcall(&hashmap[str, ValueRef] upcalls,
857
857
fn trans_upcall ( @block_ctxt cx , str name , vec[ ValueRef ] args ) -> result {
858
858
auto cxx = cx. fcx . ccx ;
859
859
auto lltaskptr = cx. build . PtrToInt ( cx. fcx . lltaskptr , T_int ( ) ) ;
860
- auto t = trans_upcall2 ( cx. build , cxx. glues , lltaskptr,
861
- cxx. upcalls , cxx. tn , cxx. llmod , name, args) ;
860
+ auto args2 = vec ( lltaskptr) + args;
861
+ auto t = trans_upcall2 ( cx. build , cxx. glues ,
862
+ cxx. upcalls , cxx. tn , cxx. llmod , name, args2) ;
862
863
ret res( cx, t) ;
863
864
}
864
865
865
- fn trans_upcall2 ( builder b, @glue_fns glues , ValueRef lltaskptr ,
866
+ fn trans_upcall2 ( builder b, @glue_fns glues ,
866
867
& hashmap[ str, ValueRef ] upcalls ,
867
868
type_names tn, ModuleRef llmod, str name ,
868
869
vec[ ValueRef ] args ) -> ValueRef {
869
- let int n = ( _vec. len [ ValueRef ] ( args) as int ) + 1 ;
870
+ let int n = ( _vec. len [ ValueRef ] ( args) as int ) ;
870
871
let ValueRef llupcall = get_upcall ( upcalls, tn, llmod, name, n) ;
871
872
llupcall = llvm. LLVMConstPointerCast ( llupcall, T_int ( ) ) ;
872
873
873
874
let ValueRef llglue = glues. upcall_glues . ( n) ;
874
875
let vec[ ValueRef ] call_args = vec ( llupcall) ;
875
- call_args += vec ( b. ZExtOrBitCast ( lltaskptr, T_int ( ) ) ) ;
876
876
877
877
for ( ValueRef a in args) {
878
878
call_args += vec ( b. ZExtOrBitCast ( a, T_int ( ) ) ) ;
@@ -5694,9 +5694,9 @@ fn trans_exit_task_glue(@glue_fns glues,
5694
5694
auto entrybb = llvm. LLVMAppendBasicBlock ( llfn, _str. buf ( "entry" ) ) ;
5695
5695
auto build = new_builder ( entrybb) ;
5696
5696
auto tptr = build. PtrToInt ( lltaskptr, T_int ( ) ) ;
5697
-
5698
- trans_upcall2 ( build, glues, tptr ,
5699
- upcalls, tn, llmod, "upcall_exit" , V_args ) ;
5697
+ auto V_args2 = vec ( tptr ) + V_args ;
5698
+ trans_upcall2 ( build, glues,
5699
+ upcalls, tn, llmod, "upcall_exit" , V_args2 ) ;
5700
5700
build. RetVoid ( ) ;
5701
5701
}
5702
5702
0 commit comments