summaryrefslogtreecommitdiff
path: root/src/librustc_mir
diff options
context:
space:
mode:
authorSaleem Jaffer <saleem@acko.com>2019-03-18 14:51:08 +0530
committerSaleem Jaffer <saleem@acko.com>2019-03-18 15:03:30 +0530
commit23c87a1f53a502cfca3ced42a33cf1389f6c081e (patch)
tree428658fde49afde8024982ff61ae19d0ecab290e /src/librustc_mir
parenta837b8a3688d746bc392a65524fe7d06fdb61263 (diff)
downloadrust-23c87a1f53a502cfca3ced42a33cf1389f6c081e.tar.gz
fixed all compilation errors
Diffstat (limited to 'src/librustc_mir')
-rw-r--r--src/librustc_mir/borrow_check/mod.rs14
-rw-r--r--src/librustc_mir/borrow_check/place_ext.rs7
-rw-r--r--src/librustc_mir/borrow_check/places_conflict.rs2
-rw-r--r--src/librustc_mir/interpret/place.rs2
-rw-r--r--src/librustc_mir/transform/const_prop.rs2
-rw-r--r--src/librustc_mir/transform/inline.rs1
-rw-r--r--src/librustc_mir/transform/promote_consts.rs17
-rw-r--r--src/librustc_mir/transform/qualify_consts.rs4
8 files changed, 26 insertions, 23 deletions
diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs
index e92ed1f2c7c..e538622103a 100644
--- a/src/librustc_mir/borrow_check/mod.rs
+++ b/src/librustc_mir/borrow_check/mod.rs
@@ -1983,20 +1983,16 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
// The rules for promotion are made by `qualify_consts`, there wouldn't even be a
// `Place::Promoted` if the promotion weren't 100% legal. So we just forward this
Place::Base(PlaceBase::Static(ref static_)) => {
- if static_.promoted.is_some() {
+ if static_.promoted.is_some() ||
+ (static_.promoted.is_none() &&
+ self.infcx.tcx.is_static(static_.def_id) == Some(hir::Mutability::MutMutable)
+ ){
Ok(RootPlace {
place,
is_local_mutation_allowed,
})
} else {
- if self.infcx.tcx.is_static(static_.def_id) != Some(hir::Mutability::MutMutable) {
- Err(place)
- } else {
- Ok(RootPlace {
- place,
- is_local_mutation_allowed,
- })
- }
+ Err(place)
}
}
Place::Projection(ref proj) => {
diff --git a/src/librustc_mir/borrow_check/place_ext.rs b/src/librustc_mir/borrow_check/place_ext.rs
index 5e691db0a2e..0452465f0b9 100644
--- a/src/librustc_mir/borrow_check/place_ext.rs
+++ b/src/librustc_mir/borrow_check/place_ext.rs
@@ -50,11 +50,8 @@ impl<'tcx> PlaceExt<'tcx> for Place<'tcx> {
}
}
Place::Base(PlaceBase::Static(static_)) => {
- if static_.promoted.is_none() {
- tcx.is_static(static_.def_id) == Some(hir::Mutability::MutMutable)
- } else {
- false
- }
+ static_.promoted.is_none() &&
+ (tcx.is_static(static_.def_id) == Some(hir::Mutability::MutMutable))
}
Place::Projection(proj) => match proj.elem {
ProjectionElem::Field(..)
diff --git a/src/librustc_mir/borrow_check/places_conflict.rs b/src/librustc_mir/borrow_check/places_conflict.rs
index c4f9df0cfe5..783751056d7 100644
--- a/src/librustc_mir/borrow_check/places_conflict.rs
+++ b/src/librustc_mir/borrow_check/places_conflict.rs
@@ -403,7 +403,7 @@ fn place_element_conflict<'a, 'gcx: 'tcx, 'tcx>(
Overlap::Disjoint
}
},
- (p1_, p2_) => {
+ (_, _) => {
debug!("place_element_conflict: DISJOINT-STATIC-PROMOTED");
Overlap::Disjoint
}
diff --git a/src/librustc_mir/interpret/place.rs b/src/librustc_mir/interpret/place.rs
index 7adcb118f84..6089e491684 100644
--- a/src/librustc_mir/interpret/place.rs
+++ b/src/librustc_mir/interpret/place.rs
@@ -584,7 +584,7 @@ where
use rustc::mir::PlaceBase;
use rustc::mir::Static;
Ok(match *mir_place {
- Base(PlaceBase::Static(box Static {promoted: Some(promoted), ty, ..})) => {
+ Base(PlaceBase::Static(box Static {promoted: Some(promoted), ty: _, ..})) => {
let instance = self.frame().instance;
self.const_eval_raw(GlobalId {
instance,
diff --git a/src/librustc_mir/transform/const_prop.rs b/src/librustc_mir/transform/const_prop.rs
index 3ee26e7dd26..c5c3a1b8eca 100644
--- a/src/librustc_mir/transform/const_prop.rs
+++ b/src/librustc_mir/transform/const_prop.rs
@@ -283,7 +283,7 @@ impl<'a, 'mir, 'tcx> ConstPropagator<'a, 'mir, 'tcx> {
// an `Index` projection would throw us off-track.
_ => None,
},
- Place::Base(PlaceBase::Static(box Static {promoted: Some(promoted), ty, ..})) => {
+ Place::Base(PlaceBase::Static(box Static {promoted: Some(promoted), ty: _, ..})) => {
let generics = self.tcx.generics_of(self.source.def_id());
if generics.requires_monomorphization(self.tcx) {
// FIXME: can't handle code with generics
diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs
index 0b2a34d5fb9..86b7da17879 100644
--- a/src/librustc_mir/transform/inline.rs
+++ b/src/librustc_mir/transform/inline.rs
@@ -702,6 +702,7 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Integrator<'a, 'tcx> {
None => self.super_place(place, _ctxt, _location)
}
},
+ _ => self.super_place(place, _ctxt, _location)
}
}
diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs
index 831d8b46a65..d777a7b362b 100644
--- a/src/librustc_mir/transform/promote_consts.rs
+++ b/src/librustc_mir/transform/promote_consts.rs
@@ -12,6 +12,7 @@
//! initialization and can otherwise silence errors, if
//! move analysis runs after promotion on broken MIR.
+use rustc::hir::def_id::DefId;
use rustc::mir::*;
use rustc::mir::visit::{PlaceContext, MutatingUseContext, MutVisitor, Visitor};
use rustc::mir::traversal::ReversePostorder;
@@ -151,7 +152,8 @@ struct Promoter<'a, 'tcx: 'a> {
/// If true, all nested temps are also kept in the
/// source MIR, not moved to the promoted MIR.
- keep_original: bool
+ keep_original: bool,
+ def_id: DefId
}
impl<'a, 'tcx> Promoter<'a, 'tcx> {
@@ -287,14 +289,19 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> {
}
fn promote_candidate(mut self, candidate: Candidate) {
+ use rustc::mir::Static;
let mut operand = {
+ let def_id = self.def_id.clone();
let promoted = &mut self.promoted;
let promoted_id = Promoted::new(self.source.promoted.len());
let mut promoted_place = |ty, span| {
promoted.span = span;
promoted.local_decls[RETURN_PLACE] =
LocalDecl::new_return_place(ty, span);
- Place::Base(PlaceBase::Promoted(box (promoted_id, ty)))
+ Place::Base(PlaceBase::Static(
+ Box::new(Static { def_id: def_id, ty, promoted: Some(promoted_id) })
+ )
+ )
};
let (blocks, local_decls) = self.source.basic_blocks_and_local_decls_mut();
match candidate {
@@ -367,7 +374,8 @@ impl<'a, 'tcx> MutVisitor<'tcx> for Promoter<'a, 'tcx> {
pub fn promote_candidates<'a, 'tcx>(mir: &mut Mir<'tcx>,
tcx: TyCtxt<'a, 'tcx, 'tcx>,
mut temps: IndexVec<Local, TempState>,
- candidates: Vec<Candidate>) {
+ candidates: Vec<Candidate>,
+ def_id: DefId) {
// Visit candidates in reverse, in case they're nested.
debug!("promote_candidates({:?})", candidates);
@@ -412,7 +420,8 @@ pub fn promote_candidates<'a, 'tcx>(mir: &mut Mir<'tcx>,
tcx,
source: mir,
temps: &mut temps,
- keep_original: false
+ keep_original: false,
+ def_id
};
promoter.promote_candidate(candidate);
}
diff --git a/src/librustc_mir/transform/qualify_consts.rs b/src/librustc_mir/transform/qualify_consts.rs
index 9cbb891316d..c01ed4b1c59 100644
--- a/src/librustc_mir/transform/qualify_consts.rs
+++ b/src/librustc_mir/transform/qualify_consts.rs
@@ -922,7 +922,7 @@ impl<'a, 'tcx> Visitor<'tcx> for Checker<'a, 'tcx> {
match *place {
Place::Base(PlaceBase::Local(_)) => {}
Place::Base(PlaceBase::Static(ref global)) => {
- assert!(global.promoted.is_none(), {});
+ assert!(global.promoted.is_none());
if self.tcx
.get_attrs(global.def_id)
.iter()
@@ -1516,7 +1516,7 @@ impl MirPass for QualifyAndPromoteConstants {
};
// Do the actual promotion, now that we know what's viable.
- promote_consts::promote_candidates(mir, tcx, temps, candidates);
+ promote_consts::promote_candidates(mir, tcx, temps, candidates, def_id);
} else {
if !mir.control_flow_destroyed.is_empty() {
let mut locals = mir.vars_iter();