diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-04-12 12:18:11 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-04-12 12:18:11 +0200 |
| commit | 7a8329f5dacae9352a0ea72f9ab136c38403d20a (patch) | |
| tree | 6fc44d52d9a8943b358cebb476639118444126da /src/libsyntax/parse/parser | |
| parent | dddcd928dd0e6d9a88f7e59a79b5b1027aebf92f (diff) | |
| parent | bcd263e1f13494197503ec2f3eba554fe6055595 (diff) | |
| download | rust-7a8329f5dacae9352a0ea72f9ab136c38403d20a.tar.gz rust-7a8329f5dacae9352a0ea72f9ab136c38403d20a.zip | |
Rollup merge of #59894 - Xanewok:save-assoc-ty-qpath, r=eddyb
save-analysis: Pull associated type definition using `qpath_def`
Closes https://github.com/rust-lang/rls/issues/1390
This (probably?) fixes the case where we run the save-analysis code on the following snippet:
```rust
trait Test<'a> {
type Thing: Test2;
}
trait Test2 {
fn print();
}
#[allow(unused)]
fn example<T>(t: T)
where T: for<'a> Test<'a>
{
T::Thing::print(); //~ ERROR cannot extract an associated type from a higher-ranked trait bound in this context
// ^ only errors in save-analysis mode
}
```
The chain is as follows:
- culprit is `hir_ty_to_ty`
- which calls `ast_ty_to_ty` in the `ItemCtxt`
- which calls `associated_path_to_ty`
- which finally fails on `projected_ty_from_poly_trait_ref`
https://github.com/rust-lang/rust/blob/3de0106789468b211bcc3a25c09c0cf07119186d/src/librustc_typeck/collect.rs#L212-L224
I'm not exactly sure why `hir_ty_to_ty` fails - is it because it needs more setup from typeck to work correctly? I'm guessing the fix is okay since we just pull the already typeck'd data (we run save-analysis after all the analysis passes are complete) from the tables.
With this change we can 'go to def' on all segments in the `T::Thing::print()` path.
Diffstat (limited to 'src/libsyntax/parse/parser')
0 files changed, 0 insertions, 0 deletions
