Skip the transmute checks for closure glue
This commit is contained in:
parent
1391c5a10a
commit
1c9f5ac669
1 changed files with 9 additions and 4 deletions
|
@ -70,10 +70,15 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
|
|||
ty::TyFnDef(_, _, real_sig) => {
|
||||
let sig = self.erase_lifetimes(&sig);
|
||||
let real_sig = self.erase_lifetimes(&real_sig);
|
||||
if sig.abi != real_sig.abi ||
|
||||
sig.variadic != real_sig.variadic ||
|
||||
sig.inputs_and_output != real_sig.inputs_and_output {
|
||||
return Err(EvalError::FunctionPointerTyMismatch(real_sig, sig));
|
||||
match instance.def {
|
||||
// FIXME: this needs checks for weird transmutes
|
||||
// we need to bail here, because noncapturing closures as fn ptrs fail the checks
|
||||
ty::InstanceDef::ClosureOnceShim{..} => {}
|
||||
_ => if sig.abi != real_sig.abi ||
|
||||
sig.variadic != real_sig.variadic ||
|
||||
sig.inputs_and_output != real_sig.inputs_and_output {
|
||||
return Err(EvalError::FunctionPointerTyMismatch(real_sig, sig));
|
||||
},
|
||||
}
|
||||
},
|
||||
ref other => bug!("instance def ty: {:?}", other),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue