]> git.lizzy.rs Git - rust.git/commitdiff
resolve_for_fn_ptr checks that the instance is an Item before returning shim.
authorAdam Perry <adam.n.perry@gmail.com>
Fri, 11 Oct 2019 14:44:01 +0000 (07:44 -0700)
committerAdam Perry <adam.n.perry@gmail.com>
Fri, 11 Oct 2019 14:44:01 +0000 (07:44 -0700)
src/librustc/ty/instance.rs

index 0a86b0b41480227456de97e2c4aefa32db58356a..5139c8085a583d7021a0b13fede6e04cdc590e34 100644 (file)
@@ -311,16 +311,18 @@ pub fn resolve_for_fn_ptr(
     ) -> 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,
             }
         })
     }