diff options
| author | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-06-05 19:54:50 +0200 |
|---|---|---|
| committer | Oliver Schneider <github35764891676564198441@oli-obk.de> | 2018-06-05 20:49:47 +0200 |
| commit | 8a74be6684a6b0f02c5d4a36cbc19201a9d6f34f (patch) | |
| tree | eda3d8f417d363cbd00635764c0d76499d6bd02d /src | |
| parent | 5950496c92f99d15d85432c0c0eace5fb6b25c02 (diff) | |
| download | rust-8a74be6684a6b0f02c5d4a36cbc19201a9d6f34f.tar.gz rust-8a74be6684a6b0f02c5d4a36cbc19201a9d6f34f.zip | |
Add source information the const propagation of places
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/transform/const_prop.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs index 83b4ea54aab..24382815084 100644 --- a/src/librustc_mir/transform/const_prop.rs +++ b/src/librustc_mir/transform/const_prop.rs @@ -233,14 +233,14 @@ impl<'b, 'a, 'tcx:'b> ConstPropagator<'b, 'a, 'tcx> { } } - fn eval_place(&mut self, place: &Place<'tcx>) -> Option<Const<'tcx>> { + fn eval_place(&mut self, place: &Place<'tcx>, source_info: SourceInfo) -> Option<Const<'tcx>> { match *place { Place::Local(loc) => self.places[loc].clone(), Place::Projection(ref proj) => match proj.elem { ProjectionElem::Field(field, _) => { trace!("field proj on {:?}", proj.base); - let (base, ty, span) = self.eval_place(&proj.base)?; - let valty = self.use_ecx(span, |this| { + let (base, ty, span) = self.eval_place(&proj.base, source_info)?; + let valty = self.use_ecx(source_info, |this| { this.ecx.read_field(base, None, field, ty) })?; Some((valty.value, valty.ty, span)) @@ -254,7 +254,8 @@ impl<'b, 'a, 'tcx:'b> ConstPropagator<'b, 'a, 'tcx> { fn eval_operand(&mut self, op: &Operand<'tcx>, source_info: SourceInfo) -> Option<Const<'tcx>> { match *op { Operand::Constant(ref c) => self.eval_constant(c, source_info), - Operand::Move(ref place) | Operand::Copy(ref place) => self.eval_place(place), + | Operand::Move(ref place) + | Operand::Copy(ref place) => self.eval_place(place, source_info), } } |
