tree 113a8dcc0720bc0c29b993f5afd6626c324cd40a
parent 0a2e07ec1dc5194e12dfb1ca00c4bc87533ac88d
parent a946b8d6e1ff39f22e3f9f1c46ba81898901d907
author Mazdak Farrokhzad <twingoow@gmail.com> 1568568959 +0200
committer GitHub <noreply@github.com> 1568568959 +0200
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJdfnZ/CRBK7hj4Ov3rIwAAdHIIAHVTy3XNar7eCQRHfds7QTsr
 BH43ijPMhKRgINM2U/L9tVryONpGtsH4y3NLiaBVunWWCk7DDIo+q5EigxpagkEt
 zFB7v68eDcS2ldebnuNDddjbwXg5raXDU5x/e1CJA6YF7prC6wDvwTYdHDwFgUiW
 TDHkvvrSg+5kDbfEi2RMZeHMzscov4PPee8yXj96DAC2REUPCP0LUoGuS/XM4B3Z
 oiz4hBI9nAeZE6ctXPz5l+RSS5sVy8SVS2et7bGL1AihcBjB1ApBe/gF7N1H2ynB
 RYJJK0B6i0UtFGbmmFkPmyWqVdQ+cTL5zsoQ+Vb+6NKlvvSqrOWDqQOsJpMcHmA=
 =TUbQ
 -----END PGP SIGNATURE-----
 

Rollup merge of #64250 - Xanewok:save-analysis-assoc-nested, r=varkor

save-analysis: Nest typeck tables when processing functions/methods

Fixes an issue where we did not nest tables correctly when resolving
associated types in formal argument/return type positions.

This was the minimized reproduction case that I tested the fix on:
```rust
pub trait Trait {
    type Assoc;
}

pub struct A;

pub fn func() {
    fn _inner1<U: Trait>(_: U::Assoc) {}
    fn _inner2<U: Trait>() -> U::Assoc { unimplemented!() }

    impl A {
        fn _inner1<U: Trait>(self, _: U::Assoc) {}
        fn _inner2<U: Trait>(self) -> U::Assoc { unimplemented!() }
    }
}
```
using `debug_assertions`-enabled rustc and by additionally passing `-Zsave-analysis`.

Unfortunately the original assertion fired is a *debug* one and from what I can tell we don't run the tests with these on, so I'm not adding a test here. If I missed it and there is a way to run tests with these on, I'd love to add a test case for this.

Closes #63663
Closes #50328
Closes #43982
