]> git.lizzy.rs Git - rust.git/commitdiff
ugly, but works!
authorDouglas Campos <qmx@qmx.me>
Thu, 7 Sep 2017 03:03:41 +0000 (23:03 -0400)
committerDouglas Campos <qmx@qmx.me>
Thu, 7 Sep 2017 03:06:14 +0000 (23:06 -0400)
src/librustc_mir/transform/inline.rs

index 3f8070fb3aa31929cb7b577060f64c9095978947..4477496f231e5a764e1282cef92ce332a4e29224 100644 (file)
@@ -88,12 +88,22 @@ fn run_pass(&self, caller_mir: &mut Mir<'tcx>) {
                 if let TerminatorKind::Call {
                     func: Operand::Constant(ref f), .. } = terminator.kind {
                     if let ty::TyFnDef(callee_def_id, substs) = f.ty.sty {
-                        callsites.push_back(CallSite {
-                            callee: callee_def_id,
-                            substs,
-                            bb,
-                            location: terminator.source_info
-                        });
+                        let should_inline = match self.tcx.opt_associated_item(callee_def_id) {
+                            Some(item) => match item.container {
+                               ty::AssociatedItemContainer::ImplContainer(_) => true,
+                               ty::AssociatedItemContainer::TraitContainer(_) => false,
+                            },
+                            None => true
+                        };
+
+                        if should_inline {
+                            callsites.push_back(CallSite {
+                                callee: callee_def_id,
+                                substs,
+                                bb,
+                                location: terminator.source_info
+                            });
+                        }
                     }
                 }
             }