Skip to content

Commit db09eb2

Browse files
committed
Remove {DiagCtxt,DiagCtxtInner}::emit_diagnostic_without_consuming.
They are no longer used, because `{DiagCtxt,DiagCtxtInner}::emit_diagnostic` are used everywhere instead. This also means `track_diagnostic` can become consuming.
1 parent 2d91c6d commit db09eb2

File tree

2 files changed

+8
-24
lines changed

2 files changed

+8
-24
lines changed

compiler/rustc_errors/src/lib.rs

+7-23
Original file line numberDiff line numberDiff line change
@@ -509,11 +509,11 @@ pub enum StashKey {
509509
Cycle,
510510
}
511511

512-
fn default_track_diagnostic(d: &mut Diagnostic, f: &mut dyn FnMut(&mut Diagnostic)) {
513-
(*f)(d)
512+
fn default_track_diagnostic(diag: Diagnostic, f: &mut dyn FnMut(Diagnostic)) {
513+
(*f)(diag)
514514
}
515515

516-
pub static TRACK_DIAGNOSTICS: AtomicRef<fn(&mut Diagnostic, &mut dyn FnMut(&mut Diagnostic))> =
516+
pub static TRACK_DIAGNOSTICS: AtomicRef<fn(Diagnostic, &mut dyn FnMut(Diagnostic))> =
517517
AtomicRef::new(&(default_track_diagnostic as _));
518518

519519
#[derive(Copy, Clone, Default)]
@@ -1074,17 +1074,8 @@ impl DiagCtxt {
10741074
self.inner.borrow_mut().emitter.emit_diagnostic(&db);
10751075
}
10761076

1077-
pub fn emit_diagnostic(&self, mut diagnostic: Diagnostic) -> Option<ErrorGuaranteed> {
1078-
self.emit_diagnostic_without_consuming(&mut diagnostic)
1079-
}
1080-
1081-
// It's unfortunate this exists. `emit_diagnostic` is preferred, because it
1082-
// consumes the diagnostic, thus ensuring it is emitted just once.
1083-
pub(crate) fn emit_diagnostic_without_consuming(
1084-
&self,
1085-
diagnostic: &mut Diagnostic,
1086-
) -> Option<ErrorGuaranteed> {
1087-
self.inner.borrow_mut().emit_diagnostic_without_consuming(diagnostic)
1077+
pub fn emit_diagnostic(&self, diagnostic: Diagnostic) -> Option<ErrorGuaranteed> {
1078+
self.inner.borrow_mut().emit_diagnostic(diagnostic)
10881079
}
10891080

10901081
#[track_caller]
@@ -1273,13 +1264,6 @@ impl DiagCtxtInner {
12731264
}
12741265

12751266
fn emit_diagnostic(&mut self, mut diagnostic: Diagnostic) -> Option<ErrorGuaranteed> {
1276-
self.emit_diagnostic_without_consuming(&mut diagnostic)
1277-
}
1278-
1279-
fn emit_diagnostic_without_consuming(
1280-
&mut self,
1281-
diagnostic: &mut Diagnostic,
1282-
) -> Option<ErrorGuaranteed> {
12831267
if matches!(diagnostic.level, Error | Fatal) && self.treat_err_as_bug() {
12841268
diagnostic.level = Bug;
12851269
}
@@ -1335,7 +1319,7 @@ impl DiagCtxtInner {
13351319
}
13361320

13371321
let mut guaranteed = None;
1338-
(*TRACK_DIAGNOSTICS)(diagnostic, &mut |diagnostic| {
1322+
(*TRACK_DIAGNOSTICS)(diagnostic, &mut |mut diagnostic| {
13391323
if let Some(ref code) = diagnostic.code {
13401324
self.emitted_diagnostic_codes.insert(code.clone());
13411325
}
@@ -1371,7 +1355,7 @@ impl DiagCtxtInner {
13711355
);
13721356
}
13731357

1374-
self.emitter.emit_diagnostic(diagnostic);
1358+
self.emitter.emit_diagnostic(&diagnostic);
13751359
if diagnostic.is_error() {
13761360
self.deduplicated_err_count += 1;
13771361
} else if let Warning(_) = diagnostic.level {

compiler/rustc_interface/src/callbacks.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ fn track_span_parent(def_id: rustc_span::def_id::LocalDefId) {
2929
/// This is a callback from `rustc_errors` as it cannot access the implicit state
3030
/// in `rustc_middle` otherwise. It is used when diagnostic messages are
3131
/// emitted and stores them in the current query, if there is one.
32-
fn track_diagnostic(diagnostic: &mut Diagnostic, f: &mut dyn FnMut(&mut Diagnostic)) {
32+
fn track_diagnostic(diagnostic: Diagnostic, f: &mut dyn FnMut(Diagnostic)) {
3333
tls::with_context_opt(|icx| {
3434
if let Some(icx) = icx {
3535
if let Some(diagnostics) = icx.diagnostics {

0 commit comments

Comments
 (0)