1
Fork 0

resolve_for_fn_ptr checks that the instance is an Item before returning shim.

This commit is contained in:
Adam Perry 2019-10-11 07:44:01 -07:00
parent 2dbc62b56a
commit d92cef7473

View file

@ -311,16 +311,18 @@ impl<'tcx> Instance<'tcx> {
) -> Option<Instance<'tcx>> {
debug!("resolve(def_id={:?}, substs={:?})", def_id, substs);
Instance::resolve(tcx, param_env, def_id, substs).map(|resolved| {
let resolved_def = resolved.def_id();
let codegen_attrs = tcx.codegen_fn_attrs(resolved_def);
if codegen_attrs.flags.contains(CodegenFnAttrFlags::TRACK_CALLER) {
debug!(" => fn pointer created for function with #[track_caller]");
Instance {
def: InstanceDef::ReifyShim(resolved_def),
substs,
}
} else {
resolved
let has_track_caller = |def| tcx.codegen_fn_attrs(def).flags
.contains(CodegenFnAttrFlags::TRACK_CALLER);
match resolved.def {
InstanceDef::Item(def_id) if has_track_caller(def_id) => {
debug!(" => fn pointer created for function with #[track_caller]");
Instance {
def: InstanceDef::ReifyShim(def_id),
substs,
}
},
_ => resolved,
}
})
}