about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/ty/instance.rs22
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,
             }
         })
     }