about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2017-12-19 15:47:59 -0300
committerNiko Matsakis <niko@alum.mit.edu>2017-12-20 14:38:13 -0500
commite980fb8befe789cd6db13ffff38f7a0901cbc57c (patch)
treebc9c8e66358642fc1fb276e0cde013504fb9990c /src
parent2019d69f6158be1f2108c12264b2beb94af0aafe (diff)
downloadrust-e980fb8befe789cd6db13ffff38f7a0901cbc57c.tar.gz
rust-e980fb8befe789cd6db13ffff38f7a0901cbc57c.zip
feature nll implies borrowck=mir
Diffstat (limited to 'src')
-rw-r--r--src/librustc/session/mod.rs22
-rw-r--r--src/librustc_borrowck/borrowck/mod.rs2
-rw-r--r--src/librustc_mir/borrow_check/mod.rs2
-rw-r--r--src/librustc_mir/util/borrowck_errors.rs2
-rw-r--r--src/test/run-pass/borrowck/two-phase-control-flow-split-before-activation.rs1
5 files changed, 23 insertions, 6 deletions
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs
index f897ba4df1d..903bfc44c1d 100644
--- a/src/librustc/session/mod.rs
+++ b/src/librustc/session/mod.rs
@@ -18,7 +18,7 @@ use lint;
 use middle::allocator::AllocatorKind;
 use middle::dependency_format;
 use session::search_paths::PathKind;
-use session::config::DebugInfoLevel;
+use session::config::{BorrowckMode, DebugInfoLevel};
 use ty::tls;
 use util::nodemap::{FxHashMap, FxHashSet};
 use util::common::{duration_to_secs_str, ErrorReported};
@@ -440,16 +440,34 @@ impl Session {
     pub fn nll(&self) -> bool {
         self.features.borrow().nll || self.opts.debugging_opts.nll
     }
+    pub fn use_mir(&self) -> bool {
+        self.features.borrow().nll || self.opts.borrowck_mode.use_mir()
+    }
     pub fn nll_dump_cause(&self) -> bool {
         self.opts.debugging_opts.nll_dump_cause
     }
     pub fn two_phase_borrows(&self) -> bool {
         self.features.borrow().nll || self.opts.debugging_opts.two_phase_borrows
     }
+    pub fn borrowck_mode(&self) -> BorrowckMode {
+        match self.opts.borrowck_mode {
+            mode @ BorrowckMode::Mir |
+            mode @ BorrowckMode::Compare => mode,
+
+            mode @ BorrowckMode::Ast => {
+                if self.features.borrow().nll {
+                    BorrowckMode::Mir
+                } else {
+                    mode
+                }
+            }
+
+        }
+    }
     pub fn emit_end_regions(&self) -> bool {
         self.opts.debugging_opts.emit_end_regions ||
             (self.opts.debugging_opts.mir_emit_validate > 0) ||
-            self.opts.borrowck_mode.use_mir()
+            self.use_mir()
     }
     pub fn lto(&self) -> bool {
         self.opts.cg.lto || self.target.target.options.requires_lto
diff --git a/src/librustc_borrowck/borrowck/mod.rs b/src/librustc_borrowck/borrowck/mod.rs
index 62736db9260..b124872ba12 100644
--- a/src/librustc_borrowck/borrowck/mod.rs
+++ b/src/librustc_borrowck/borrowck/mod.rs
@@ -275,7 +275,7 @@ impl<'b, 'tcx: 'b> BorrowckErrors for BorrowckCtxt<'b, 'tcx> {
                                 o: Origin)
                                 -> DiagnosticBuilder<'a>
     {
-        if !o.should_emit_errors(self.tcx.sess.opts.borrowck_mode) {
+        if !o.should_emit_errors(self.tcx.sess.borrowck_mode()) {
             self.tcx.sess.diagnostic().cancel(&mut diag);
         }
         diag
diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs
index b53e3e4c17a..7a6c2c25bf1 100644
--- a/src/librustc_mir/borrow_check/mod.rs
+++ b/src/librustc_mir/borrow_check/mod.rs
@@ -73,7 +73,7 @@ fn mir_borrowck<'a, 'tcx>(
     debug!("run query mir_borrowck: {}", tcx.item_path_str(def_id));
 
     if {
-        !tcx.has_attr(def_id, "rustc_mir_borrowck") && !tcx.sess.opts.borrowck_mode.use_mir()
+        !tcx.has_attr(def_id, "rustc_mir_borrowck") && !tcx.sess.use_mir()
             && !tcx.sess.nll()
     } {
         return None;
diff --git a/src/librustc_mir/util/borrowck_errors.rs b/src/librustc_mir/util/borrowck_errors.rs
index 7cd92de88ee..38227bd7133 100644
--- a/src/librustc_mir/util/borrowck_errors.rs
+++ b/src/librustc_mir/util/borrowck_errors.rs
@@ -509,7 +509,7 @@ impl<'b, 'gcx, 'tcx> BorrowckErrors for TyCtxt<'b, 'gcx, 'tcx> {
                                 o: Origin)
                                 -> DiagnosticBuilder<'a>
     {
-        if !o.should_emit_errors(self.sess.opts.borrowck_mode) {
+        if !o.should_emit_errors(self.sess.borrowck_mode()) {
             self.sess.diagnostic().cancel(&mut diag);
         }
         diag
diff --git a/src/test/run-pass/borrowck/two-phase-control-flow-split-before-activation.rs b/src/test/run-pass/borrowck/two-phase-control-flow-split-before-activation.rs
index 162314a8b79..35a5422040a 100644
--- a/src/test/run-pass/borrowck/two-phase-control-flow-split-before-activation.rs
+++ b/src/test/run-pass/borrowck/two-phase-control-flow-split-before-activation.rs
@@ -10,7 +10,6 @@
 
 // revisions: lxl nll
 //[lxl]compile-flags: -Z borrowck=mir -Z two-phase-borrows
-//[nll]compile-flags: -Z borrowck=mir
 
 #![cfg_attr(nll, feature(nll))]