Skip to content

associated_type_bounds: errors with ambiguous associated type #61752

New issue

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

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

Already on GitHub? # to your account

Closed
RustyYato opened this issue Jun 11, 2019 · 6 comments · Fixed by #61919
Closed

associated_type_bounds: errors with ambiguous associated type #61752

RustyYato opened this issue Jun 11, 2019 · 6 comments · Fixed by #61919
Assignees
Labels
A-trait-system Area: Trait system A-type-system Area: Type system C-bug Category: This is a bug. F-associated_type_bounds `#![feature(associated_type_bounds)]` T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@RustyYato
Copy link
Contributor

I think I found a bug with associated type bounds! #52662

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=28d566e7244a0b3ad21b73e31418894d

#![feature(associated_type_bounds)]

trait Foo {
    type Bar;
}

fn works<F: Foo>() where F::Bar: Copy {}

// This should be fine, but I get `error[E0221]` instead
fn breaks<F: Foo<Bar: Foo>>() where F::Bar: Copy {}

This is the exact same error you get when you do this

trait Foo<T> {
    type Bar;
}

fn breaks<F: Foo<String> + Foo<u32>>() where F::Bar: Copy {}

Because Rust can't tell which Foo::<_>::Bar you mean, but in the case of associated_type_bounds, there is no ambiguity, which makes this error confusing.

@RustyYato RustyYato changed the title Wrong Error in associated_type_bounds Incorrect error emitted in associated_type_bounds Jun 11, 2019
@Centril Centril added C-bug Category: This is a bug. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jun 11, 2019
@Centril
Copy link
Contributor

Centril commented Jun 11, 2019

Seems like a bug indeed!

cc @alexreg @nikomatsakis

@Centril Centril added A-trait-system Area: Trait system A-type-system Area: Type system labels Jun 11, 2019
@Centril
Copy link
Contributor

Centril commented Jun 11, 2019

Same error with:

fn breaks2<F>() where F: Foo<Bar: Foo>, F::Bar: Copy {}

Although the following results in the same problem:

fn breaks3_no_atb<F>() where F: Foo, Foo::Bar: Foo, F::Bar: Copy {}

so it may not be a bug after all?

@Centril Centril changed the title Incorrect error emitted in associated_type_bounds associated_type_bounds: errors with ambiguous associated type Jun 11, 2019
@RustyYato
Copy link
Contributor Author

RustyYato commented Jun 11, 2019

Ignore this, I got myself confused.

Ok, maybe just the wrong error in the desugaring? I guess this never came up because people tend to group up the bounds.

So, they would do this instead

fn breaks3_no_atb<F>() where F: Foo, Foo::Bar: Foo + Copy {}

Which works fine
edit: this should say

fn breaks3_no_atb<F>() where F: Foo, F::Bar: Foo + Copy {}

Which does work fine, but I copy pasted from Centril's comment earlier.

@Centril
Copy link
Contributor

Centril commented Jun 11, 2019

@KrishnaSannasi Oops; I wrote Foo::Bar: Foo; should be F::Bar: Foo. Sorry!

So it is a bug after all...

@alexreg
Copy link
Contributor

alexreg commented Jun 12, 2019

It's a very weird bug yes, confirmed. For now, just avoid splitting up your associated type bounds like this, but I'll try to get it fixed soon.

@alexreg
Copy link
Contributor

alexreg commented Jun 18, 2019

@KrishnaSannasi Hopefully you can see above a fix PR has been submitted now. It seems to do the job, but will need review then merge...

@Centril Centril added the F-associated_type_bounds `#![feature(associated_type_bounds)]` label Jul 30, 2019
bors added a commit that referenced this issue Aug 7, 2019
Fix for "ambiguous associated type" issue with ATBs

Fixes #61752.

r? @nikomatsakis

CC @Centril
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
A-trait-system Area: Trait system A-type-system Area: Type system C-bug Category: This is a bug. F-associated_type_bounds `#![feature(associated_type_bounds)]` T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants