Fix panic when compiling Rocket
.
`Rustc::emit_diagnostic` reconstructs a diagnostic passed in from the macro machinery. Currently it uses the type `DiagnosticBuilder<'_, ErrorGuaranteed>`, which is incorrect, because the diagnostic might be a warning. And if it is a warning, because of the `ErrorGuaranteed` we end up calling into `emit_producing_error_guaranteed` and the assertion within that function (correctly) fails because the level is not an error level. The fix is simple: change the type to `DiagnosticBuilder<'_, ()>`. Using `()` works no matter what the diagnostic level is, and we don't need an `ErrorGuaranteed` here. The panic was reported in #120576.
This commit is contained in:
parent
f8131a48a4
commit
326b44e4d3
@ -510,7 +510,7 @@ fn literal_from_str(&mut self, s: &str) -> Result<Literal<Self::Span, Self::Symb
|
|||||||
|
|
||||||
fn emit_diagnostic(&mut self, diagnostic: Diagnostic<Self::Span>) {
|
fn emit_diagnostic(&mut self, diagnostic: Diagnostic<Self::Span>) {
|
||||||
let message = rustc_errors::DiagnosticMessage::from(diagnostic.message);
|
let message = rustc_errors::DiagnosticMessage::from(diagnostic.message);
|
||||||
let mut diag: DiagnosticBuilder<'_, rustc_errors::ErrorGuaranteed> =
|
let mut diag: DiagnosticBuilder<'_, ()> =
|
||||||
DiagnosticBuilder::new(&self.sess().dcx, diagnostic.level.to_internal(), message);
|
DiagnosticBuilder::new(&self.sess().dcx, diagnostic.level.to_internal(), message);
|
||||||
diag.span(MultiSpan::from_spans(diagnostic.spans));
|
diag.span(MultiSpan::from_spans(diagnostic.spans));
|
||||||
for child in diagnostic.children {
|
for child in diagnostic.children {
|
||||||
|
Loading…
Reference in New Issue
Block a user