diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2018-06-05 06:13:28 -0400 |
|---|---|---|
| committer | David Wood <david@davidtw.co> | 2018-07-01 15:30:43 +0100 |
| commit | 9e2157fdcac358646d2ff2ca888d2a63df565239 (patch) | |
| tree | e273f2f3b1a48942c94eb30e0bfadf7d7275e571 /src | |
| parent | 0b620186fdac2a8a671d445ac25ef33d1df44153 (diff) | |
| download | rust-9e2157fdcac358646d2ff2ca888d2a63df565239.tar.gz rust-9e2157fdcac358646d2ff2ca888d2a63df565239.zip | |
don't consider assignments to temporaries "interesting"
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/type_check/mod.rs | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/librustc_mir/borrow_check/nll/type_check/mod.rs b/src/librustc_mir/borrow_check/nll/type_check/mod.rs index 782b07d02f4..911e5434259 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/mod.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/mod.rs @@ -798,9 +798,21 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> { let tcx = self.tcx(); match stmt.kind { StatementKind::Assign(ref place, ref rv) => { + // Assignments to temporaries are not "interesting"; + // they are not caused by the user, but rather artifacts + // of lowering. Assignments to other sorts of places *are* interesting + // though. + let is_temp = if let Place::Local(l) = place { + !mir.local_decls[*l].is_user_variable.is_some() + } else { + false + }; + + let locations = if is_temp { location.boring() } else { location.interesting() }; + let place_ty = place.ty(mir, tcx).to_ty(tcx); let rv_ty = rv.ty(mir, tcx); - if let Err(terr) = self.sub_types(rv_ty, place_ty, location.interesting()) { + if let Err(terr) = self.sub_types(rv_ty, place_ty, locations) { span_mirbug!( self, stmt, |
