From b122064a33884a5dab1e5f4710b38ed233d2b4d5 Mon Sep 17 00:00:00 2001 From: Dirk Gadsden Date: Tue, 9 Feb 2016 22:48:47 -0800 Subject: [PATCH 1/2] Stricter matching of `--cfg` options on rustc Includes compile-fail test to check that it fails on incomplete `--cfg` matches. Fixes #31497. --- src/librustc/session/config.rs | 18 ++++++++++++++---- src/test/compile-fail/cfg-arg-invalid.rs | 13 +++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/test/compile-fail/cfg-arg-invalid.rs diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index c96713a72851a..28422989ea159 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -28,6 +28,7 @@ use syntax::attr; use syntax::attr::AttrMetaMethods; use syntax::errors::{ColorConfig, Handler}; use syntax::parse; +use syntax::parse::lexer::Reader; use syntax::parse::token::InternedString; use syntax::feature_gate::UnstableFeatures; @@ -906,10 +907,19 @@ pub fn rustc_optgroups() -> Vec { // Convert strings provided as --cfg [cfgspec] into a crate_cfg pub fn parse_cfgspecs(cfgspecs: Vec ) -> ast::CrateConfig { cfgspecs.into_iter().map(|s| { - parse::parse_meta_from_source_str("cfgspec".to_string(), - s.to_string(), - Vec::new(), - &parse::ParseSess::new()) + let sess = parse::ParseSess::new(); + let mut parser = parse::new_parser_from_source_str(&sess, + Vec::new(), + "cfgspec".to_string(), + s.to_string()); + let meta_item = panictry!(parser.parse_meta_item()); + + if !parser.reader.is_eof() { + early_error(ErrorOutputType::default(), &format!("invalid --cfg argument: {}", + s)) + } + + meta_item }).collect::() } diff --git a/src/test/compile-fail/cfg-arg-invalid.rs b/src/test/compile-fail/cfg-arg-invalid.rs new file mode 100644 index 0000000000000..404630399c601 --- /dev/null +++ b/src/test/compile-fail/cfg-arg-invalid.rs @@ -0,0 +1,13 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: --cfg a{b} +// error-pattern: invalid --cfg argument: a{b} +fn main() {} From 2766e254b1c326fb32414496c9532bcb3d3f1d51 Mon Sep 17 00:00:00 2001 From: Dirk Gadsden Date: Sun, 14 Feb 2016 22:26:37 -0800 Subject: [PATCH 2/2] Rename `error-index-generator` to `error_index_generator` This is because the tool compiler passes the name of the tool as a command line `--cfg`. The improved session config parser is stricter and no longer permits invalid meta items (such as "error-index-generator"). --- mk/crates.mk | 6 +++--- mk/dist.mk | 2 +- mk/docs.mk | 8 ++++---- mk/prepare.mk | 2 +- .../main.rs | 0 5 files changed, 9 insertions(+), 9 deletions(-) rename src/{error-index-generator => error_index_generator}/main.rs (100%) diff --git a/mk/crates.mk b/mk/crates.mk index bfd054ae988f2..cf3e479ec21f7 100644 --- a/mk/crates.mk +++ b/mk/crates.mk @@ -59,7 +59,7 @@ RUSTC_CRATES := rustc rustc_typeck rustc_mir rustc_borrowck rustc_resolve rustc_ rustc_data_structures rustc_front rustc_platform_intrinsics \ rustc_plugin rustc_metadata rustc_passes HOST_CRATES := syntax syntax_ext $(RUSTC_CRATES) rustdoc fmt_macros -TOOLS := compiletest rustdoc rustc rustbook error-index-generator +TOOLS := compiletest rustdoc rustc rustbook error_index_generator DEPS_core := DEPS_alloc := core libc alloc_system @@ -120,12 +120,12 @@ TOOL_DEPS_compiletest := test getopts TOOL_DEPS_rustdoc := rustdoc TOOL_DEPS_rustc := rustc_driver TOOL_DEPS_rustbook := std rustdoc -TOOL_DEPS_error-index-generator := rustdoc syntax serialize +TOOL_DEPS_error_index_generator := rustdoc syntax serialize TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs TOOL_SOURCE_rustc := $(S)src/driver/driver.rs TOOL_SOURCE_rustbook := $(S)src/rustbook/main.rs -TOOL_SOURCE_error-index-generator := $(S)src/error-index-generator/main.rs +TOOL_SOURCE_error_index_generator := $(S)src/error_index_generator/main.rs ONLY_RLIB_core := 1 ONLY_RLIB_libc := 1 diff --git a/mk/dist.mk b/mk/dist.mk index 685fb2b5b4679..31d3764eefab1 100644 --- a/mk/dist.mk +++ b/mk/dist.mk @@ -52,7 +52,7 @@ PKG_FILES := \ doc \ driver \ etc \ - error-index-generator \ + error_index_generator \ $(foreach crate,$(CRATES),lib$(crate)) \ libcollectionstest \ libcoretest \ diff --git a/mk/docs.mk b/mk/docs.mk index 7f73b99863f09..83cdb7f8023bc 100644 --- a/mk/docs.mk +++ b/mk/docs.mk @@ -59,8 +59,8 @@ RUSTBOOK_EXE = $(HBIN2_H_$(CFG_BUILD))/rustbook$(X_$(CFG_BUILD)) # ./configure RUSTBOOK = $(RPATH_VAR2_T_$(CFG_BUILD)_H_$(CFG_BUILD)) $(RUSTBOOK_EXE) -# The error-index-generator executable... -ERR_IDX_GEN_EXE = $(HBIN2_H_$(CFG_BUILD))/error-index-generator$(X_$(CFG_BUILD)) +# The error_index_generator executable... +ERR_IDX_GEN_EXE = $(HBIN2_H_$(CFG_BUILD))/error_index_generator$(X_$(CFG_BUILD)) ERR_IDX_GEN = $(RPATH_VAR2_T_$(CFG_BUILD)_H_$(CFG_BUILD)) $(ERR_IDX_GEN_EXE) ERR_IDX_GEN_MD = $(RPATH_VAR2_T_$(CFG_BUILD)_H_$(CFG_BUILD)) $(ERR_IDX_GEN_EXE) markdown @@ -221,9 +221,9 @@ error-index: doc/error-index.html # Metadata used to generate the index is created as a side effect of # the build so this depends on every crate being up to date. doc/error-index.html: $(ERR_IDX_GEN_EXE) $(CSREQ$(2)_T_$(CFG_BUILD)_H_$(CFG_BUILD)) | doc/ - $(Q)$(call E, error-index-generator: $@) + $(Q)$(call E, error_index_generator: $@) $(Q)$(ERR_IDX_GEN) doc/error-index.md: $(ERR_IDX_GEN_EXE) $(CSREQ$(2)_T_$(CFG_BUILD)_H_$(CFG_BUILD)) | doc/ - $(Q)$(call E, error-index-generator: $@) + $(Q)$(call E, error_index_generator: $@) $(Q)$(ERR_IDX_GEN_MD) diff --git a/mk/prepare.mk b/mk/prepare.mk index 87a445000ada4..2488de4ad5bdf 100644 --- a/mk/prepare.mk +++ b/mk/prepare.mk @@ -82,7 +82,7 @@ define PREPARE_MAN endef -PREPARE_TOOLS = $(filter-out compiletest rustbook error-index-generator, $(TOOLS)) +PREPARE_TOOLS = $(filter-out compiletest rustbook error_index_generator, $(TOOLS)) # $(1) is tool diff --git a/src/error-index-generator/main.rs b/src/error_index_generator/main.rs similarity index 100% rename from src/error-index-generator/main.rs rename to src/error_index_generator/main.rs