Report fatal lexer errors in --cfg
command line arguments
This commit is contained in:
parent
ed937594d3
commit
041212f8fb
5 changed files with 37 additions and 7 deletions
|
@ -15,7 +15,7 @@ use rustc_span::{MultiSpan, SourceFile, Span};
|
||||||
use crate::snippet::{Annotation, AnnotationType, Line, MultilineAnnotation, Style, StyledString};
|
use crate::snippet::{Annotation, AnnotationType, Line, MultilineAnnotation, Style, StyledString};
|
||||||
use crate::styled_buffer::StyledBuffer;
|
use crate::styled_buffer::StyledBuffer;
|
||||||
use crate::{
|
use crate::{
|
||||||
CodeSuggestion, Diagnostic, DiagnosticId, Level, SubDiagnostic, SubstitutionHighlight,
|
CodeSuggestion, Diagnostic, DiagnosticId, Handler, Level, SubDiagnostic, SubstitutionHighlight,
|
||||||
SuggestionStyle,
|
SuggestionStyle,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -527,14 +527,27 @@ impl Emitter for EmitterWriter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An emitter that does nothing when emitting a diagnostic.
|
/// An emitter that does nothing when emitting a non-fatal diagnostic.
|
||||||
pub struct SilentEmitter;
|
/// Fatal diagnostics are forwarded to `fatal_handler` to avoid silent
|
||||||
|
/// failures of rustc, as witnessed e.g. in issue #89358.
|
||||||
|
pub struct SilentEmitter {
|
||||||
|
pub fatal_handler: Handler,
|
||||||
|
pub fatal_note: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
impl Emitter for SilentEmitter {
|
impl Emitter for SilentEmitter {
|
||||||
fn source_map(&self) -> Option<&Lrc<SourceMap>> {
|
fn source_map(&self) -> Option<&Lrc<SourceMap>> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
fn emit_diagnostic(&mut self, _: &Diagnostic) {}
|
fn emit_diagnostic(&mut self, d: &Diagnostic) {
|
||||||
|
if d.level == Level::Fatal {
|
||||||
|
let mut d = d.clone();
|
||||||
|
if let Some(ref note) = self.fatal_note {
|
||||||
|
d.note(note);
|
||||||
|
}
|
||||||
|
self.fatal_handler.emit_diagnostic(&d);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Maximum number of lines we will print for a multiline suggestion; arbitrary.
|
/// Maximum number of lines we will print for a multiline suggestion; arbitrary.
|
||||||
|
|
|
@ -81,7 +81,10 @@ pub fn parse_cfgspecs(cfgspecs: Vec<String>) -> FxHashSet<(String, Option<String
|
||||||
let cfg = cfgspecs
|
let cfg = cfgspecs
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|s| {
|
.map(|s| {
|
||||||
let sess = ParseSess::with_silent_emitter();
|
let sess = ParseSess::with_silent_emitter(Some(format!(
|
||||||
|
"this error occurred on the command line: `--cfg={}`",
|
||||||
|
s
|
||||||
|
)));
|
||||||
let filename = FileName::cfg_spec_source_code(&s);
|
let filename = FileName::cfg_spec_source_code(&s);
|
||||||
let mut parser = new_parser_from_source_str(&sess, filename, s.to_string());
|
let mut parser = new_parser_from_source_str(&sess, filename, s.to_string());
|
||||||
|
|
||||||
|
|
|
@ -174,9 +174,14 @@ impl ParseSess {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_silent_emitter() -> Self {
|
pub fn with_silent_emitter(fatal_note: Option<String>) -> Self {
|
||||||
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
|
let sm = Lrc::new(SourceMap::new(FilePathMapping::empty()));
|
||||||
let handler = Handler::with_emitter(false, None, Box::new(SilentEmitter));
|
let fatal_handler = Handler::with_tty_emitter(ColorConfig::Auto, false, None, None);
|
||||||
|
let handler = Handler::with_emitter(
|
||||||
|
false,
|
||||||
|
None,
|
||||||
|
Box::new(SilentEmitter { fatal_handler, fatal_note }),
|
||||||
|
);
|
||||||
ParseSess::with_span_handler(handler, sm)
|
ParseSess::with_span_handler(handler, sm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
5
src/test/ui/conditional-compilation/cfg-arg-invalid-7.rs
Normal file
5
src/test/ui/conditional-compilation/cfg-arg-invalid-7.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
// Regression test for issue #89358.
|
||||||
|
|
||||||
|
// compile-flags: --cfg a"
|
||||||
|
// error-pattern: unterminated double quote string
|
||||||
|
// error-pattern: this error occurred on the command line
|
|
@ -0,0 +1,4 @@
|
||||||
|
error[E0765]: unterminated double quote string
|
||||||
|
|
|
||||||
|
= note: this error occurred on the command line: `--cfg=a"`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue