Revamp the fulfillment cache tracking to only cache trait-refs, which

was the major use-case, and to update the dep-graph. Other kinds of
predicates are now excluded from the cache because there is no easy way
to make a good dep-graph node for them, and because they are not
believed to be that useful. :)

Fixes #30741. (However, the test still gives wrong result for trans,
for an independent reason which is fixed in the next commit.)
This commit is contained in:
Niko Matsakis 2016-01-20 16:56:29 -05:00
parent b5f85cffc8
commit 0bdefd7064
6 changed files with 80 additions and 32 deletions

View file

@ -41,7 +41,7 @@ mod y {
}
// FIXME(#30741) tcx fulfillment cache not tracked
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR no path
pub fn take_foo_with_char() {
take_foo::<char>('a');
@ -54,7 +54,7 @@ mod y {
}
// FIXME(#30741) tcx fulfillment cache not tracked
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR no path
#[rustc_then_this_would_need(TypeckItemBody)] //~ ERROR OK
#[rustc_then_this_would_need(TransCrateItem)] //~ ERROR no path
pub fn take_foo_with_u32() {
take_foo::<u32>(22);