| //@ 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. |