From 02fb1b0b724abef67591b3ff2ff966e6b031cdab Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Wed, 6 Sep 2017 10:33:53 +0200 Subject: [PATCH 1/2] Fix a bug in the inliner --- src/librustc_mir/transform/inline.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs index 3f8070fb3aa31..dc27da81978c1 100644 --- a/src/librustc_mir/transform/inline.rs +++ b/src/librustc_mir/transform/inline.rs @@ -616,8 +616,9 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Integrator<'a, 'tcx> { Operand::Consume(Lvalue::Local(l)) => *local = l, ref op => bug!("Arg operand `{:?}` is {:?}, not local", idx, op) } + } else { + *local = self.local_map[Local::new(idx - self.args.len())]; } - *local = self.local_map[Local::new(idx - self.args.len())]; } fn visit_lvalue(&mut self, From 5bb870faca71bd139c5c4a00381974f66f29e859 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Wed, 6 Sep 2017 12:25:46 +0200 Subject: [PATCH 2/2] Reintroduce the early returns --- src/librustc_mir/transform/inline.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs index dc27da81978c1..b2572b2d0aba6 100644 --- a/src/librustc_mir/transform/inline.rs +++ b/src/librustc_mir/transform/inline.rs @@ -606,19 +606,24 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Integrator<'a, 'tcx> { _location: Location) { if *local == RETURN_POINTER { match self.destination { - Lvalue::Local(l) => *local = l, + Lvalue::Local(l) => { + *local = l; + return; + }, ref lval => bug!("Return lvalue is {:?}, not local", lval) } } let idx = local.index() - 1; if idx < self.args.len() { match self.args[idx] { - Operand::Consume(Lvalue::Local(l)) => *local = l, + Operand::Consume(Lvalue::Local(l)) => { + *local = l; + return; + }, ref op => bug!("Arg operand `{:?}` is {:?}, not local", idx, op) } - } else { - *local = self.local_map[Local::new(idx - self.args.len())]; } + *local = self.local_map[Local::new(idx - self.args.len())]; } fn visit_lvalue(&mut self,