From 32e7dcb6fb22e0b33e7bc18c1f24b4ea2b5d719d Mon Sep 17 00:00:00 2001 From: David Renshaw Date: Wed, 28 Jun 2017 21:24:17 -0400 Subject: [PATCH] update for upstream changes to TyFnDef --- src/eval_context.rs | 14 ++++++++------ src/terminator/mod.rs | 5 +++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/eval_context.rs b/src/eval_context.rs index cdf2715995ce..dbad616f9196 100644 --- a/src/eval_context.rs +++ b/src/eval_context.rs @@ -771,7 +771,7 @@ pub(super) fn eval_rvalue_into_lvalue( } ReifyFnPointer => match self.operand_ty(operand).sty { - ty::TyFnDef(def_id, substs, _) => { + ty::TyFnDef(def_id, substs) => { let instance = resolve(self.tcx, def_id, substs); let fn_ptr = self.memory.create_fn_alloc(instance); self.write_value(Value::ByVal(PrimVal::Ptr(fn_ptr)), dest, dest_ty)?; @@ -1686,7 +1686,7 @@ fn run_main<'a, 'tcx: 'a>( let main_ptr = ecx.memory.create_fn_alloc(main_instance); let dest = ecx.eval_lvalue(&mir::Lvalue::Local(args.next().unwrap()))?; let main_ty = main_instance.def.def_ty(ecx.tcx); - let main_ptr_ty = ecx.tcx.mk_fn_ptr(main_ty.fn_sig()); + let main_ptr_ty = ecx.tcx.mk_fn_ptr(main_ty.fn_sig(ecx.tcx)); ecx.write_value(Value::ByVal(PrimVal::Ptr(main_ptr)), dest, main_ptr_ty)?; // Second argument (argc): 0 @@ -1830,7 +1830,7 @@ fn fn_once_adapter_instance<'a, 'tcx>( let self_ty = tcx.mk_closure_from_closure_substs( closure_did, substs); - let sig = tcx.closure_type(closure_did).subst(tcx, substs.substs); + let sig = tcx.fn_sig(closure_did).subst(tcx, substs.substs); let sig = tcx.erase_late_bound_regions_and_normalize(&sig); assert_eq!(sig.inputs().len(), 1); let substs = tcx.mk_substs([ @@ -1891,9 +1891,11 @@ pub fn resolve<'a, 'tcx>( } else { let item_type = def_ty(tcx, def_id, substs); let def = match item_type.sty { - ty::TyFnDef(_, _, f) if - f.abi() == Abi::RustIntrinsic || - f.abi() == Abi::PlatformIntrinsic => + ty::TyFnDef(..) if { + let f = item_type.fn_sig(tcx); + f.abi() == Abi::RustIntrinsic || + f.abi() == Abi::PlatformIntrinsic + } => { debug!(" => intrinsic"); ty::InstanceDef::Intrinsic(def_id) diff --git a/src/terminator/mod.rs b/src/terminator/mod.rs index 7d0d8fb161ed..534eb777e414 100644 --- a/src/terminator/mod.rs +++ b/src/terminator/mod.rs @@ -72,7 +72,8 @@ pub(super) fn eval_terminator( let instance_ty = instance.def.def_ty(self.tcx); let instance_ty = self.monomorphize(instance_ty, instance.substs); match instance_ty.sty { - ty::TyFnDef(_, _, real_sig) => { + ty::TyFnDef(..) => { + let real_sig = instance_ty.fn_sig(self.tcx); let sig = self.erase_lifetimes(&sig); let real_sig = self.erase_lifetimes(&real_sig); if !self.check_sig_compat(sig, real_sig)? { @@ -83,7 +84,7 @@ pub(super) fn eval_terminator( } (instance, sig) }, - ty::TyFnDef(def_id, substs, sig) => (::eval_context::resolve(self.tcx, def_id, substs), sig), + ty::TyFnDef(def_id, substs) => (::eval_context::resolve(self.tcx, def_id, substs), func_ty.fn_sig(self.tcx)), _ => { let msg = format!("can't handle callee of type {:?}", func_ty); return Err(EvalError::Unimplemented(msg));