Skip to content

Commit 29704a0

Browse files
authored
Rollup merge of rust-lang#72669 - petrochenkov:smclean, r=Mark-Simulacrum
rustc_session: Cleanup session creation Noticed while reviewing rust-lang#72618.
2 parents 621a19d + 5369f4a commit 29704a0

File tree

6 files changed

+35
-55
lines changed

6 files changed

+35
-55
lines changed

src/librustc_interface/interface.rs

+2-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use rustc_session::lint;
1818
use rustc_session::parse::{CrateConfig, ParseSess};
1919
use rustc_session::{DiagnosticOutput, Session};
2020
use rustc_span::edition;
21-
use rustc_span::source_map::{FileLoader, FileName, SourceMap};
21+
use rustc_span::source_map::{FileLoader, FileName};
2222
use std::path::PathBuf;
2323
use std::result;
2424
use std::sync::{Arc, Mutex};
@@ -31,7 +31,6 @@ pub type Result<T> = result::Result<T, ErrorReported>;
3131
pub struct Compiler {
3232
pub(crate) sess: Lrc<Session>,
3333
codegen_backend: Lrc<Box<dyn CodegenBackend>>,
34-
source_map: Lrc<SourceMap>,
3534
pub(crate) input: Input,
3635
pub(crate) input_path: Option<PathBuf>,
3736
pub(crate) output_dir: Option<PathBuf>,
@@ -49,9 +48,6 @@ impl Compiler {
4948
pub fn codegen_backend(&self) -> &Lrc<Box<dyn CodegenBackend>> {
5049
&self.codegen_backend
5150
}
52-
pub fn source_map(&self) -> &Lrc<SourceMap> {
53-
&self.source_map
54-
}
5551
pub fn input(&self) -> &Input {
5652
&self.input
5753
}
@@ -168,7 +164,7 @@ pub fn run_compiler_in_existing_thread_pool<R>(
168164
f: impl FnOnce(&Compiler) -> R,
169165
) -> R {
170166
let registry = &config.registry;
171-
let (sess, codegen_backend, source_map) = util::create_session(
167+
let (sess, codegen_backend) = util::create_session(
172168
config.opts,
173169
config.crate_cfg,
174170
config.diagnostic_output,
@@ -181,7 +177,6 @@ pub fn run_compiler_in_existing_thread_pool<R>(
181177
let compiler = Compiler {
182178
sess,
183179
codegen_backend,
184-
source_map,
185180
input: config.input,
186181
input_path: config.input_path,
187182
output_dir: config.output_dir,

src/librustc_interface/tests.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ use rustc_session::config::{build_configuration, build_session_options, to_crate
77
use rustc_session::config::{rustc_optgroups, ErrorOutputType, ExternLocation, Options, Passes};
88
use rustc_session::config::{CFGuard, ExternEntry, LinkerPluginLto, LtoCli, SwitchWithOptPath};
99
use rustc_session::config::{Externs, OutputType, OutputTypes, Sanitizer, SymbolManglingVersion};
10-
use rustc_session::getopts;
1110
use rustc_session::lint::Level;
1211
use rustc_session::search_paths::SearchPath;
1312
use rustc_session::utils::NativeLibKind;
14-
use rustc_session::{build_session, Session};
13+
use rustc_session::{build_session, getopts, DiagnosticOutput, Session};
1514
use rustc_span::edition::{Edition, DEFAULT_EDITION};
1615
use rustc_span::symbol::sym;
1716
use rustc_span::SourceFileHashAlgorithm;
@@ -32,7 +31,14 @@ fn build_session_options_and_crate_config(matches: getopts::Matches) -> (Options
3231
fn mk_session(matches: getopts::Matches) -> (Session, CfgSpecs) {
3332
let registry = registry::Registry::new(&[]);
3433
let (sessopts, cfg) = build_session_options_and_crate_config(matches);
35-
let sess = build_session(sessopts, None, registry);
34+
let sess = build_session(
35+
sessopts,
36+
None,
37+
registry,
38+
DiagnosticOutput::Default,
39+
Default::default(),
40+
None,
41+
);
3642
(sess, cfg)
3743
}
3844

src/librustc_interface/util.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use rustc_session::parse::CrateConfig;
2323
use rustc_session::CrateDisambiguator;
2424
use rustc_session::{early_error, filesearch, output, DiagnosticOutput, Session};
2525
use rustc_span::edition::Edition;
26-
use rustc_span::source_map::{FileLoader, SourceMap};
26+
use rustc_span::source_map::FileLoader;
2727
use rustc_span::symbol::{sym, Symbol};
2828
use smallvec::SmallVec;
2929
use std::env;
@@ -65,8 +65,8 @@ pub fn create_session(
6565
input_path: Option<PathBuf>,
6666
lint_caps: FxHashMap<lint::LintId, lint::Level>,
6767
descriptions: Registry,
68-
) -> (Lrc<Session>, Lrc<Box<dyn CodegenBackend>>, Lrc<SourceMap>) {
69-
let (mut sess, source_map) = session::build_session_with_source_map(
68+
) -> (Lrc<Session>, Lrc<Box<dyn CodegenBackend>>) {
69+
let mut sess = session::build_session(
7070
sopts,
7171
input_path,
7272
descriptions,
@@ -81,7 +81,7 @@ pub fn create_session(
8181
add_configuration(&mut cfg, &mut sess, &*codegen_backend);
8282
sess.parse_sess.config = cfg;
8383

84-
(Lrc::new(sess), Lrc::new(codegen_backend), source_map)
84+
(Lrc::new(sess), Lrc::new(codegen_backend))
8585
}
8686

8787
const STACK_SIZE: usize = 8 * 1024 * 1024;

src/librustc_session/parse.rs

+4
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,10 @@ impl ParseSess {
174174
&self.source_map
175175
}
176176

177+
pub fn clone_source_map(&self) -> Lrc<SourceMap> {
178+
self.source_map.clone()
179+
}
180+
177181
pub fn buffer_lint(
178182
&self,
179183
lint: &'static Lint,

src/librustc_session/session.rs

+15-40
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use rustc_errors::json::JsonEmitter;
2121
use rustc_errors::registry::Registry;
2222
use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticId, ErrorReported};
2323
use rustc_span::edition::Edition;
24-
use rustc_span::source_map::{self, FileLoader, MultiSpan, RealFileLoader, SourceMap, Span};
24+
use rustc_span::source_map::{FileLoader, MultiSpan, RealFileLoader, SourceMap, Span};
2525
use rustc_span::{SourceFileHashAlgorithm, Symbol};
2626
use rustc_target::asm::InlineAsmArch;
2727
use rustc_target::spec::{CodeModel, PanicStrategy, RelocModel, RelroLevel};
@@ -523,7 +523,7 @@ impl Session {
523523
}
524524

525525
#[inline]
526-
pub fn source_map(&self) -> &source_map::SourceMap {
526+
pub fn source_map(&self) -> &SourceMap {
527527
self.parse_sess.source_map()
528528
}
529529
pub fn verbose(&self) -> bool {
@@ -1026,26 +1026,10 @@ impl Session {
10261026
}
10271027
}
10281028

1029-
pub fn build_session(
1030-
sopts: config::Options,
1031-
local_crate_source_file: Option<PathBuf>,
1032-
registry: rustc_errors::registry::Registry,
1033-
) -> Session {
1034-
build_session_with_source_map(
1035-
sopts,
1036-
local_crate_source_file,
1037-
registry,
1038-
DiagnosticOutput::Default,
1039-
Default::default(),
1040-
None,
1041-
)
1042-
.0
1043-
}
1044-
10451029
fn default_emitter(
10461030
sopts: &config::Options,
10471031
registry: rustc_errors::registry::Registry,
1048-
source_map: &Lrc<source_map::SourceMap>,
1032+
source_map: Lrc<SourceMap>,
10491033
emitter_dest: Option<Box<dyn Write + Send>>,
10501034
) -> Box<dyn Emitter + sync::Send> {
10511035
let macro_backtrace = sopts.debugging_opts.macro_backtrace;
@@ -1054,25 +1038,22 @@ fn default_emitter(
10541038
let (short, color_config) = kind.unzip();
10551039

10561040
if let HumanReadableErrorType::AnnotateSnippet(_) = kind {
1057-
let emitter = AnnotateSnippetEmitterWriter::new(
1058-
Some(source_map.clone()),
1059-
short,
1060-
macro_backtrace,
1061-
);
1041+
let emitter =
1042+
AnnotateSnippetEmitterWriter::new(Some(source_map), short, macro_backtrace);
10621043
Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing))
10631044
} else {
10641045
let emitter = match dst {
10651046
None => EmitterWriter::stderr(
10661047
color_config,
1067-
Some(source_map.clone()),
1048+
Some(source_map),
10681049
short,
10691050
sopts.debugging_opts.teach,
10701051
sopts.debugging_opts.terminal_width,
10711052
macro_backtrace,
10721053
),
10731054
Some(dst) => EmitterWriter::new(
10741055
dst,
1075-
Some(source_map.clone()),
1056+
Some(source_map),
10761057
short,
10771058
false, // no teach messages when writing to a buffer
10781059
false, // no colors when writing to a buffer
@@ -1084,20 +1065,14 @@ fn default_emitter(
10841065
}
10851066
}
10861067
(config::ErrorOutputType::Json { pretty, json_rendered }, None) => Box::new(
1087-
JsonEmitter::stderr(
1088-
Some(registry),
1089-
source_map.clone(),
1090-
pretty,
1091-
json_rendered,
1092-
macro_backtrace,
1093-
)
1094-
.ui_testing(sopts.debugging_opts.ui_testing),
1068+
JsonEmitter::stderr(Some(registry), source_map, pretty, json_rendered, macro_backtrace)
1069+
.ui_testing(sopts.debugging_opts.ui_testing),
10951070
),
10961071
(config::ErrorOutputType::Json { pretty, json_rendered }, Some(dst)) => Box::new(
10971072
JsonEmitter::new(
10981073
dst,
10991074
Some(registry),
1100-
source_map.clone(),
1075+
source_map,
11011076
pretty,
11021077
json_rendered,
11031078
macro_backtrace,
@@ -1112,14 +1087,14 @@ pub enum DiagnosticOutput {
11121087
Raw(Box<dyn Write + Send>),
11131088
}
11141089

1115-
pub fn build_session_with_source_map(
1090+
pub fn build_session(
11161091
sopts: config::Options,
11171092
local_crate_source_file: Option<PathBuf>,
11181093
registry: rustc_errors::registry::Registry,
11191094
diagnostics_output: DiagnosticOutput,
11201095
driver_lint_caps: FxHashMap<lint::LintId, lint::Level>,
11211096
file_loader: Option<Box<dyn FileLoader + Send + Sync + 'static>>,
1122-
) -> (Session, Lrc<SourceMap>) {
1097+
) -> Session {
11231098
// FIXME: This is not general enough to make the warning lint completely override
11241099
// normal diagnostic warnings, since the warning lint can also be denied and changed
11251100
// later via the source code.
@@ -1157,7 +1132,7 @@ pub fn build_session_with_source_map(
11571132
sopts.file_path_mapping(),
11581133
hash_kind,
11591134
));
1160-
let emitter = default_emitter(&sopts, registry, &source_map, write_dest);
1135+
let emitter = default_emitter(&sopts, registry, source_map.clone(), write_dest);
11611136

11621137
let span_diagnostic = rustc_errors::Handler::with_emitter_and_flags(
11631138
emitter,
@@ -1185,7 +1160,7 @@ pub fn build_session_with_source_map(
11851160
None
11861161
};
11871162

1188-
let parse_sess = ParseSess::with_span_handler(span_diagnostic, source_map.clone());
1163+
let parse_sess = ParseSess::with_span_handler(span_diagnostic, source_map);
11891164
let sysroot = match &sopts.maybe_sysroot {
11901165
Some(sysroot) => sysroot.clone(),
11911166
None => filesearch::get_or_default_sysroot(),
@@ -1308,7 +1283,7 @@ pub fn build_session_with_source_map(
13081283

13091284
validate_commandline_args_with_session_available(&sess);
13101285

1311-
(sess, source_map)
1286+
sess
13121287
}
13131288

13141289
// If it is useful to have a Session available already for validating a

src/librustdoc/test.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ pub fn run(options: Options) -> Result<(), String> {
114114
options,
115115
false,
116116
opts,
117-
Some(compiler.source_map().clone()),
117+
Some(compiler.session().parse_sess.clone_source_map()),
118118
None,
119119
enable_per_target_ignores,
120120
);

0 commit comments

Comments
 (0)