From 23cd90ed41b6f1299d51da80cc6481f28a4b0f1f Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 21 Jul 2017 23:18:34 -0700 Subject: [PATCH] add -Z flag for AddValidation pass --- src/librustc/session/config.rs | 2 ++ src/librustc_mir/transform/add_validation.rs | 4 ++++ src/librustc_mir/transform/erase_regions.rs | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 8b55eb4c099a..c5ddcb597cbb 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -1025,6 +1025,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "the directory the MIR is dumped into"), dump_mir_exclude_pass_number: bool = (false, parse_bool, [UNTRACKED], "if set, exclude the pass number when dumping MIR (used in tests)"), + mir_emit_validate: bool = (false, parse_bool, [TRACKED], + "emit Validate MIR statements, interpreted e.g. by miri"), perf_stats: bool = (false, parse_bool, [UNTRACKED], "print some performance-related statistics"), hir_stats: bool = (false, parse_bool, [UNTRACKED], diff --git a/src/librustc_mir/transform/add_validation.rs b/src/librustc_mir/transform/add_validation.rs index 005d793cd8b5..e400683e8b4e 100644 --- a/src/librustc_mir/transform/add_validation.rs +++ b/src/librustc_mir/transform/add_validation.rs @@ -85,6 +85,10 @@ impl MirPass for AddValidation { tcx: TyCtxt<'a, 'tcx, 'tcx>, _: MirSource, mir: &mut Mir<'tcx>) { + if !tcx.sess.opts.debugging_opts.mir_emit_validate { + return; + } + let local_decls = mir.local_decls.clone(); // TODO: Find a way to get rid of this clone. /// Convert an lvalue to a validation operand. diff --git a/src/librustc_mir/transform/erase_regions.rs b/src/librustc_mir/transform/erase_regions.rs index 12b1c549ffec..05376ff3d526 100644 --- a/src/librustc_mir/transform/erase_regions.rs +++ b/src/librustc_mir/transform/erase_regions.rs @@ -77,6 +77,12 @@ impl<'a, 'tcx> MutVisitor<'tcx> for EraseRegionsVisitor<'a, 'tcx> { block: BasicBlock, statement: &mut Statement<'tcx>, location: Location) { + if !self.tcx.sess.opts.debugging_opts.mir_emit_validate { + if let StatementKind::EndRegion(_) = statement.kind { + statement.kind = StatementKind::Nop; + } + } + self.in_validation_statement = match statement.kind { StatementKind::Validate(..) => true, _ => false,