]> git.lizzy.rs Git - rust.git/commitdiff
Fix function pointer calls
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 23 Mar 2017 09:04:08 +0000 (10:04 +0100)
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Thu, 23 Mar 2017 09:04:08 +0000 (10:04 +0100)
src/terminator/mod.rs

index 6a615689ae7ed1831009d874f5f4d36d8442acb4..157fc12a8ce0805f95350b71ba19deca4e881565 100644 (file)
@@ -198,6 +198,28 @@ fn eval_fn_call(
                     _ => 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))),
         }