Make newtype_index
safe
This commit is contained in:
parent
02b22323f1
commit
ec6573f33b
14 changed files with 33 additions and 7 deletions
|
@ -18,6 +18,7 @@ use std::env;
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
use ty::{self, TyCtxt};
|
use ty::{self, TyCtxt};
|
||||||
use util::common::{ProfileQueriesMsg, profq_msg};
|
use util::common::{ProfileQueriesMsg, profq_msg};
|
||||||
|
use serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
use ich::{StableHashingContext, StableHashingContextProvider, Fingerprint};
|
use ich::{StableHashingContext, StableHashingContextProvider, Fingerprint};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
use dep_graph::DepNode;
|
use dep_graph::DepNode;
|
||||||
use ich::Fingerprint;
|
use ich::Fingerprint;
|
||||||
use rustc_data_structures::indexed_vec::{IndexVec, Idx};
|
use rustc_data_structures::indexed_vec::{IndexVec, Idx};
|
||||||
|
use serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
newtype_index! {
|
newtype_index! {
|
||||||
pub struct SerializedDepNodeIndex { .. }
|
pub struct SerializedDepNodeIndex { .. }
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
#![feature(in_band_lifetimes)]
|
#![feature(in_band_lifetimes)]
|
||||||
#![feature(crate_visibility_modifier)]
|
#![feature(crate_visibility_modifier)]
|
||||||
#![feature(transpose_result)]
|
#![feature(transpose_result)]
|
||||||
|
#![cfg_attr(not(stage0), feature(min_const_unsafe_fn))]
|
||||||
|
|
||||||
#![recursion_limit="512"]
|
#![recursion_limit="512"]
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ use syntax::ast;
|
||||||
use syntax_pos::{Span, DUMMY_SP};
|
use syntax_pos::{Span, DUMMY_SP};
|
||||||
use ty::TyCtxt;
|
use ty::TyCtxt;
|
||||||
use ty::query::Providers;
|
use ty::query::Providers;
|
||||||
|
use serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
use hir;
|
use hir;
|
||||||
use hir::Node;
|
use hir::Node;
|
||||||
|
|
|
@ -25,7 +25,7 @@ use rustc_data_structures::graph::{self, GraphPredecessors, GraphSuccessors};
|
||||||
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_data_structures::sync::MappedReadGuard;
|
use rustc_data_structures::sync::MappedReadGuard;
|
||||||
use rustc_serialize as serialize;
|
use rustc_serialize::{self as serialize, Decodable, Decoder};
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::fmt::{self, Debug, Formatter, Write};
|
use std::fmt::{self, Debug, Formatter, Write};
|
||||||
|
|
|
@ -41,7 +41,7 @@ use util::nodemap::{NodeSet, DefIdMap, FxHashMap};
|
||||||
use arena::SyncDroplessArena;
|
use arena::SyncDroplessArena;
|
||||||
use session::DataTypeKind;
|
use session::DataTypeKind;
|
||||||
|
|
||||||
use serialize::{self, Encodable, Encoder};
|
use serialize::{self, Encodable, Encoder, Decodable, Decoder};
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::cmp::{self, Ordering};
|
use std::cmp::{self, Ordering};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
|
@ -29,7 +29,7 @@ use rustc_target::spec::abi;
|
||||||
use syntax::ast::{self, Ident};
|
use syntax::ast::{self, Ident};
|
||||||
use syntax::symbol::{keywords, InternedString};
|
use syntax::symbol::{keywords, InternedString};
|
||||||
|
|
||||||
use serialize;
|
use serialize::{self, Decodable, Decoder};
|
||||||
|
|
||||||
use hir;
|
use hir;
|
||||||
|
|
||||||
|
|
|
@ -98,12 +98,18 @@ macro_rules! newtype_index {
|
||||||
@max [$max:expr]
|
@max [$max:expr]
|
||||||
@vis [$v:vis]
|
@vis [$v:vis]
|
||||||
@debug_format [$debug_format:tt]) => (
|
@debug_format [$debug_format:tt]) => (
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, $($derives),*)]
|
#[derive(Copy, PartialEq, Eq, Hash, PartialOrd, Ord, $($derives),*)]
|
||||||
#[rustc_layout_scalar_valid_range_end($max)]
|
#[rustc_layout_scalar_valid_range_end($max)]
|
||||||
$v struct $type {
|
$v struct $type {
|
||||||
private: u32
|
private: u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Clone for $type {
|
||||||
|
fn clone(&self) -> Self {
|
||||||
|
*self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl $type {
|
impl $type {
|
||||||
$v const MAX_AS_U32: u32 = $max;
|
$v const MAX_AS_U32: u32 = $max;
|
||||||
|
|
||||||
|
@ -145,7 +151,7 @@ macro_rules! newtype_index {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
$v const unsafe fn from_u32_unchecked(value: u32) -> Self {
|
$v const unsafe fn from_u32_unchecked(value: u32) -> Self {
|
||||||
$type { private: value }
|
unsafe { $type { private: value } }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extract value of this index as an integer.
|
/// Extract value of this index as an integer.
|
||||||
|
@ -328,12 +334,17 @@ macro_rules! newtype_index {
|
||||||
derive [$($derives:ident,)+]
|
derive [$($derives:ident,)+]
|
||||||
$($tokens:tt)*) => (
|
$($tokens:tt)*) => (
|
||||||
newtype_index!(
|
newtype_index!(
|
||||||
@derives [$($derives,)+ RustcDecodable, RustcEncodable,]
|
@derives [$($derives,)+ RustcEncodable,]
|
||||||
@type [$type]
|
@type [$type]
|
||||||
@max [$max]
|
@max [$max]
|
||||||
@vis [$v]
|
@vis [$v]
|
||||||
@debug_format [$debug_format]
|
@debug_format [$debug_format]
|
||||||
$($tokens)*);
|
$($tokens)*);
|
||||||
|
impl Decodable for $type {
|
||||||
|
fn decode<D: Decoder>(d: &mut D) -> Result<Self, D::Error> {
|
||||||
|
d.read_u32().into()
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// The case where no derives are added, but encodable is overridden. Don't
|
// The case where no derives are added, but encodable is overridden. Don't
|
||||||
|
@ -360,12 +371,17 @@ macro_rules! newtype_index {
|
||||||
@debug_format [$debug_format:tt]
|
@debug_format [$debug_format:tt]
|
||||||
$($tokens:tt)*) => (
|
$($tokens:tt)*) => (
|
||||||
newtype_index!(
|
newtype_index!(
|
||||||
@derives [RustcDecodable, RustcEncodable,]
|
@derives [RustcEncodable,]
|
||||||
@type [$type]
|
@type [$type]
|
||||||
@max [$max]
|
@max [$max]
|
||||||
@vis [$v]
|
@vis [$v]
|
||||||
@debug_format [$debug_format]
|
@debug_format [$debug_format]
|
||||||
$($tokens)*);
|
$($tokens)*);
|
||||||
|
impl Decodable for $type {
|
||||||
|
fn decode<D: Decoder>(d: &mut D) -> Result<Self, D::Error> {
|
||||||
|
d.read_u32().map(Self::from)
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// Rewrite final without comma to one that includes comma
|
// Rewrite final without comma to one that includes comma
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
use rustc::mir::{BasicBlock, Location, Mir};
|
use rustc::mir::{BasicBlock, Location, Mir};
|
||||||
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
||||||
|
use rustc_serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
/// Maps between a MIR Location, which identifies a particular
|
/// Maps between a MIR Location, which identifies a particular
|
||||||
/// statement within a basic block, to a "rich location", which
|
/// statement within a basic block, to a "rich location", which
|
||||||
|
|
|
@ -13,6 +13,7 @@ use rustc::ty::RegionVid;
|
||||||
use rustc_data_structures::graph::scc::Sccs;
|
use rustc_data_structures::graph::scc::Sccs;
|
||||||
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
||||||
use borrow_check::nll::type_check::Locations;
|
use borrow_check::nll::type_check::Locations;
|
||||||
|
use rustc_serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
|
@ -16,6 +16,7 @@ use rustc_data_structures::indexed_vec::Idx;
|
||||||
use rustc_data_structures::indexed_vec::IndexVec;
|
use rustc_data_structures::indexed_vec::IndexVec;
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
use rustc_serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
/// Maps between a `Location` and a `PointIndex` (and vice versa).
|
/// Maps between a `Location` and a `PointIndex` (and vice versa).
|
||||||
crate struct RegionValueElements {
|
crate struct RegionValueElements {
|
||||||
|
|
|
@ -23,6 +23,7 @@ use rustc::ty::{RegionVid, TyCtxt};
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
||||||
use util::liveness::LiveVariableMap;
|
use util::liveness::LiveVariableMap;
|
||||||
|
use rustc_serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
/// Map between Local and LiveVar indices: the purpose of this
|
/// Map between Local and LiveVar indices: the purpose of this
|
||||||
/// map is to define the subset of local variables for which we need
|
/// map is to define the subset of local variables for which we need
|
||||||
|
|
|
@ -15,6 +15,7 @@ use rustc::mir::{Local, Location, Mir};
|
||||||
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
use rustc_data_structures::indexed_vec::{Idx, IndexVec};
|
||||||
use rustc_data_structures::vec_linked_list as vll;
|
use rustc_data_structures::vec_linked_list as vll;
|
||||||
use util::liveness::{categorize, DefUse, LiveVariableMap};
|
use util::liveness::{categorize, DefUse, LiveVariableMap};
|
||||||
|
use rustc_serialize::{Decodable, Decoder};
|
||||||
|
|
||||||
/// A map that cross references each local with the locations where it
|
/// A map that cross references each local with the locations where it
|
||||||
/// is defined (assigned), used, or dropped. Used during liveness
|
/// is defined (assigned), used, or dropped. Used during liveness
|
||||||
|
|
|
@ -32,6 +32,7 @@ use syntax::ast;
|
||||||
use syntax::attr::{self, UnwindAttr};
|
use syntax::attr::{self, UnwindAttr};
|
||||||
use syntax::symbol::keywords;
|
use syntax::symbol::keywords;
|
||||||
use syntax_pos::Span;
|
use syntax_pos::Span;
|
||||||
|
use rustc_serialize::{Decodable, Decoder};
|
||||||
use transform::MirSource;
|
use transform::MirSource;
|
||||||
use util as mir_util;
|
use util as mir_util;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue