+ let extra_args = &args[sig.inputs().len()..];
+ let extra_args = extra_args.iter().map(|op_arg| {
+ let op_ty = op_arg.ty(self.mir, bx.tcx());
+ self.monomorphize(&op_ty)
+ }).collect::<Vec<_>>();
+
+ let fn_ty = match def {
+ Some(ty::InstanceDef::Virtual(..)) => {
+ FnType::new_vtable(bx.cx, sig, &extra_args)
+ }
+ Some(ty::InstanceDef::DropGlue(_, None)) => {
+ // empty drop glue - a nop.
+ let &(_, target) = destination.as_ref().unwrap();
+ funclet_br(self, bx, target);
+ return;
+ }
+ _ => FnType::new(bx.cx, sig, &extra_args)
+ };
+
+ // emit a panic instead of instantiating an uninhabited type