Store backtrace for must_produce_diag
This commit is contained in:
parent
cdb775cab5
commit
73fc170544
1 changed files with 14 additions and 8 deletions
|
@ -442,8 +442,8 @@ struct DiagCtxtInner {
|
|||
emitter: Box<DynEmitter>,
|
||||
|
||||
/// Must we produce a diagnostic to justify the use of the expensive
|
||||
/// `trimmed_def_paths` function?
|
||||
must_produce_diag: bool,
|
||||
/// `trimmed_def_paths` function? Backtrace is the location of the call.
|
||||
must_produce_diag: Option<Backtrace>,
|
||||
|
||||
/// Has this diagnostic context printed any diagnostics? (I.e. has
|
||||
/// `self.emitter.emit_diagnostic()` been called?
|
||||
|
@ -572,10 +572,11 @@ impl Drop for DiagCtxtInner {
|
|||
}
|
||||
|
||||
if !self.has_printed && !self.suppressed_expected_diag && !std::thread::panicking() {
|
||||
if self.must_produce_diag {
|
||||
if let Some(backtrace) = &self.must_produce_diag {
|
||||
panic!(
|
||||
"must_produce_diag: trimmed_def_paths called but no diagnostics emitted; \
|
||||
use `DelayDm` for lints or `with_no_trimmed_paths` for debugging"
|
||||
"must_produce_diag: `trimmed_def_paths` called but no diagnostics emitted; \
|
||||
use `DelayDm` for lints or `with_no_trimmed_paths` for debugging. \
|
||||
called at: {backtrace}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -721,7 +722,7 @@ impl DiagCtxt {
|
|||
*delayed_bugs = Default::default();
|
||||
*deduplicated_err_count = 0;
|
||||
*deduplicated_warn_count = 0;
|
||||
*must_produce_diag = false;
|
||||
*must_produce_diag = None;
|
||||
*has_printed = false;
|
||||
*suppressed_expected_diag = false;
|
||||
*taught_diagnostics = Default::default();
|
||||
|
@ -1091,8 +1092,13 @@ impl DiagCtxt {
|
|||
|
||||
/// Used when trimmed_def_paths is called and we must produce a diagnostic
|
||||
/// to justify its cost.
|
||||
#[track_caller]
|
||||
pub fn set_must_produce_diag(&self) {
|
||||
self.inner.borrow_mut().must_produce_diag = true;
|
||||
assert!(
|
||||
self.inner.borrow().must_produce_diag.is_none(),
|
||||
"should only need to collect a backtrace once"
|
||||
);
|
||||
self.inner.borrow_mut().must_produce_diag = Some(Backtrace::capture());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1387,7 +1393,7 @@ impl DiagCtxtInner {
|
|||
deduplicated_err_count: 0,
|
||||
deduplicated_warn_count: 0,
|
||||
emitter,
|
||||
must_produce_diag: false,
|
||||
must_produce_diag: None,
|
||||
has_printed: false,
|
||||
suppressed_expected_diag: false,
|
||||
taught_diagnostics: Default::default(),
|
||||
|
|
Loading…
Add table
Reference in a new issue