1 #![feature(rustc_private)] 2 #![feature(map_first_last)] 3 #![feature(map_try_insert)] 4 #![feature(never_type)] 5 #![feature(try_blocks)] 6 #![feature(bool_to_option)] 7 #![warn(rust_2018_idioms)] 8 #![allow(clippy::cast_lossless)] 9 10 extern crate rustc_apfloat; 11 extern crate rustc_ast; 12 #[macro_use] 13 extern crate rustc_middle; 14 extern crate rustc_const_eval; 15 extern crate rustc_data_structures; 16 extern crate rustc_hir; 17 extern crate rustc_index; 18 extern crate rustc_session; 19 extern crate rustc_span; 20 extern crate rustc_target; 21 22 mod data_race; 23 mod diagnostics; 24 mod eval; 25 mod helpers; 26 mod intptrcast; 27 mod machine; 28 mod mono_hash_map; 29 mod operator; 30 mod range_map; 31 mod shims; 32 mod stacked_borrows; 33 mod sync; 34 mod thread; 35 mod vector_clock; 36 37 // Establish a "crate-wide prelude": we often import `crate::*`. 38 39 // Make all those symbols available in the same place as our own. 40 pub use rustc_const_eval::interpret::*; 41 // Resolve ambiguity. 42 pub use rustc_const_eval::interpret::{self, AllocMap, PlaceTy}; 43 44 pub use crate::shims::dlsym::{Dlsym, EvalContextExt as _}; 45 pub use crate::shims::env::{EnvVars, EvalContextExt as _}; 46 pub use crate::shims::foreign_items::EvalContextExt as _; 47 pub use crate::shims::intrinsics::EvalContextExt as _; 48 pub use crate::shims::os_str::EvalContextExt as _; 49 pub use crate::shims::panic::{CatchUnwindData, EvalContextExt as _}; 50 pub use crate::shims::time::EvalContextExt as _; 51 pub use crate::shims::tls::{EvalContextExt as _, TlsData}; 52 pub use crate::shims::EvalContextExt as _; 53 54 pub use crate::data_race::{ 55 AtomicFenceOp, AtomicReadOp, AtomicRwOp, AtomicWriteOp, 56 EvalContextExt as DataRaceEvalContextExt, 57 }; 58 pub use crate::diagnostics::{ 59 register_diagnostic, report_error, EvalContextExt as DiagnosticsEvalContextExt, 60 NonHaltingDiagnostic, TerminationInfo, 61 }; 62 pub use crate::eval::{ 63 create_ecx, eval_entry, AlignmentCheck, IsolatedOp, MiriConfig, RejectOpWith, 64 }; 65 pub use crate::helpers::EvalContextExt as HelpersEvalContextExt; 66 pub use crate::machine::{ 67 AllocExtra, Evaluator, FrameData, MemoryExtra, MiriEvalContext, MiriEvalContextExt, 68 MiriMemoryKind, Tag, NUM_CPUS, PAGE_SIZE, STACK_ADDR, STACK_SIZE, 69 }; 70 pub use crate::mono_hash_map::MonoHashMap; 71 pub use crate::operator::EvalContextExt as OperatorEvalContextExt; 72 pub use crate::range_map::RangeMap; 73 pub use crate::stacked_borrows::{ 74 CallId, EvalContextExt as StackedBorEvalContextExt, Item, Permission, PtrId, SbTag, Stack, 75 Stacks, 76 }; 77 pub use crate::sync::{CondvarId, EvalContextExt as SyncEvalContextExt, MutexId, RwLockId}; 78 pub use crate::thread::{ 79 EvalContextExt as ThreadsEvalContextExt, SchedulingAction, ThreadId, ThreadManager, ThreadState, 80 }; 81 pub use crate::vector_clock::{VClock, VTimestamp, VectorIdx}; 82 83 /// Insert rustc arguments at the beginning of the argument list that Miri wants to be 84 /// set per default, for maximal validation power. 85 pub const MIRI_DEFAULT_ARGS: &[&str] = &[ 86 "-Zalways-encode-mir", 87 "-Zmir-emit-retag", 88 "-Zmir-opt-level=0", 89 "--cfg=miri", 90 "-Cdebug-assertions=on", 91 ]; 92