From 068142a2e6d8a72e52091ccebd3368ffaf267643 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 28 Mar 2016 17:49:02 -0400 Subject: add incremental test runner and some tests --- src/test/incremental/dirty_clean.rs | 54 ++++++++++++++++++++++++++++++ src/test/incremental/hello_world.rs | 46 ++++++++++++++++++++++++++ src/test/incremental/string_constant.rs | 58 +++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 src/test/incremental/dirty_clean.rs create mode 100644 src/test/incremental/hello_world.rs create mode 100644 src/test/incremental/string_constant.rs (limited to 'src/test/incremental') 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 or the MIT license +// , 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 or the MIT license +// , 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 or the MIT license +// , 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(); + } +} -- cgit 1.4.1-3-g733a5