rust-lang / rust-lang/rust

ICE: OutputTypeParameterMismatch

Open
#117,951 16 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug E-needs-bisection I-ICE S-needs-repro T-compiler
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

Meta

We have a weekly CI job with a build matrix of Rust versions

  • 1.65.0
  • stable
  • beta
  • nightly

The last passing build was 2023-10-24. The following is a chronology.


2023-10-24
All rust versions PASS ✅

'1.65.0-x86_64-unknown-linux-gnu'
latest update on 2022-11-03, rust version 1.65.0 (897e37553 2022-11-02)

'stable-x86_64-unknown-linux-gnu'
latest update on 2023-10-05, rust version 1.73.0 (cc66ad468 2023-10-03)

'beta-x86_64-unknown-linux-gnu'
latest update on 2023-10-21, rust version 1.74.0-beta.4 (489647f98 2023-10-21)

'nightly-x86_64-unknown-linux-gnu'
latest update on 2023-10-24, rust version 1.75.0-nightly (cd674d617 2023-10-24)


2023-10-31

PASS for 1.65.0, stable, and beta ✅

'nightly-x86_64-unknown-linux-gnu'
(exact version already GC’ed from CI systems but, reproduced with 2023-10-30 nightly)
FAIL ❌


2023-11-07

PASS for 1.65.0 and stable ✅

'beta-x86_64-unknown-linux-gnu'
latest update on 2023-10-21, rust version 1.74.0-beta.4 (489647f98 2023-10-21)
PASS ✅

'nightly-x86_64-unknown-linux-gnu'
latest update on 2023-11-07, rust version 1.75.0-nightly (189d6c71f 2023-11-06)
FAIL ❌


2023-11-14

PASS for 1.65.0 and stable ✅

'nightly-x86_64-unknown-linux-gnu'
latest update on 2023-11-14, rust version 1.76.0-nightly (ba7c7a301 2023-11-13)
PASS ✅

'beta-x86_64-unknown-linux-gnu'
latest update on 2023-11-13, rust version 1.75.0-beta.1 (782883f60 2023-11-12)
FAIL ❌


Summary:

  • 1.75.0-nightly did succeed on 2023-10-24
  • 1.75.0-nightly was first observed to fail on 2023-10-31
  • 1.76.0-nightly now succeeds (2023-11-14)
  • 1.75.0-beta.1 was first observed to fail on 2023-11-14
Error output
Backtrace

error: internal compiler error: compiler/rustc_traits/src/codegen.rs:43:13: Encountered error `
    OutputTypeParameterMismatch(
      SelectionOutputTypeParameterMismatch {
        found_trait_ref: Binder { value: <fn(<round_digest::RoundDigestTag<<Dps as mpc_signing::protocols::cggmp21::DpsProtocol>::SendAllReport2> as mpc_signing::utils::VerifyDeserialize>::VerifyError) -> ds::VerifyError<Dps, Ds> {ds::VerifyError::<Dps, Ds>::Round2} as std::ops::FnOnce<(<round_digest::RoundDigestTag<<Dps as mpc_signing::protocols::cggmp21::DpsProtocol>::SendAllReport2> as mpc_signing::utils::VerifyDeserialize>::VerifyError,)>>, bound_vars: [] },
        expected_trait_ref: Binder { value: <fn(<round_digest::RoundDigestTag<<Dps as mpc_signing::protocols::cggmp21::DpsProtocol>::SendAllReport2> as mpc_signing::utils::VerifyDeserialize>::VerifyError) -> ds::VerifyError<Dps, Ds> {ds::VerifyError::<Dps, Ds>::Round2} as std::ops::FnOnce<(round_digest::VerifyError<<<Dps as mpc_signing::protocols::cggmp21::DpsProtocol>::SendAllReport2 as mpc_signing::utils::VerifyDeserialize>::VerifyError>,)>>, bound_vars: [] },
        terr: Sorts(ExpectedFound {
          expected: round_digest::VerifyError<Alias(Projection, AliasTy { args: [Alias(Projection, AliasTy { args: [Dps/#0], def_id: DefId(22:4767 ~ mpc_signing[4ddb]::protocols::cggmp21::dps_protocol::traits::DpsProtocol::SendAllReport2) })], def_id: DefId(22:3108 ~ mpc_signing[4ddb]::utils::zkp_stream::VerifyDeserialize::VerifyError) })>,
          found: Alias(Projection, AliasTy { args: [round_digest::RoundDigestTag<Alias(Projection, AliasTy { args: [Dps/#0], def_id: DefId(22:4767 ~ mpc_signing[4ddb]::protocols::cggmp21::dps_protocol::traits::DpsProtocol::SendAllReport2) })>], def_id: DefId(22:3108 ~ mpc_signing[4ddb]::utils::zkp_stream::VerifyDeserialize::VerifyError) }) }) }
    )` selecting `
      <fn(<round_digest::RoundDigestTag<<Dps as mpc_signing::protocols::cggmp21::DpsProtocol>::SendAllReport2> as mpc_signing::utils::VerifyDeserialize>::VerifyError)
        -> ds::VerifyError<Dps, Ds> {ds::VerifyError::<Dps, Ds>::Round2} as std::ops::FnOnce<(round_digest::VerifyError<<<Dps as mpc_signing::protocols::cggmp21::DpsProtocol>::SendAllReport2 as mpc_signing::utils::VerifyDeserialize>::VerifyError>,)>>
  ` during codegen

Capture of Nightly failure (2023-10-31) ❌
rustc-ice-2023-10-31T16_49_05-19815.txt

Capture of Beta failure (2023-11-15) ❌
rustc-ice-2023-11-15.txt

Code

From 2023-10-24 to today the source code has not changed. The code is not public, but could potentially be shared. Unfortunately, the code is complex due to the use of a declarative macro, so we do not currently have a minimization.

We would welcome some hints/suggestions about what code/context we could capture to improve this issue.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at compiler/rustc_traits/src/codegen.rs:43:13 and review the attached nightly and beta ICE captures. Reproduce the failure with the reported Rust versions, then work toward a minimized example from the unavailable declarative-macro source. Done means a reproducible minimized case or enough context to identify the compiler regression.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.