Skip to content

Type annotations needed error on definition site #84398

Closed

Description

@vorner

Hello

After upgrading nightly rustc, I'm getting a lot of type inference errors on code that was compiling fine previously. Moreover, these are not at the call site, but at the definition site, so there doesn't seem to be any place to put any type annotations, like this:

    --> src/spirit.rs:996:1
     |
996  | / impl<O, C> SpiritBuilder for Builder<O, C>
997  | | where
998  | |     Self::Config: DeserializeOwned + Send + Sync + 'static,
999  | |     Self::Opts: StructOpt + Sync + Send + 'static,
...    |
1108 | |     }
1109 | | }
     | |_^ cannot infer type for type parameter `C`

It spills more kinds of errors that make little sense, but I have the impression these will have a common cause:

error[E0277]: `C` cannot be shared between threads safely
   --> src/spirit.rs:998:45
    |
998 |     Self::Config: DeserializeOwned + Send + Sync + 'static,
    |                                             ^^^^ `C` cannot be shared between threads safely

The problematic code is both released on crates.io (crate spirit, version 0.4.16, but I expect that to be happening through most of the history of the crate), and in master (vorner/spirit@1495c1c).

I think this is a regression, as it was compiling previously.

It compiles fine with older nightly (and stable is fine way back, this particular code is looking mostly the same for some 2 years or more):

rustc 1.53.0-nightly (07e0e2ec2 2021-03-24)

Breaks with

rustc 1.53.0-nightly (6df26f897 2021-04-20)
binary: rustc
commit-hash: 6df26f897cffb2d86880544bb451c6b5f8509b2d
commit-date: 2021-04-20
host: x86_64-unknown-linux-gnu
release: 1.53.0-nightly
LLVM version: 12.0.0

(Unfortunately, I haven't been keeping fully up to date recently, so I don't have a smaller range).

Activity

  1. added
    I-prioritizeIssue needs a team member to assess the impact. Will be replaced by P-{low,medium,high,critical}
    on Apr 21, 2021
  2. added
    T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
    on Apr 21, 2021
  3. hameerabbasi commented on Apr 21, 2021

    @hameerabbasi
    Contributor

    Bisected:

    searched nightlies: from nightly-2021-01-01 to nightly-2021-04-20
    regressed nightly: nightly-2021-04-01
    searched commits: from 74874a6 to 4fdac23
    regressed commit: 4fdac23

    bisected with cargo-bisect-rustc v0.6.0

    Host triple: x86_64-unknown-linux-gnu
    Reproduce with:

    cargo bisect-rustc --test-dir=. --start=2021-01-01

    Regressed PR is #76814, cc @jackh726.

  4. jackh726 commented on Apr 21, 2021

    @jackh726
    Member

    An MCVE would be extremely helpful here.

  5. added
    E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example
    on Apr 21, 2021
  6. hameerabbasi commented on Apr 21, 2021

    @hameerabbasi
    Contributor

    @rustbot ping icebreakers-cleanup-crew

    I've tried without success to reduce this, it's buried in layers of crates. Maybe one of you will have better luck.

  7. rustbot commented on Apr 21, 2021

    @rustbot
    Collaborator
  8. SNCPlay42 commented on Apr 22, 2021

    @SNCPlay42
    Contributor

    Reduced:

    pub trait Deserialize<'de>: Sized {}
    pub trait DeserializeOwned: for<'de> Deserialize<'de> {}
    
    pub trait Extensible {
        type Config;
    }
    
    pub trait Installer<C> {
        fn init<B: Extensible<Config = C>>(&mut self) -> ()
        where
            B::Config: DeserializeOwned,
        {
        }
    }
  9. removed
    E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example
    on Apr 22, 2021
  10. apiraino commented on Apr 22, 2021

    @apiraino
    Contributor

    Assigning priority as discussed as part of the Prioritization Working Group and removing I-prioritize.

    @rustbot label -I-prioritize +P-high

  11. added
    P-highHigh priority
    and removed
    I-prioritizeIssue needs a team member to assess the impact. Will be replaced by P-{low,medium,high,critical}
    on Apr 22, 2021
  12. b-naber commented on Apr 23, 2021

    @b-naber
    Contributor

    I can try to look into this over the weekend.

  13. jackh726 commented on Apr 23, 2021

    @jackh726
    Member

    So, a bit of info: We end up trying to prove C: Sized. We end up with two candidates:

    ParamCandidate(ConstnessAnd { constness: NotConst, value: Binder(<C as std::marker::Sized>, [Region(BrNamed(DefId(0:6 ~ issue_84398[317d]::DeserializeOwned::'de), 'de))]) })
    

    and

    ParamCandidate(ConstnessAnd { constness: NotConst, value: Binder(<C as std::marker::Sized>, []) })
    

    that both evaluate to okay. This is ambiguous and WF checking fails.

  14. added and removed on May 4, 2021
  15. added this to the 1.53.0 milestone on May 4, 2021
  16. emilyalbini commented on May 4, 2021

    @emilyalbini
    Member

    This regression now slipped into beta 1.53.0.

  17. added a commit that references this issue on May 6, 2021
    377d1a9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.P-highHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-betaPerformance or correctness regression from stable to beta.

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions