Skip to content

Commit 3e2090c

Browse files
committed
Check Session reference count
1 parent 0a36b4d commit 3e2090c

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/librustc_interface/interface.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use rustc_lint::LintStore;
1616
use rustc_parse::new_parser_from_source_str;
1717
use rustc_span::edition;
1818
use rustc_span::source_map::{FileLoader, FileName, SourceMap};
19+
use std::mem;
1920
use std::path::PathBuf;
2021
use std::result;
2122
use std::sync::{Arc, Mutex};
@@ -165,7 +166,7 @@ pub fn run_compiler_in_existing_thread_pool<R>(
165166
registry.clone(),
166167
);
167168

168-
let compiler = Compiler {
169+
let mut compiler = Compiler {
169170
sess,
170171
codegen_backend,
171172
source_map,
@@ -179,11 +180,20 @@ pub fn run_compiler_in_existing_thread_pool<R>(
179180
};
180181

181182
let r = {
182-
let _sess_abort_error = OnDrop(|| {
183+
let sess_abort_error = OnDrop(|| {
183184
compiler.sess.diagnostic().print_error_count(registry);
184185
});
185186

186-
f(&compiler)
187+
let r = f(&compiler);
188+
189+
mem::forget(sess_abort_error);
190+
191+
// Ensure there are no more references to Session so no more errors can be generated.
192+
Lrc::get_mut(&mut compiler.sess).expect("no references to Session");
193+
194+
compiler.sess.diagnostic().print_error_count(registry);
195+
196+
r
187197
};
188198

189199
let prof = compiler.sess.prof.clone();

0 commit comments

Comments
 (0)