From 0255a5146874f4e340d470af0f6dd96aa5afe8a8 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Thu, 23 Mar 2017 10:04:08 +0100 Subject: [PATCH] Fix function pointer calls --- src/terminator/mod.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/terminator/mod.rs b/src/terminator/mod.rs index 6a615689ae7e..157fc12a8ce0 100644 --- a/src/terminator/mod.rs +++ b/src/terminator/mod.rs @@ -198,6 +198,28 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> { _ => bug!("can only deref pointer types"), }; self.drop(val, instance, pointee_type, span) + }, + ty::InstanceDef::FnPtrShim(..) => { + let mut args = Vec::new(); + for arg in arg_operands { + let arg_val = self.eval_operand(arg)?; + let arg_ty = self.operand_ty(arg); + args.push((arg_val, arg_ty)); + } + match sig.abi { + Abi::Rust => { + args.remove(0); + }, + Abi::RustCall => {}, + _ => unimplemented!(), + } + trace!("ABI: {}", sig.abi); + self.eval_fn_call_inner( + instance, + destination, + args, + span, + ) } _ => Err(EvalError::Unimplemented(format!("can't handle function with {:?} ABI", sig.abi))), }