Skip to content

Commit

Permalink
Ensure that we process projections during MIR inlining
Browse files Browse the repository at this point in the history
Fixes #67710

Previously, we were not calling `super_place`, which resulted in us
failing to update any local references that occur in
ProjectionElem::Index. This caused the post-inlining MIR to contain a
reference to a local ID from the inlined callee, leading to an ICE
due to a type mismatch.
  • Loading branch information
Aaron1011 committed Jan 2, 2020
1 parent 0ec3706 commit e8e53b5
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
12 changes: 4 additions & 8 deletions src/librustc_mir/transform/inline.rs
Original file line number Diff line number Diff line change
Expand Up @@ -671,12 +671,7 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Integrator<'a, 'tcx> {
*local = self.make_integrate_local(local);
}

fn visit_place(
&mut self,
place: &mut Place<'tcx>,
_context: PlaceContext,
_location: Location,
) {
fn visit_place(&mut self, place: &mut Place<'tcx>, context: PlaceContext, location: Location) {
match &mut place.base {
PlaceBase::Static(_) => {}
PlaceBase::Local(l) => {
Expand All @@ -689,10 +684,11 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Integrator<'a, 'tcx> {

place.projection = self.tcx.intern_place_elems(&*projs);
}

*l = self.make_integrate_local(l);
}
}
// Handles integrating any locals that occur in the base
// or projections
self.super_place(place, context, location)
}

fn process_projection_elem(&mut self, elem: &PlaceElem<'tcx>) -> Option<PlaceElem<'tcx>> {
Expand Down
17 changes: 17 additions & 0 deletions src/test/ui/mir/issue-67710-inline-projection.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// compile-flags: -Z mir-opt-level=2
// build-pass

// This used to ICE due to the inling pass not examining projections
// for references to locals

pub fn parse(version: ()) {
p(&b'.', b"0");
}
#[inline(always)]
fn p(byte: &u8, s: &[u8]) {
!(s[0] == *byte);
}

fn main() {
parse(());
}

0 comments on commit e8e53b5

Please sign in to comment.