diff options
| author | Adam Perry <adam.n.perry@gmail.com> | 2019-10-11 07:44:01 -0700 |
|---|---|---|
| committer | Adam Perry <adam.n.perry@gmail.com> | 2019-10-11 07:44:01 -0700 |
| commit | d92cef74736aa4503e37ee67806ce5ab3a4eb97a (patch) | |
| tree | a12effefa08e3afea9c69038d331ad0e21064c40 | |
| parent | 2dbc62b56a1ce0457108c86156a6ab357d870f08 (diff) | |
| download | rust-d92cef74736aa4503e37ee67806ce5ab3a4eb97a.tar.gz rust-d92cef74736aa4503e37ee67806ce5ab3a4eb97a.zip | |
resolve_for_fn_ptr checks that the instance is an Item before returning shim.
| -rw-r--r-- | src/librustc/ty/instance.rs | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/librustc/ty/instance.rs b/src/librustc/ty/instance.rs index 0a86b0b4148..5139c8085a5 100644 --- a/src/librustc/ty/instance.rs +++ b/src/librustc/ty/instance.rs @@ -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, } }) } |
