use rustc_ast::{self, ast, visit};
use rustc_codegen_ssa::back::link::emit_metadata;
use rustc_codegen_ssa::traits::CodegenBackend;
-use rustc_data_structures::sync::{par_iter, Lrc, Once, ParallelIterator, WorkerLocal};
+use rustc_data_structures::sync::{par_iter, Lrc, OnceCell, ParallelIterator, WorkerLocal};
use rustc_data_structures::{box_region_allow_access, declare_box_region_type, parallel};
use rustc_errors::{ErrorReported, PResult};
use rustc_expand::base::ExtCtxt;
use rustc_passes::{self, hir_stats, layout_test};
use rustc_plugin_impl as plugin;
use rustc_resolve::{Resolver, ResolverArenas};
-use rustc_session::config::{
- self, CrateType, Input, OutputFilenames, OutputType, PpMode, PpSourceMode,
-};
+use rustc_session::config::{CrateType, Input, OutputFilenames, OutputType, PpMode, PpSourceMode};
use rustc_session::lint;
use rustc_session::output::{filename_for_input, filename_for_metadata};
use rustc_session::search_paths::PathKind;
sess.init_features(features);
let crate_types = util::collect_crate_types(sess, &krate.attrs);
- sess.crate_types.set(crate_types);
+ sess.init_crate_types(crate_types);
let disambiguator = util::compute_crate_disambiguator(sess);
- sess.crate_disambiguator.set(disambiguator);
+ sess.crate_disambiguator.set(disambiguator).expect("not yet initialized");
rustc_incremental::prepare_session_directory(sess, &crate_name, disambiguator);
if sess.opts.incremental.is_some() {
alt_std_name,
);
if let Some(name) = name {
- sess.parse_sess.injected_crate_name.set(name);
+ sess.parse_sess.injected_crate_name.set(name).expect("not yet initialized");
}
krate
});
let features = sess.features_untracked();
let cfg = rustc_expand::expand::ExpansionConfig {
features: Some(&features),
- recursion_limit: *sess.recursion_limit.get(),
+ recursion_limit: sess.recursion_limit(),
trace_mac: sess.opts.debugging_opts.trace_macros,
should_test: sess.opts.test,
..rustc_expand::expand::ExpansionConfig::default(crate_name.to_string())
rustc_ast_passes::ast_validation::check_crate(sess, &krate, &mut resolver.lint_buffer())
});
- let crate_types = sess.crate_types.borrow();
- let is_proc_macro_crate = crate_types.contains(&config::CrateType::ProcMacro);
+ let crate_types = sess.crate_types();
+ let is_proc_macro_crate = crate_types.contains(&CrateType::ProcMacro);
// For backwards compatibility, we don't try to run proc macro injection
// if rustdoc is run on a proc macro crate without '--crate-type proc-macro' being
// If the filename has been overridden using `-o`, it will not be modified
// by appending `.rlib`, `.exe`, etc., so we can skip this transformation.
OutputType::Exe if !exact_name => {
- for crate_type in sess.crate_types.borrow().iter() {
+ for crate_type in sess.crate_types().iter() {
let p = filename_for_input(sess, *crate_type, crate_name, outputs);
out_filenames.push(p);
}
mut resolver_outputs: ResolverOutputs,
outputs: OutputFilenames,
crate_name: &str,
- global_ctxt: &'tcx Once<GlobalCtxt<'tcx>>,
+ global_ctxt: &'tcx OnceCell<GlobalCtxt<'tcx>>,
arena: &'tcx WorkerLocal<Arena<'tcx>>,
) -> QueryContext<'tcx> {
let sess = &compiler.session();
}
let gcx = sess.time("setup_global_ctxt", || {
- global_ctxt.init_locking(|| {
+ global_ctxt.get_or_init(|| {
TyCtxt::create_global_ctxt(
sess,
lint_store,
tcx.par_body_owners(|def_id| tcx.ensure().mir_borrowck(def_id));
});
- sess.time("dumping_chalk_like_clauses", || {
- rustc_traits::lowering::dump_program_clauses(tcx);
- });
-
sess.time("MIR_effect_checking", || {
for def_id in tcx.body_owners() {
mir::transform::check_unsafety::check_unsafety(tcx, def_id.to_def_id())
let metadata_kind = tcx
.sess
- .crate_types
- .borrow()
+ .crate_types()
.iter()
.map(|ty| match *ty {
CrateType::Executable | CrateType::Staticlib | CrateType::Cdylib => MetadataKind::None,