diff --git a/src/librustc_passes/ast_validation.rs b/src/librustc_passes/ast_validation.rs index 1e8da29ee74..46124d0f973 100644 --- a/src/librustc_passes/ast_validation.rs +++ b/src/librustc_passes/ast_validation.rs @@ -19,6 +19,7 @@ use rustc::lint; use rustc::session::Session; use syntax::ast::*; +use syntax::attr; use syntax::parse::token::{self, keywords}; use syntax::visit::{self, Visitor}; use syntax_pos::Span; @@ -168,6 +169,10 @@ impl<'a> Visitor for AstValidator<'a> { } } } + ItemKind::Mod(_) => { + // Ensure that `path` attributes on modules are recorded as used (c.f. #35584). + attr::first_attr_value_str_by_name(&item.attrs, "path"); + } _ => {} } diff --git a/src/test/compile-fail/cfg_attr_path.rs b/src/test/compile-fail/cfg_attr_path.rs index 502768cc44e..7d799850a65 100644 --- a/src/test/compile-fail/cfg_attr_path.rs +++ b/src/test/compile-fail/cfg_attr_path.rs @@ -8,5 +8,17 @@ // 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 +#![feature(rustc_attrs)] +#![allow(dead_code)] +#![deny(unused_attributes)] // c.f #35584 + +mod auxiliary { + #[cfg_attr(any(), path = "nonexistent_file.rs")] pub mod namespaced_enums; + #[cfg_attr(all(), path = "namespaced_enums.rs")] pub mod nonexistent_file; +} + +#[rustc_error] +fn main() { //~ ERROR compilation successful + let _ = auxiliary::namespaced_enums::Foo::A; + let _ = auxiliary::nonexistent_file::Foo::A; +}