diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2016-03-28 17:49:02 -0400 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2016-04-06 12:42:46 -0400 |
| commit | 068142a2e6d8a72e52091ccebd3368ffaf267643 (patch) | |
| tree | 0349999e2e90268f37a3ad230be511fe2280bbd9 /src/test | |
| parent | 3fb40c1d95dd3a14ad14d71e3ec847a0a102bd49 (diff) | |
| download | rust-068142a2e6d8a72e52091ccebd3368ffaf267643.tar.gz rust-068142a2e6d8a72e52091ccebd3368ffaf267643.zip | |
add incremental test runner and some tests
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/incremental/dirty_clean.rs | 54 | ||||
| -rw-r--r-- | src/test/incremental/hello_world.rs | 46 | ||||
| -rw-r--r-- | src/test/incremental/string_constant.rs | 58 |
3 files changed, 158 insertions, 0 deletions
diff --git a/src/test/incremental/dirty_clean.rs b/src/test/incremental/dirty_clean.rs new file mode 100644 index 00000000000..f0e596baa2d --- /dev/null +++ b/src/test/incremental/dirty_clean.rs @@ -0,0 +1,54 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// revisions: rpass1 cfail2 + +#![allow(warnings)] +#![feature(rustc_attrs)] + +// Sanity check for the dirty-clean system. Give the opposite +// annotations that we expect to see, so that we check that errors are +// reported. + +fn main() { } + +mod x { + #[cfg(rpass1)] + pub fn x() -> usize { + 22 + } + + #[cfg(cfail2)] + pub fn x() -> u32 { + 22 + } +} + +mod y { + use x; + + #[rustc_clean(label="TypeckItemBody", cfg="cfail2")] + #[rustc_clean(label="TransCrateItem", cfg="cfail2")] + pub fn y() { + //[cfail2]~^ ERROR `TypeckItemBody("y::y")` not found in dep graph, but should be clean + //[cfail2]~| ERROR `TransCrateItem("y::y")` not found in dep graph, but should be clean + x::x(); + } +} + +mod z { + #[rustc_dirty(label="TypeckItemBody", cfg="cfail2")] + #[rustc_dirty(label="TransCrateItem", cfg="cfail2")] + pub fn z() { + //[cfail2]~^ ERROR `TypeckItemBody("z::z")` found in dep graph, but should be dirty + // FIXME(#32014) -- TransCrateItem ought to be clean, but it is in fact + // dirty, hence we don't see an error here. + } +} diff --git a/src/test/incremental/hello_world.rs b/src/test/incremental/hello_world.rs new file mode 100644 index 00000000000..f98ae188bad --- /dev/null +++ b/src/test/incremental/hello_world.rs @@ -0,0 +1,46 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// revisions: rpass1 rpass2 + +#![allow(warnings)] +#![feature(rustc_attrs)] + +fn main() { } + +mod x { + #[cfg(rpass1)] + pub fn x() -> i32 { + 1 + } + + #[cfg(rpass2)] + pub fn x() -> i32 { + 2 + } +} + +mod y { + use x; + + #[rustc_dirty(label="TypeckItemBody", cfg="rpass2")] + pub fn y() { + x::x(); + } +} + +mod z { + use y; + + #[rustc_clean(label="TypeckItemBody", cfg="rpass2")] + pub fn z() { + y::y(); + } +} diff --git a/src/test/incremental/string_constant.rs b/src/test/incremental/string_constant.rs new file mode 100644 index 00000000000..1acca8b2952 --- /dev/null +++ b/src/test/incremental/string_constant.rs @@ -0,0 +1,58 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// revisions: rpass1 rpass2 + +#![allow(warnings)] +#![feature(rustc_attrs)] + +// Here the only thing which changes is the string constant in `x`. +// Therefore, the compiler deduces (correctly) that typeck is not +// needed even for callers of `x`. +// +// It is not entirely clear why `TransCrateItem` invalidates `y` and +// `z`, actually, I think it's because of the structure of +// trans. -nmatsakis + +fn main() { } + +mod x { + #[cfg(rpass1)] + pub fn x() { + println!("1"); + } + + #[cfg(rpass2)] + #[rustc_dirty(label="TypeckItemBody", cfg="rpass2")] + #[rustc_dirty(label="TransCrateItem", cfg="rpass2")] + pub fn x() { + println!("2"); + } +} + +mod y { + use x; + + #[rustc_clean(label="TypeckItemBody", cfg="rpass2")] + #[rustc_dirty(label="TransCrateItem", cfg="rpass2")] + pub fn y() { + x::x(); + } +} + +mod z { + use y; + + #[rustc_clean(label="TypeckItemBody", cfg="rpass2")] + #[rustc_dirty(label="TransCrateItem", cfg="rpass2")] + pub fn z() { + y::y(); + } +} |
