Skip to content

Commit

Permalink
Auto merge of #34546 - jseyfried:cfg_attr_path, r=nrc
Browse files Browse the repository at this point in the history
Support `cfg_attr` on `path` attributes

Fixes #25544.
This is technically a [breaking-change]. For example, the following would break:
```rust
mod foo; // Suppose `foo.rs` existed in the appropriate location
```
  • Loading branch information
bors authored Jul 6, 2016
2 parents d1e5e3a + ba59d42 commit 4738076
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/libsyntax/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ impl<'a> StripUnconfigured<'a> {
if self.in_cfg(node.attrs()) { Some(node) } else { None }
}

fn process_cfg_attrs<T: HasAttrs>(&mut self, node: T) -> T {
pub fn process_cfg_attrs<T: HasAttrs>(&mut self, node: T) -> T {
node.map_attrs(|attrs| {
attrs.into_iter().filter_map(|attr| self.process_cfg_attr(attr)).collect()
})
Expand Down
11 changes: 9 additions & 2 deletions src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5296,15 +5296,22 @@ impl<'a> Parser<'a> {

/// Parse a `mod <foo> { ... }` or `mod <foo>;` item
fn parse_item_mod(&mut self, outer_attrs: &[Attribute]) -> PResult<'a, ItemInfo> {
let outer_attrs = ::config::StripUnconfigured {
config: &self.cfg,
sess: self.sess,
should_test: false, // irrelevant
features: None, // don't perform gated feature checking
}.process_cfg_attrs(outer_attrs.to_owned());

let id_span = self.span;
let id = self.parse_ident()?;
if self.check(&token::Semi) {
self.bump();
// This mod is in an external file. Let's go get it!
let (m, attrs) = self.eval_src_mod(id, outer_attrs, id_span)?;
let (m, attrs) = self.eval_src_mod(id, &outer_attrs, id_span)?;
Ok((id, m, Some(attrs)))
} else {
self.push_mod_path(id, outer_attrs);
self.push_mod_path(id, &outer_attrs);
self.expect(&token::OpenDelim(token::Brace))?;
let mod_inner_lo = self.span.lo;
let attrs = self.parse_inner_attributes()?;
Expand Down
12 changes: 12 additions & 0 deletions src/test/compile-fail/cfg_attr_path.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// 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 <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.

#[cfg_attr(all(), path = "nonexistent_file.rs")] mod foo;
//~^ ERROR nonexistent_file.rs

0 comments on commit 4738076

Please sign in to comment.