#![feature(optin_builtin_traits)]
#![feature(refcell_replace_swap)]
#![feature(rustc_diagnostic_macros)]
+#![feature(rustc_attrs)]
+#![cfg_attr(stage0, feature(attr_literals))]
#![feature(slice_patterns)]
#![feature(slice_sort_by_cached_key)]
#![feature(specialization)]
const SCOPE_DATA_CALLSITE: u32 = !1;
const SCOPE_DATA_ARGUMENTS: u32 = !2;
const SCOPE_DATA_DESTRUCTION: u32 = !3;
-const SCOPE_DATA_REMAINDER_MAX: u32 = !4;
+// be sure to add the MAX of FirstStatementIndex if you add more constants here
#[derive(Clone, PartialEq, PartialOrd, Eq, Ord, Hash, Debug, Copy, RustcEncodable, RustcDecodable)]
pub enum ScopeData {
}
newtype_index! {
- pub struct FirstStatementIndex {
- MAX = SCOPE_DATA_REMAINDER_MAX
- }
+ pub struct FirstStatementIndex;
}
impl_stable_hash_for!(struct ::middle::region::FirstStatementIndex { private });
newtype_index!(
// Leave out derives marker so we can use its absence to ensure it comes first
@type [$name]
- @max [::std::u32::MAX - 1]
+ @max [0xFFFF_FFFE]
@vis [$v]
@debug_format ["{}"]);
);
newtype_index!(
// Leave out derives marker so we can use its absence to ensure it comes first
@type [$name]
- @max [::std::u32::MAX - 1]
+ @max [0xFFFF_FFFE]
@vis [$v]
@debug_format ["{}"]
$($tokens)+);
@vis [$v:vis]
@debug_format [$debug_format:tt]) => (
#[derive(Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, $($derives),*)]
+ #[rustc_layout_scalar_range_end($max)]
$v struct $type {
private: u32
}
#![feature(exhaustive_patterns)]
#![feature(range_contains)]
#![feature(rustc_diagnostic_macros)]
+#![feature(rustc_attrs)]
+#![cfg_attr(stage0, feature(attr_literals))]
#![feature(never_type)]
#![feature(specialization)]
#![feature(try_trait)]
--- /dev/null
+#![feature(rustc_attrs, step_trait, rustc_private)]
+
+#[macro_use] extern crate rustc_data_structures;
+extern crate rustc_serialize;
+
+use rustc_data_structures::indexed_vec::Idx;
+
+newtype_index!(struct MyIdx { MAX = 0xFFFF_FFFA });
+
+use std::mem::size_of;
+
+fn main() {
+ assert_eq!(size_of::<MyIdx>(), 4);
+ assert_eq!(size_of::<Option<MyIdx>>(), 4);
+ assert_eq!(size_of::<Option<Option<MyIdx>>>(), 4);
+ assert_eq!(size_of::<Option<Option<Option<MyIdx>>>>(), 4);
+ assert_eq!(size_of::<Option<Option<Option<Option<MyIdx>>>>>(), 4);
+ assert_eq!(size_of::<Option<Option<Option<Option<Option<MyIdx>>>>>>(), 4);
+ assert_eq!(size_of::<Option<Option<Option<Option<Option<Option<MyIdx>>>>>>>(), 8);
+}
\ No newline at end of file