diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-02-07 17:28:07 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-02-20 02:50:26 +0200 |
| commit | e598bdfaa017e3bf786c19587ea917c6a8aa984e (patch) | |
| tree | f12ff10aa665b36d7b51bf9ef2a81a43b6ddf99a /src | |
| parent | b88180f74c39cb57dc7426f9ad3be813f356ecee (diff) | |
| download | rust-e598bdfaa017e3bf786c19587ea917c6a8aa984e.tar.gz rust-e598bdfaa017e3bf786c19587ea917c6a8aa984e.zip | |
rustc_mir: do not remove dead user variables if debuginfo needs them.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_mir/transform/simplify.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/librustc_mir/transform/simplify.rs b/src/librustc_mir/transform/simplify.rs index e7675b4ceaf..2c6ed1f19b7 100644 --- a/src/librustc_mir/transform/simplify.rs +++ b/src/librustc_mir/transform/simplify.rs @@ -42,6 +42,7 @@ use rustc_data_structures::indexed_vec::{Idx, IndexVec}; use rustc::ty::TyCtxt; use rustc::mir::*; use rustc::mir::visit::{MutVisitor, Visitor, PlaceContext}; +use rustc::session::config::FullDebugInfo; use std::borrow::Cow; use transform::{MirPass, MirSource}; @@ -281,16 +282,24 @@ pub struct SimplifyLocals; impl MirPass for SimplifyLocals { fn run_pass<'a, 'tcx>(&self, - _: TyCtxt<'a, 'tcx, 'tcx>, + tcx: TyCtxt<'a, 'tcx, 'tcx>, _: MirSource, mir: &mut Mir<'tcx>) { let mut marker = DeclMarker { locals: BitVector::new(mir.local_decls.len()) }; marker.visit_mir(mir); // Return pointer and arguments are always live - marker.locals.insert(0); - for idx in mir.args_iter() { - marker.locals.insert(idx.index()); + marker.locals.insert(RETURN_PLACE.index()); + for arg in mir.args_iter() { + marker.locals.insert(arg.index()); } + + // We may need to keep dead user variables live for debuginfo. + if tcx.sess.opts.debuginfo == FullDebugInfo { + for local in mir.vars_iter() { + marker.locals.insert(local.index()); + } + } + let map = make_local_map(&mut mir.local_decls, marker.locals); // Update references to all vars and tmps now LocalUpdater { map: map }.visit_mir(mir); |
