mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-23 21:23:20 +00:00
borrowck/errors: fix i18n error in delayed bug
During borrowck, the `MultiSpan` from a buffered diagnostic is cloned and used to emit a delayed bug indicating a diagnostic was buffered - when the buffered diagnostic is translated, then the cloned `MultiSpan` may contain labels which can only render with the diagnostic's arguments, but the delayed bug being emitted won't have those arguments. Adds a function which clones `MultiSpan` without also cloning the contained labels, and use this function when creating the buffered diagnostic delayed bug. Signed-off-by: David Wood <david@davidtw.co>
This commit is contained in:
parent
ced592a99b
commit
3857d9c2da
@ -2306,11 +2306,10 @@ mod error {
|
||||
|
||||
pub fn buffer_error(&mut self, t: DiagnosticBuilder<'_, ErrorGuaranteed>) {
|
||||
if let None = self.tainted_by_errors {
|
||||
self.tainted_by_errors = Some(
|
||||
self.tcx
|
||||
.sess
|
||||
.delay_span_bug(t.span.clone(), "diagnostic buffered but not emitted"),
|
||||
)
|
||||
self.tainted_by_errors = Some(self.tcx.sess.delay_span_bug(
|
||||
t.span.clone_ignoring_labels(),
|
||||
"diagnostic buffered but not emitted",
|
||||
))
|
||||
}
|
||||
t.buffer(&mut self.buffered);
|
||||
}
|
||||
|
@ -533,6 +533,14 @@ impl MultiSpan {
|
||||
pub fn has_span_labels(&self) -> bool {
|
||||
self.span_labels.iter().any(|(sp, _)| !sp.is_dummy())
|
||||
}
|
||||
|
||||
/// Clone this `MultiSpan` without keeping any of the span labels - sometimes a `MultiSpan` is
|
||||
/// to be re-used in another diagnostic, but includes `span_labels` which have translated
|
||||
/// messages. These translated messages would fail to translate without their diagnostic
|
||||
/// arguments which are unlikely to be cloned alongside the `Span`.
|
||||
pub fn clone_ignoring_labels(&self) -> Self {
|
||||
Self { primary_spans: self.primary_spans.clone(), ..MultiSpan::new() }
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Span> for MultiSpan {
|
||||
|
Loading…
Reference in New Issue
Block a user