From a678e3191197f145451c97c6cc884e15cae38186 Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sat, 14 Sep 2019 16:17:57 -0400 Subject: [PATCH] Hide diagnostics emitted during --cfg parsing The early error is more than sufficient for fixing the problem. --- src/librustc/session/config.rs | 13 ++++++++++++- .../ui/conditional-compilation/cfg-arg-invalid-6.rs | 3 +++ .../cfg-arg-invalid-6.stderr | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/conditional-compilation/cfg-arg-invalid-6.rs create mode 100644 src/test/ui/conditional-compilation/cfg-arg-invalid-6.stderr diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index c74b2fee41d6c..723855c7c29cf 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -7,6 +7,7 @@ use crate::session::{early_error, early_warn, Session}; use crate::session::search_paths::SearchPath; use rustc_data_structures::fx::FxHashSet; +use rustc_data_structures::sync::Lrc; use rustc_target::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, RelroLevel}; use rustc_target::spec::{Target, TargetTriple}; @@ -19,6 +20,7 @@ use syntax::parse::{ParseSess, new_parser_from_source_str}; use syntax::parse::token; use syntax::symbol::{sym, Symbol}; use syntax::feature_gate::UnstableFeatures; +use syntax::source_map::SourceMap; use errors::emitter::HumanReadableErrorType; use errors::{ColorConfig, FatalError, Handler}; @@ -1850,11 +1852,20 @@ pub fn rustc_optgroups() -> Vec { opts } +struct NullEmitter; + +impl errors::emitter::Emitter for NullEmitter { + fn emit_diagnostic(&mut self, _: &errors::DiagnosticBuilder<'_>) {} +} + // Converts strings provided as `--cfg [cfgspec]` into a `crate_cfg`. pub fn parse_cfgspecs(cfgspecs: Vec) -> FxHashSet<(String, Option)> { syntax::with_default_globals(move || { let cfg = cfgspecs.into_iter().map(|s| { - let sess = ParseSess::new(FilePathMapping::empty()); + + let cm = Lrc::new(SourceMap::new(FilePathMapping::empty())); + let handler = Handler::with_emitter(false, None, Box::new(NullEmitter)); + let sess = ParseSess::with_span_handler(handler, cm); let filename = FileName::cfg_spec_source_code(&s); let mut parser = new_parser_from_source_str(&sess, filename, s.to_string()); diff --git a/src/test/ui/conditional-compilation/cfg-arg-invalid-6.rs b/src/test/ui/conditional-compilation/cfg-arg-invalid-6.rs new file mode 100644 index 0000000000000..9fa726f93e3ea --- /dev/null +++ b/src/test/ui/conditional-compilation/cfg-arg-invalid-6.rs @@ -0,0 +1,3 @@ +// compile-flags: --cfg a{ +// error-pattern: invalid `--cfg` argument: `a{` (expected `key` or `key="value"`) +fn main() {} diff --git a/src/test/ui/conditional-compilation/cfg-arg-invalid-6.stderr b/src/test/ui/conditional-compilation/cfg-arg-invalid-6.stderr new file mode 100644 index 0000000000000..7d2087b4b71f7 --- /dev/null +++ b/src/test/ui/conditional-compilation/cfg-arg-invalid-6.stderr @@ -0,0 +1,2 @@ +error: invalid `--cfg` argument: `a{` (expected `key` or `key="value"`) +