Skip to content

rustc breaks code by suggestion to remove bounds #104918

Closed
@matthiaskrgr

Description

Given the following code:

#![allow(dead_code)]

// However, bounds *are* taken into account when accessing associated types
trait Bound { type Assoc; }
type T1<U: Bound> = U::Assoc; //~ WARN not enforced in type aliases
type T2<U> where U: Bound = U::Assoc;  //~ WARN not enforced in type aliases

fn main() {}

The current output is:

warning: bounds on generic parameters are not enforced in type aliases
 --> src/main.rs:5:12
  |
5 | type T1<U: Bound> = U::Assoc; //~ WARN not enforced in type aliases
  |            ^^^^^
  |
help: use fully disambiguated paths (i.e., `<T as Trait>::Assoc`) to refer to associated types in type aliases
 --> src/main.rs:5:21
  |
5 | type T1<U: Bound> = U::Assoc; //~ WARN not enforced in type aliases
  |                     ^^^^^^^^
  = note: `#[warn(type_alias_bounds)]` on by default
help: the bound will not be checked when the type alias is used, and should be removed
  |
5 - type T1<U: Bound> = U::Assoc; //~ WARN not enforced in type aliases
5 + type T1<U> = U::Assoc; //~ WARN not enforced in type aliases
  |

warning: where clauses are not enforced in type aliases
 --> src/main.rs:6:18
  |
6 | type T2<U> where U: Bound = U::Assoc;  //~ WARN not enforced in type aliases
  |                  ^^^^^^^^
  |
help: use fully disambiguated paths (i.e., `<T as Trait>::Assoc`) to refer to associated types in type aliases
 --> src/main.rs:6:29
  |
6 | type T2<U> where U: Bound = U::Assoc;  //~ WARN not enforced in type aliases
  |                             ^^^^^^^^
help: the clause will not be checked when the type alias is used, and should be removed
  |
6 - type T2<U> where U: Bound = U::Assoc;  //~ WARN not enforced in type aliases
6 + type T2<U>  = U::Assoc;  //~ WARN not enforced in type aliases
  |

If I apply this via cargo fix, the code no longer compilers 🙃

after fixes were automatically applied the compiler reported errors within these files:

  * src/main.rs

This likely indicates a bug in either rustc or cargo itself,
and we would appreciate a bug report! You're likely to see
a number of compiler warnings after this message which cargo
attempted to fix but failed. If you could open an issue at
https://github.com/rust-lang/rust/issues
quoting the full output of this command we'd be very appreciative!
Note that you may be able to make some more progress in the near-term
fixing code with the `--broken-code` flag

The following errors were reported:
error[E0220]: associated type `Assoc` not found for `U`
 --> src/main.rs:5:17
  |
5 | type T1<U> = U::Assoc; //~ WARN not enforced in type aliases
  |                 ^^^^^ there is a similarly named associated type `Assoc` in the trait `Bound`

error[E0220]: associated type `Assoc` not found for `U`
 --> src/main.rs:6:18
  |
6 | type T2<U>  = U::Assoc;  //~ WARN not enforced in type aliases
  |                  ^^^^^ there is a similarly named associated type `Assoc` in the trait `Bound`

error: aborting due to 2 previous errors

Metadata

Assignees

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsA-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.D-invalid-suggestionDiagnostics: A structured suggestion resulting in incorrect code.L-type_alias_boundsLint: type_alias_boundsT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions