mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 16:54:01 +00:00
driver: Disallow predicates in --cfg specs
A spec like `#[cfg(foo(bar))]` is not allowed as an attribute. This makes the same spec be rejected by the compiler if passed in as a `--cfg` argument. Fixes #31495
This commit is contained in:
parent
4c4bb5ff5c
commit
6d2c866e22
@ -348,10 +348,24 @@ fn handle_explain(code: &str,
|
||||
}
|
||||
}
|
||||
|
||||
fn check_cfg(sopts: &config::Options,
|
||||
output: ErrorOutputType) {
|
||||
fn is_meta_list(item: &ast::MetaItem) -> bool {
|
||||
match item.node {
|
||||
ast::MetaItem_::MetaList(..) => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
if sopts.cfg.iter().any(|item| is_meta_list(&*item)) {
|
||||
early_error(output, "predicates are not allowed in --cfg");
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> CompilerCalls<'a> for RustcDefaultCalls {
|
||||
fn early_callback(&mut self,
|
||||
matches: &getopts::Matches,
|
||||
_sopts: &config::Options,
|
||||
sopts: &config::Options,
|
||||
descriptions: &diagnostics::registry::Registry,
|
||||
output: ErrorOutputType)
|
||||
-> Compilation {
|
||||
@ -360,6 +374,7 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls {
|
||||
return Compilation::Stop;
|
||||
}
|
||||
|
||||
check_cfg(sopts, output);
|
||||
Compilation::Continue
|
||||
}
|
||||
|
||||
|
13
src/test/compile-fail/issue-31495.rs
Normal file
13
src/test/compile-fail/issue-31495.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// Copyright 2015 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 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// compile-flags: --cfg foo(bar)
|
||||
// error-pattern: predicates are not allowed in --cfg
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user