Add -Zepoch
This commit is contained in:
parent
9af374abf9
commit
2cff123416
3 changed files with 50 additions and 3 deletions
|
|
@ -58,6 +58,7 @@
|
|||
#![feature(macro_vis_matcher)]
|
||||
#![feature(match_default_bindings)]
|
||||
#![feature(never_type)]
|
||||
#![feature(non_exhaustive)]
|
||||
#![feature(nonzero)]
|
||||
#![feature(quote)]
|
||||
#![feature(refcell_replace_swap)]
|
||||
|
|
|
|||
|
|
@ -112,6 +112,31 @@ pub enum OutputType {
|
|||
DepInfo,
|
||||
}
|
||||
|
||||
/// The epoch of the compiler (RFC 2052)
|
||||
#[derive(Clone, Copy, Hash, PartialOrd, Ord, Eq, PartialEq)]
|
||||
#[non_exhaustive]
|
||||
pub enum Epoch {
|
||||
// epochs must be kept in order, newest to oldest
|
||||
|
||||
/// The 2015 epoch
|
||||
Epoch2015,
|
||||
/// The 2018 epoch
|
||||
Epoch2018,
|
||||
|
||||
// when adding new epochs, be sure to update:
|
||||
//
|
||||
// - the list in the `parse_epoch` static
|
||||
// - the match in the `parse_epoch` function
|
||||
// - add a `rust_####()` function to the session
|
||||
// - update the enum in Cargo's sources as well
|
||||
//
|
||||
// When -Zepoch becomes --epoch, there will
|
||||
// also be a check for the epoch being nightly-only
|
||||
// somewhere. That will need to be updated
|
||||
// whenever we're stabilizing/introducing a new epoch
|
||||
// as well as changing the default Cargo template.
|
||||
}
|
||||
|
||||
impl_stable_hash_for!(enum self::OutputType {
|
||||
Bitcode,
|
||||
Assembly,
|
||||
|
|
@ -802,11 +827,13 @@ macro_rules! options {
|
|||
Some("`string` or `string=string`");
|
||||
pub const parse_lto: Option<&'static str> =
|
||||
Some("one of `thin`, `fat`, or omitted");
|
||||
pub const parse_epoch: Option<&'static str> =
|
||||
Some("one of: `2015`, `2018`");
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
mod $mod_set {
|
||||
use super::{$struct_name, Passes, SomePasses, AllPasses, Sanitizer, Lto};
|
||||
use super::{$struct_name, Passes, SomePasses, AllPasses, Sanitizer, Lto, Epoch};
|
||||
use rustc_back::{LinkerFlavor, PanicStrategy, RelroLevel};
|
||||
use std::path::PathBuf;
|
||||
|
||||
|
|
@ -1010,6 +1037,15 @@ macro_rules! options {
|
|||
};
|
||||
true
|
||||
}
|
||||
|
||||
fn parse_epoch(slot: &mut Epoch, v: Option<&str>) -> bool {
|
||||
match v {
|
||||
Some("2015") => *slot = Epoch::Epoch2015,
|
||||
Some("2018") => *slot = Epoch::Epoch2018,
|
||||
_ => return false,
|
||||
}
|
||||
true
|
||||
}
|
||||
}
|
||||
) }
|
||||
|
||||
|
|
@ -1297,6 +1333,10 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
|
|||
`everybody_loops` (all function bodies replaced with `loop {}`),
|
||||
`hir` (the HIR), `hir,identified`, or
|
||||
`hir,typed` (HIR with types for each node)."),
|
||||
epoch: Epoch = (Epoch::Epoch2015, parse_epoch, [TRACKED],
|
||||
"The epoch to build Rust with. Newer epochs may include features
|
||||
that require breaking changes. The default epoch is 2015 (the first
|
||||
epoch). Crates compiled with different epochs can be linked together."),
|
||||
}
|
||||
|
||||
pub fn default_lib_output() -> CrateType {
|
||||
|
|
@ -2088,7 +2128,7 @@ mod dep_tracking {
|
|||
use std::path::PathBuf;
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use super::{Passes, CrateType, OptLevel, DebugInfoLevel, Lto,
|
||||
OutputTypes, Externs, ErrorOutputType, Sanitizer};
|
||||
OutputTypes, Externs, ErrorOutputType, Sanitizer, Epoch};
|
||||
use syntax::feature_gate::UnstableFeatures;
|
||||
use rustc_back::{PanicStrategy, RelroLevel};
|
||||
|
||||
|
|
@ -2150,6 +2190,7 @@ mod dep_tracking {
|
|||
impl_dep_tracking_hash_via_hash!(cstore::NativeLibraryKind);
|
||||
impl_dep_tracking_hash_via_hash!(Sanitizer);
|
||||
impl_dep_tracking_hash_via_hash!(Option<Sanitizer>);
|
||||
impl_dep_tracking_hash_via_hash!(Epoch);
|
||||
|
||||
impl_dep_tracking_hash_for_sortable_vec_of!(String);
|
||||
impl_dep_tracking_hash_for_sortable_vec_of!(PathBuf);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ use lint;
|
|||
use middle::allocator::AllocatorKind;
|
||||
use middle::dependency_format;
|
||||
use session::search_paths::PathKind;
|
||||
use session::config::{BorrowckMode, DebugInfoLevel, OutputType};
|
||||
use session::config::{BorrowckMode, DebugInfoLevel, OutputType, Epoch};
|
||||
use ty::tls;
|
||||
use util::nodemap::{FxHashMap, FxHashSet};
|
||||
use util::common::{duration_to_secs_str, ErrorReported};
|
||||
|
|
@ -864,6 +864,11 @@ impl Session {
|
|||
pub fn teach(&self, code: &DiagnosticId) -> bool {
|
||||
self.opts.debugging_opts.teach && !self.parse_sess.span_diagnostic.code_emitted(code)
|
||||
}
|
||||
|
||||
/// Are we allowed to use features from the Rust 2018 epoch?
|
||||
pub fn rust_2018(&self) -> bool {
|
||||
self.opts.debugging_opts.epoch >= Epoch::Epoch2018
|
||||
}
|
||||
}
|
||||
|
||||
pub fn build_session(sopts: config::Options,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue