@@ -42,16 +42,19 @@ pub trait CfgFolder: fold::Folder {
4242/// configuration.
4343pub struct StripUnconfigured < ' a > {
4444 diag : CfgDiagReal < ' a , ' a > ,
45+ should_test : bool ,
4546 config : & ' a ast:: CrateConfig ,
4647}
4748
4849impl < ' a > StripUnconfigured < ' a > {
4950 pub fn new ( config : & ' a ast:: CrateConfig ,
51+ should_test : bool ,
5052 diagnostic : & ' a Handler ,
5153 feature_gated_cfgs : & ' a mut Vec < GatedCfgAttr > )
5254 -> Self {
5355 StripUnconfigured {
5456 config : config,
57+ should_test : should_test,
5558 diag : CfgDiagReal { diag : diagnostic, feature_gated_cfgs : feature_gated_cfgs } ,
5659 }
5760 }
@@ -96,6 +99,11 @@ impl<'a> CfgFolder for StripUnconfigured<'a> {
9699 // configuration based on the item's attributes
97100 fn in_cfg ( & mut self , attrs : & [ ast:: Attribute ] ) -> bool {
98101 attrs. iter ( ) . all ( |attr| {
102+ // When not compiling with --test we should not compile the #[test] functions
103+ if !self . should_test && is_test_or_bench ( attr) {
104+ return false ;
105+ }
106+
99107 let mis = match attr. node . value . node {
100108 ast:: MetaItemKind :: List ( _, ref mis) if is_cfg ( & attr) => mis,
101109 _ => return true
@@ -135,12 +143,12 @@ impl<'a> CfgFolder for StripUnconfigured<'a> {
135143
136144// Support conditional compilation by transforming the AST, stripping out
137145// any items that do not belong in the current configuration
138- pub fn strip_unconfigured_items ( diagnostic : & Handler , krate : ast:: Crate ,
146+ pub fn strip_unconfigured_items ( diagnostic : & Handler , krate : ast:: Crate , should_test : bool ,
139147 feature_gated_cfgs : & mut Vec < GatedCfgAttr > )
140148 -> ast:: Crate
141149{
142150 let config = & krate. config . clone ( ) ;
143- StripUnconfigured :: new ( config, diagnostic, feature_gated_cfgs) . fold_crate ( krate)
151+ StripUnconfigured :: new ( config, should_test , diagnostic, feature_gated_cfgs) . fold_crate ( krate)
144152}
145153
146154impl < T : CfgFolder > fold:: Folder for T {
@@ -278,6 +286,10 @@ fn is_cfg(attr: &ast::Attribute) -> bool {
278286 attr. check_name ( "cfg" )
279287}
280288
289+ fn is_test_or_bench ( attr : & ast:: Attribute ) -> bool {
290+ attr. check_name ( "test" ) || attr. check_name ( "bench" )
291+ }
292+
281293pub trait CfgDiag {
282294 fn emit_error < F > ( & mut self , f : F ) where F : FnMut ( & Handler ) ;
283295 fn flag_gated < F > ( & mut self , f : F ) where F : FnMut ( & mut Vec < GatedCfgAttr > ) ;
0 commit comments