Skip to content

introduce canonical queries, use for normalization and dropck-outlives #48411

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 27 commits into from
Mar 13, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f873c1e
require `Lifted` types to outlive `'tcx`
nikomatsakis Feb 14, 2018
23837c1
improve TypeFoldable/Lift macros and make a bunch of stuff use them
nikomatsakis Feb 9, 2018
5ddcd09
add `TypeRelation` and `Lift` impls for `Kind`
nikomatsakis Feb 9, 2018
10ae216
fix typo in comment
nikomatsakis Feb 9, 2018
d0aff85
make regions "traceable" so you can do `infcx.at(..).eq(r1, r2)`
nikomatsakis Feb 9, 2018
0037cca
comment the purpose of `TransNormalize`
nikomatsakis Feb 9, 2018
652b3b7
random reformatting
nikomatsakis Feb 21, 2018
1d377d1
add handy helper for Cell<usize>, used for perf stats
nikomatsakis Feb 20, 2018
6d0f931
refactor `ParamEnv::empty(Reveal)` into two distinct methods
nikomatsakis Feb 10, 2018
64d4ed3
move ParamEnv methods from `ty/util` to `ty/mod`
nikomatsakis Feb 14, 2018
80b4c45
change `ParamEnv::and` to sometimes keep the environment [VIC]
nikomatsakis Feb 20, 2018
993c148
add `canonicalize` method to `InferCtxt` [VIC]
nikomatsakis Feb 9, 2018
8c024fd
in `Foo(X)` dep-nodes, allow X to be a `ty` not a `tt`
nikomatsakis Feb 23, 2018
3a50b41
introduce `infcx.at(..).normalize(..)` operation [VIC]
nikomatsakis Feb 25, 2018
ca87d24
introduce `infcx.at(..).dropck_outlives(..)` operaton [VIC]
nikomatsakis Feb 21, 2018
211d9ad
introduce `tcx.normalize_erasing_regions(..)` operaton [VIC]
nikomatsakis Feb 21, 2018
e4728e4
transition various normalization functions to the new methods
nikomatsakis Mar 3, 2018
0a2ac85
move `drain_fulfillment_cx_or_panic` to be private to traits::trans
nikomatsakis Feb 13, 2018
36e5092
add some debug output
nikomatsakis Feb 26, 2018
1e4e632
add regression tests for various MIR bugs that get fixed
nikomatsakis Feb 27, 2018
03c5428
short-circuit `dropck_outlives` for simple cases
nikomatsakis Mar 7, 2018
0d17f95
short-circuit work when instantiating query responses
nikomatsakis Mar 7, 2018
6288faa
`trans_apply_param_substs` => `subst_and_normalize_erasing_regions`
nikomatsakis Mar 9, 2018
fc04c41
add a debug assertion that only outlives-oblig. result from norm.
nikomatsakis Mar 9, 2018
d326738
replace inline docs with references to rustc-guide
nikomatsakis Mar 11, 2018
29dc902
remove dead code
nikomatsakis Mar 11, 2018
17c4103
add "text" sections for things that seem likely to be a problem
nikomatsakis Mar 11, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add canonicalize method to InferCtxt [VIC]
  • Loading branch information
nikomatsakis committed Mar 13, 2018
commit 993c1488cc4b0826c3f1076393bf50eef09ba467
59 changes: 57 additions & 2 deletions src/librustc/ich/impls_ty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ use std::cell::RefCell;
use std::hash as std_hash;
use std::mem;
use middle::region;
use infer;
use traits;
use ty;
use mir;
Expand Down Expand Up @@ -85,6 +86,9 @@ for ty::RegionKind {
ty::ReEmpty => {
// No variant fields to hash for these ...
}
ty::ReCanonical(c) => {
c.hash_stable(hcx, hasher);
}
ty::ReLateBound(db, ty::BrAnon(i)) => {
db.depth.hash_stable(hcx, hasher);
i.hash_stable(hcx, hasher);
Expand Down Expand Up @@ -130,6 +134,16 @@ impl<'a> HashStable<StableHashingContext<'a>> for ty::RegionVid {
}
}

impl<'gcx> HashStable<StableHashingContext<'gcx>> for ty::CanonicalVar {
#[inline]
fn hash_stable<W: StableHasherResult>(&self,
hcx: &mut StableHashingContext<'gcx>,
hasher: &mut StableHasher<W>) {
use rustc_data_structures::indexed_vec::Idx;
self.index().hash_stable(hcx, hasher);
}
}

impl<'a, 'gcx> HashStable<StableHashingContext<'a>>
for ty::adjustment::AutoBorrow<'gcx> {
fn hash_stable<W: StableHasherResult>(&self,
Expand Down Expand Up @@ -1229,11 +1243,52 @@ for traits::VtableGeneratorData<'gcx, N> where N: HashStable<StableHashingContex
}
}

impl<'gcx> HashStable<StableHashingContext<'gcx>>
impl<'a> HashStable<StableHashingContext<'a>>
for ty::UniverseIndex {
fn hash_stable<W: StableHasherResult>(&self,
hcx: &mut StableHashingContext<'gcx>,
hcx: &mut StableHashingContext<'a>,
hasher: &mut StableHasher<W>) {
self.depth().hash_stable(hcx, hasher);
}
}

impl_stable_hash_for!(
impl<'tcx, V> for struct infer::canonical::Canonical<'tcx, V> {
variables, value
}
);

impl_stable_hash_for!(
impl<'tcx> for struct infer::canonical::CanonicalVarValues<'tcx> {
var_values
}
);

impl_stable_hash_for!(struct infer::canonical::CanonicalVarInfo {
kind
});

impl_stable_hash_for!(enum infer::canonical::CanonicalVarKind {
Ty(k),
Region
});

impl_stable_hash_for!(enum infer::canonical::CanonicalTyVarKind {
General,
Int,
Float
});

impl_stable_hash_for!(
impl<'tcx, R> for struct infer::canonical::QueryResult<'tcx, R> {
var_values, region_constraints, certainty, value
}
);

impl_stable_hash_for!(struct infer::canonical::QueryRegionConstraints<'tcx> {
region_outlives, ty_outlives
});

impl_stable_hash_for!(enum infer::canonical::Certainty {
Proven, Ambiguous
});
Loading