2734: Fix #2705 r=flodiebold a=flodiebold

The `-` turned into a `+` during a refactoring.

The original issue was caused by `Read` resolving wrongly to a trait without
type parameters instead of a struct with one parameter; this only fixes the
crash, not the wrong resolution.

Co-authored-by: Florian Diebold <flodiebold@gmail.com>
This commit is contained in:
bors[bot] 2020-01-03 13:59:35 +00:00 committed by GitHub
commit 906d4dee3e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 1 deletions

View file

@ -331,7 +331,7 @@ pub(super) fn substs_from_path_segment(
if let Some(generic_args) = &segment.args_and_bindings {
// if args are provided, it should be all of them, but we can't rely on that
let self_param_correction = if add_self_param { 1 } else { 0 };
let child_len = child_len + self_param_correction;
let child_len = child_len - self_param_correction;
for arg in generic_args.args.iter().take(child_len) {
match arg {
GenericArg::Type(type_ref) => {

View file

@ -365,3 +365,20 @@ fn issue_2669() {
"###
)
}
#[test]
fn issue_2705() {
assert_snapshot!(
infer(r#"
trait Trait {}
fn test() {
<Trait<u32>>::foo()
}
"#),
@r###"
[26; 53) '{ ...oo() }': ()
[32; 49) '<Trait...>::foo': {unknown}
[32; 51) '<Trait...:foo()': ()
"###
);
}