Skip to content

Commit

Permalink
Use fallback fluent bundle from inner emitter in SilentEmitter
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorn3 committed Feb 2, 2025
1 parent 628e4da commit 0bdab7e
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 28 deletions.
5 changes: 1 addition & 4 deletions compiler/rustc_errors/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -540,7 +540,6 @@ impl Emitter for HumanEmitter {
/// Fatal diagnostics are forwarded to `fatal_emitter` to avoid silent
/// failures of rustc, as witnessed e.g. in issue #89358.
pub struct SilentEmitter {
pub fallback_bundle: LazyFallbackBundle,
pub fatal_emitter: Box<dyn Emitter + DynSend>,
pub fatal_note: Option<String>,
pub emit_fatal_diagnostic: bool,
Expand All @@ -552,9 +551,7 @@ impl Translate for SilentEmitter {
}

fn fallback_fluent_bundle(&self) -> &FluentBundle {
// Ideally this field wouldn't be necessary and the fallback bundle in `fatal_dcx` would be
// used but the lock prevents this.
&self.fallback_bundle
self.fatal_emitter.fallback_fluent_bundle()
}
}

Expand Down
8 changes: 1 addition & 7 deletions compiler/rustc_errors/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -676,12 +676,7 @@ impl DiagCtxt {
Self { inner: Lock::new(DiagCtxtInner::new(emitter)) }
}

pub fn make_silent(
&self,
fallback_bundle: LazyFallbackBundle,
fatal_note: Option<String>,
emit_fatal_diagnostic: bool,
) {
pub fn make_silent(&self, fatal_note: Option<String>, emit_fatal_diagnostic: bool) {
// An empty type that implements `Emitter` to temporarily swap in place of the real one,
// which will be used in constructing its replacement.
struct FalseEmitter;
Expand Down Expand Up @@ -710,7 +705,6 @@ impl DiagCtxt {
let mut prev_emitter = Box::new(FalseEmitter) as Box<dyn Emitter + DynSend>;
std::mem::swap(&mut inner.emitter, &mut prev_emitter);
let new_emitter = Box::new(emitter::SilentEmitter {
fallback_bundle,
fatal_emitter: prev_emitter,
fatal_note,
emit_fatal_diagnostic,
Expand Down
7 changes: 2 additions & 5 deletions compiler/rustc_session/src/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,12 +277,9 @@ impl ParseSess {
) -> Self {
let fallback_bundle = fallback_fluent_bundle(locale_resources, false);
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
let fatal_emitter = Box::new(HumanEmitter::new(
stderr_destination(ColorConfig::Auto),
Lrc::clone(&fallback_bundle),
));
let fatal_emitter =
Box::new(HumanEmitter::new(stderr_destination(ColorConfig::Auto), fallback_bundle));
let dcx = DiagCtxt::new(Box::new(SilentEmitter {
fallback_bundle,
fatal_emitter,
fatal_note: Some(fatal_note),
emit_fatal_diagnostic,
Expand Down
14 changes: 2 additions & 12 deletions src/tools/rustfmt/src/parse/session.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,13 +114,12 @@ fn default_dcx(
false,
);
let emitter = Box::new(
HumanEmitter::new(stderr_destination(emit_color), fallback_bundle.clone())
HumanEmitter::new(stderr_destination(emit_color), fallback_bundle)
.sm(Some(source_map.clone())),
);

let emitter: Box<DynEmitter> = if !show_parse_errors {
Box::new(SilentEmitter {
fallback_bundle,
fatal_emitter: emitter,
fatal_note: None,
emit_fatal_diagnostic: false,
Expand Down Expand Up @@ -205,16 +204,7 @@ impl ParseSess {
}

pub(crate) fn set_silent_emitter(&mut self) {
// Ideally this invocation wouldn't be necessary and the fallback bundle in
// `self.parse_sess.dcx` could be used, but the lock in `DiagCtxt` prevents this.
// See `<rustc_errors::SilentEmitter as Translate>::fallback_fluent_bundle`.
let fallback_bundle = rustc_errors::fallback_fluent_bundle(
rustc_driver::DEFAULT_LOCALE_RESOURCES.to_vec(),
false,
);
self.raw_psess
.dcx()
.make_silent(fallback_bundle, None, false);
self.raw_psess.dcx().make_silent(None, false);
}

pub(crate) fn span_to_filename(&self, span: Span) -> FileName {
Expand Down

0 comments on commit 0bdab7e

Please sign in to comment.