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;
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 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 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,
let metadata_kind = tcx
.sess
- .crate_types
- .borrow()
+ .crate_types()
.iter()
.map(|ty| match *ty {
CrateType::Executable | CrateType::Staticlib | CrateType::Cdylib => MetadataKind::None,