Auto merge of #45867 - michaelwoerister:check-ich-stability, r=nikomatsakis
incr.comp.: Verify stability of incr. comp. hashes and clean up various other things. The main contribution of this PR is that it adds the `-Z incremental-verify-ich` functionality. Normally, when the red-green tracking system determines that a certain query result has not changed, it does not re-compute the incr. comp. hash (ICH) for that query result because that hash is already known. `-Z incremental-verify-ich` tells the compiler to re-hash the query result and compare the new hash against the cached hash. This is a rather thorough way of - testing hashing implementation stability, - finding missing `[input]` annotations on `DepNodes`, and - finding missing read-edges, since both a missed read and a missing `[input]` annotation can lead to something being marked as green instead of red and thus will have a different hash than it should have. Case in point, implementing this verification logic and activating it for all `src/test/incremental` tests has revealed several such oversights, all of which are fixed in this PR. r? @nikomatsakis
This commit is contained in:
commit
da3fbe750f
21 changed files with 329 additions and 246 deletions
|
|
@ -152,13 +152,48 @@ pub fn mod_by_zero(val: i32) -> i32 {
|
|||
}
|
||||
|
||||
|
||||
// shift left ------------------------------------------------------------------
|
||||
#[cfg(cfail1)]
|
||||
pub fn shift_left(val: i32, shift: usize) -> i32 {
|
||||
val << shift
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(label="Hir", cfg="cfail2")]
|
||||
#[rustc_clean(label="Hir", cfg="cfail3")]
|
||||
#[rustc_dirty(label="HirBody", cfg="cfail2")]
|
||||
#[rustc_clean(label="HirBody", cfg="cfail3")]
|
||||
#[rustc_metadata_clean(cfg="cfail2")]
|
||||
#[rustc_metadata_clean(cfg="cfail3")]
|
||||
pub fn shift_left(val: i32, shift: usize) -> i32 {
|
||||
val << shift
|
||||
}
|
||||
|
||||
|
||||
// shift right ------------------------------------------------------------------
|
||||
#[cfg(cfail1)]
|
||||
pub fn shift_right(val: i32, shift: usize) -> i32 {
|
||||
val >> shift
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
#[rustc_clean(label="Hir", cfg="cfail2")]
|
||||
#[rustc_clean(label="Hir", cfg="cfail3")]
|
||||
#[rustc_dirty(label="HirBody", cfg="cfail2")]
|
||||
#[rustc_clean(label="HirBody", cfg="cfail3")]
|
||||
#[rustc_metadata_clean(cfg="cfail2")]
|
||||
#[rustc_metadata_clean(cfg="cfail3")]
|
||||
pub fn shift_right(val: i32, shift: usize) -> i32 {
|
||||
val >> shift
|
||||
}
|
||||
|
||||
|
||||
// THE FOLLOWING ITEMS SHOULD NOT BE INFLUENCED BY THEIR SOURCE LOCATION
|
||||
|
||||
// bitwise ---------------------------------------------------------------------
|
||||
#[cfg(cfail1)]
|
||||
pub fn bitwise(val: i32) -> i32 {
|
||||
!val & 0x101010101 | 0x45689 ^ 0x2372382 << 1 >> 1
|
||||
!val & 0x101010101 | 0x45689 ^ 0x2372382
|
||||
}
|
||||
|
||||
#[cfg(not(cfail1))]
|
||||
|
|
@ -169,7 +204,7 @@ pub fn bitwise(val: i32) -> i32 {
|
|||
#[rustc_metadata_clean(cfg="cfail2")]
|
||||
#[rustc_metadata_clean(cfg="cfail3")]
|
||||
pub fn bitwise(val: i32) -> i32 {
|
||||
!val & 0x101010101 | 0x45689 ^ 0x2372382 << 1 >> 1
|
||||
!val & 0x101010101 | 0x45689 ^ 0x2372382
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -11,29 +11,29 @@
|
|||
// Check that the hash of `foo` doesn't change just because we ordered
|
||||
// the nested items (or even added new ones).
|
||||
|
||||
// revisions: rpass1 rpass2
|
||||
// revisions: cfail1 cfail2
|
||||
// must-compile-successfully
|
||||
|
||||
#![crate_type = "rlib"]
|
||||
#![feature(rustc_attrs)]
|
||||
|
||||
#[cfg(rpass1)]
|
||||
fn foo() {
|
||||
fn bar() { }
|
||||
fn baz() { }
|
||||
#[cfg(cfail1)]
|
||||
pub fn foo() {
|
||||
pub fn bar() { }
|
||||
pub fn baz() { }
|
||||
}
|
||||
|
||||
#[cfg(rpass2)]
|
||||
#[rustc_clean(label="Hir", cfg="rpass2")]
|
||||
#[rustc_clean(label="HirBody", cfg="rpass2")]
|
||||
fn foo() {
|
||||
#[rustc_clean(label="Hir", cfg="rpass2")]
|
||||
#[rustc_clean(label="HirBody", cfg="rpass2")]
|
||||
fn baz() { } // order is different...
|
||||
#[cfg(cfail2)]
|
||||
#[rustc_clean(label="Hir", cfg="cfail2")]
|
||||
#[rustc_dirty(label="HirBody", cfg="cfail2")]
|
||||
pub fn foo() {
|
||||
#[rustc_clean(label="Hir", cfg="cfail2")]
|
||||
#[rustc_clean(label="HirBody", cfg="cfail2")]
|
||||
pub fn baz() { } // order is different...
|
||||
|
||||
#[rustc_clean(label="Hir", cfg="rpass2")]
|
||||
#[rustc_clean(label="HirBody", cfg="rpass2")]
|
||||
fn bar() { } // but that doesn't matter.
|
||||
#[rustc_clean(label="Hir", cfg="cfail2")]
|
||||
#[rustc_clean(label="HirBody", cfg="cfail2")]
|
||||
pub fn bar() { } // but that doesn't matter.
|
||||
|
||||
fn bap() { } // neither does adding a new item
|
||||
pub fn bap() { } // neither does adding a new item
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
|
|||
|
|
@ -11,21 +11,24 @@
|
|||
// This test case makes sure that the compiler doesn't crash due to a failing
|
||||
// table lookup when a source file is removed.
|
||||
|
||||
// revisions:rpass1 rpass2
|
||||
// revisions:cfail1 cfail2
|
||||
|
||||
// Note that we specify -g so that the FileMaps actually get referenced by the
|
||||
// incr. comp. cache:
|
||||
// compile-flags: -Z query-dep-graph -g
|
||||
// must-compile-successfully
|
||||
|
||||
#[cfg(rpass1)]
|
||||
#![crate_type= "rlib"]
|
||||
|
||||
#[cfg(cfail1)]
|
||||
mod auxiliary;
|
||||
|
||||
#[cfg(rpass1)]
|
||||
fn main() {
|
||||
#[cfg(cfail1)]
|
||||
pub fn foo() {
|
||||
auxiliary::print_hello();
|
||||
}
|
||||
|
||||
#[cfg(rpass2)]
|
||||
fn main() {
|
||||
#[cfg(cfail2)]
|
||||
pub fn foo() {
|
||||
println!("hello");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
// revisions:rpass1 rpass2
|
||||
// compile-flags: -Z query-dep-graph -g
|
||||
|
||||
#![rustc_partition_reused(module="spans_in_type_debuginfo", cfg="rpass2")]
|
||||
#![rustc_partition_reused(module="spans_in_type_debuginfo-structs", cfg="rpass2")]
|
||||
#![rustc_partition_reused(module="spans_in_type_debuginfo-enums", cfg="rpass2")]
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue