//@ run-pass #![allow(dead_code)] #![allow(non_upper_case_globals)] #![allow(non_camel_case_types)] #![allow(improper_ctypes)] // Crate use statements #[cfg(FALSE)] use flippity; #[cfg(FALSE)] static b: bool = false; static b: bool = true; mod rustrt { #[cfg(FALSE)] extern "C" { // This symbol doesn't exist and would be a link error if this // module was codegened pub fn FALSE(); } extern "C" {} } #[cfg(FALSE)] type t = isize; type t = bool; #[cfg(FALSE)] enum tg { foo, } enum tg { bar, } #[cfg(FALSE)] struct r { i: isize, } #[cfg(FALSE)] fn r(i: isize) -> r { r { i: i } } struct r { i: isize, } fn r(i: isize) -> r { r { i: i } } #[cfg(FALSE)] mod m { // This needs to parse but would fail in typeck. Since it's not in // the current config it should not be typechecked. pub fn FALSE() { return 0; } } mod m { // Submodules have slightly different code paths than the top-level // module, so let's make sure this jazz works here as well #[cfg(FALSE)] pub fn f() {} pub fn f() {} } // Since the FALSE configuration isn't defined main will just be // parsed, but nothing further will be done with it #[cfg(FALSE)] pub fn main() { panic!() } pub fn main() { // Exercise some of the configured items in ways that wouldn't be possible // if they had the FALSE definition assert!((b)); let _x: t = true; let _y: tg = tg::bar; test_in_fn_ctxt(); } fn test_in_fn_ctxt() { #[cfg(FALSE)] fn f() { panic!() } fn f() {} f(); #[cfg(FALSE)] static i: isize = 0; static i: isize = 1; assert_eq!(i, 1); } mod test_foreign_items { pub mod rustrt { extern "C" { #[cfg(FALSE)] pub fn write() -> String; pub fn write() -> String; } } } mod test_use_statements { #[cfg(FALSE)] use flippity_foo; } mod test_methods { struct Foo { bar: usize, } impl Fooable for Foo { #[cfg(FALSE)] fn what(&self) {} fn what(&self) {} #[cfg(FALSE)] fn the(&self) {} fn the(&self) {} } trait Fooable { #[cfg(FALSE)] fn what(&self); fn what(&self); #[cfg(FALSE)] fn the(&self); fn the(&self); } } #[cfg(any())] mod nonexistent_file; // Check that unconfigured non-inline modules are not loaded or parsed.