use rustc_data_structures::fingerprint::Fingerprint;
use crate::lint;
-use crate::lint::builtin::BuiltinLintDiagnostics;
use crate::session::config::{OutputType, PrintRequest, Sanitizer, SwitchWithOptPath};
use crate::session::search_paths::{PathKind, SearchPath};
use crate::util::nodemap::{FxHashMap, FxHashSet};
use syntax::feature_gate::{self, AttributeType};
use syntax::json::JsonEmitter;
use syntax::source_map;
-use syntax::sess::ParseSess;
+use syntax::sess::{ParseSess, ProcessCfgMod};
use syntax::symbol::Symbol;
use syntax_pos::{MultiSpan, Span};
use crate::util::profiling::{SelfProfiler, SelfProfilerRef};
/// if the value stored here has been affected by path remapping.
pub working_dir: (PathBuf, bool),
- /// This is intended to be used from a single thread.
- ///
- /// FIXME: there was a previous comment about this not being thread safe,
- /// but it's not clear how or why that's the case. The LintBuffer itself is certainly thread
- /// safe at least from a "Rust safety" standpoint.
- pub buffered_lints: Lock<Option<lint::LintBuffer>>,
-
/// Set of `(DiagnosticId, Option<Span>, message)` tuples tracking
/// (sub)diagnostics that have been set once, but should not be set again,
/// in order to avoid redundantly verbose output (Issue #24690, #44953).
/// Metadata about the allocators for the current crate being compiled.
pub has_global_allocator: Once<bool>,
- /// Metadata about the panic handlers for the current crate being compiled.
- pub has_panic_handler: Once<bool>,
-
/// Cap lint level specified by a driver specifically.
pub driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
self.diagnostic().span_note_without_error(sp, msg)
}
- pub fn buffer_lint<S: Into<MultiSpan>>(
- &self,
- lint: &'static lint::Lint,
- id: ast::NodeId,
- sp: S,
- msg: &str,
- ) {
- match *self.buffered_lints.borrow_mut() {
- Some(ref mut buffer) => {
- buffer.add_lint(lint, id, sp.into(), msg, BuiltinLintDiagnostics::Normal)
- }
- None => bug!("can't buffer lints after HIR lowering"),
- }
- }
-
- pub fn buffer_lint_with_diagnostic<S: Into<MultiSpan>>(
- &self,
- lint: &'static lint::Lint,
- id: ast::NodeId,
- sp: S,
- msg: &str,
- diagnostic: BuiltinLintDiagnostics,
- ) {
- match *self.buffered_lints.borrow_mut() {
- Some(ref mut buffer) => buffer.add_lint(lint, id, sp.into(), msg, diagnostic),
- None => bug!("can't buffer lints after HIR lowering"),
- }
- }
-
pub fn reserve_node_ids(&self, count: usize) -> ast::NodeId {
let id = self.next_node_id.get();
sopts: config::Options,
local_crate_source_file: Option<PathBuf>,
registry: errors::registry::Registry,
+ process_cfg_mod: ProcessCfgMod,
) -> Session {
let file_path_mapping = sopts.file_path_mapping();
Lrc::new(source_map::SourceMap::new(file_path_mapping)),
DiagnosticOutput::Default,
Default::default(),
+ process_cfg_mod,
)
}
source_map: Lrc<source_map::SourceMap>,
diagnostics_output: DiagnosticOutput,
lint_caps: FxHashMap<lint::LintId, lint::Level>,
+ process_cfg_mod: ProcessCfgMod,
) -> Session {
// FIXME: This is not general enough to make the warning lint completely override
// normal diagnostic warnings, since the warning lint can also be denied and changed
},
);
- build_session_(sopts, local_crate_source_file, diagnostic_handler, source_map, lint_caps)
+ build_session_(
+ sopts,
+ local_crate_source_file,
+ diagnostic_handler,
+ source_map,
+ lint_caps,
+ process_cfg_mod,
+ )
}
fn build_session_(
span_diagnostic: errors::Handler,
source_map: Lrc<source_map::SourceMap>,
driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
+ process_cfg_mod: ProcessCfgMod,
) -> Session {
let self_profiler =
if let SwitchWithOptPath::Enabled(ref d) = sopts.debugging_opts.self_profile {
let parse_sess = ParseSess::with_span_handler(
span_diagnostic,
source_map,
+ process_cfg_mod,
);
let sysroot = match &sopts.maybe_sysroot {
Some(sysroot) => sysroot.clone(),
sysroot,
local_crate_source_file,
working_dir,
- buffered_lints: Lock::new(Some(Default::default())),
one_time_diagnostics: Default::default(),
plugin_llvm_passes: OneThread::new(RefCell::new(Vec::new())),
plugin_attributes: Lock::new(Vec::new()),
print_fuel,
jobserver: jobserver::client(),
has_global_allocator: Once::new(),
- has_panic_handler: Once::new(),
driver_lint_caps,
trait_methods_not_found: Lock::new(Default::default()),
confused_type_with_std_module: Lock::new(Default::default()),