about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAdam Perry <adam.n.perry@gmail.com>2019-10-10 07:31:22 -0700
committerAdam Perry <adam.n.perry@gmail.com>2019-10-10 07:31:22 -0700
commit407d1d5fd4a81b2bc717fc86475209eb59d50fb8 (patch)
tree94c5502fad585e23fcdaa78d9a0749a949fee502
parent1cdd5d099d3a8da42db6fbd259d3f757bccb961f (diff)
downloadrust-407d1d5fd4a81b2bc717fc86475209eb59d50fb8.tar.gz
rust-407d1d5fd4a81b2bc717fc86475209eb59d50fb8.zip
Instance::resolve_for_fn_ptr unconditionally resolves first.
Per review feedback.
-rw-r--r--src/librustc/ty/instance.rs22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/librustc/ty/instance.rs b/src/librustc/ty/instance.rs
index b35b577ddf7..0a86b0b4148 100644
--- a/src/librustc/ty/instance.rs
+++ b/src/librustc/ty/instance.rs
@@ -310,15 +310,19 @@ impl<'tcx> Instance<'tcx> {
         substs: SubstsRef<'tcx>,
     ) -> Option<Instance<'tcx>> {
         debug!("resolve(def_id={:?}, substs={:?})", def_id, substs);
-        if tcx.codegen_fn_attrs(def_id).flags.contains(CodegenFnAttrFlags::TRACK_CALLER) {
-            debug!(" => fn pointer created for function with #[track_caller]");
-            Some(Instance {
-                def: InstanceDef::ReifyShim(def_id),
-                substs,
-            })
-        } else {
-            Instance::resolve(tcx, param_env, 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
+            }
+        })
     }
 
     pub fn resolve_for_vtable(