1
Fork 0

Instance::resolve_for_fn_ptr unconditionally resolves first.

Per review feedback.
This commit is contained in:
Adam Perry 2019-10-10 07:31:22 -07:00
parent 1cdd5d099d
commit 407d1d5fd4

View file

@ -310,15 +310,19 @@ impl<'tcx> Instance<'tcx> {
substs: SubstsRef<'tcx>, substs: SubstsRef<'tcx>,
) -> Option<Instance<'tcx>> { ) -> Option<Instance<'tcx>> {
debug!("resolve(def_id={:?}, substs={:?})", def_id, substs); debug!("resolve(def_id={:?}, substs={:?})", def_id, substs);
if tcx.codegen_fn_attrs(def_id).flags.contains(CodegenFnAttrFlags::TRACK_CALLER) { Instance::resolve(tcx, param_env, def_id, substs).map(|resolved| {
debug!(" => fn pointer created for function with #[track_caller]"); let resolved_def = resolved.def_id();
Some(Instance { let codegen_attrs = tcx.codegen_fn_attrs(resolved_def);
def: InstanceDef::ReifyShim(def_id), if codegen_attrs.flags.contains(CodegenFnAttrFlags::TRACK_CALLER) {
substs, debug!(" => fn pointer created for function with #[track_caller]");
}) Instance {
} else { def: InstanceDef::ReifyShim(resolved_def),
Instance::resolve(tcx, param_env, def_id, substs) substs,
} }
} else {
resolved
}
})
} }
pub fn resolve_for_vtable( pub fn resolve_for_vtable(