- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
Closed
Labels
C-bugCategory: This is a bug.Category: This is a bug.P-criticalCritical priorityCritical priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.Performance or correctness regression from stable to nightly.
Description
Code
I tried this code:
pub trait FieldElement {
    type Integer: TryFrom<usize, Error = std::num::TryFromIntError>;
    fn valid_integer_try_from<N>(i: N) -> Result<Self::Integer, ()>
    where
        Self::Integer: TryFrom<N>,
    {
        Self::Integer::try_from(i).map_err(|_| ())
    }
}I expected to see this happen: Successful compilation.
Instead, this happened: I now get the following compiler error.
error[E0308]: mismatched types
   --> src/lib.rs:8:33
    |
4   |     fn valid_integer_try_from<N>(i: N) -> Result<Self::Integer, ()>
    |                               - this type parameter
...
8   |         Self::Integer::try_from(i).map_err(|_| ())
    |         ----------------------- ^ expected `usize`, found type parameter `N`
    |         |
    |         arguments to this function are incorrect
    |
    = note:        expected type `usize`
            found type parameter `N`
note: associated function defined here
   --> /home/david/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/convert/mod.rs:478:8
    |
478 |     fn try_from(value: T) -> Result<Self, Self::Error>;
    |        ^^^^^^^^
For more information about this error, try `rustc --explain E0308`.
error: could not compile `nightly-prio-regression` due to previous error
Version it worked on
It most recently worked on: stable channel Rust 1.63.0, and nightly-2022-08-17.
Version with regression
searched nightlies: from nightly-2022-08-11 to nightly-2022-08-26
regressed nightly: nightly-2022-08-18
searched commit range: 86c6ebe...9c20b2a
regressed commit: 9c20b2a
bisected with cargo-bisect-rustc v0.6.4
Host triple: x86_64-unknown-linux-gnu
Reproduce with:
cargo bisect-rustc @rustbot modify labels: +regression-from-stable-to-nightly -regression-untriaged
While reducing this example, I noticed that the following changes to the code will make the error go away:
- Replacing the function call with N::try_into(i)
- Deleting the specification of Errorin the associated type's trait bound
- Adding the same Errorspecification in the where clause's trait bound
Metadata
Metadata
Assignees
Labels
C-bugCategory: This is a bug.Category: This is a bug.P-criticalCritical priorityCritical priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.Performance or correctness regression from stable to nightly.