1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
//@ 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.
|