Skip to content

Conversation

jder
Copy link
Contributor

@jder jder commented Sep 18, 2024

Fixes #130400. This was a debug assert added to some argument error reporting code in #129320 which verified that the number of params (from the HIR) matched the matched_inputs which ultimately come from ty::FnSig. In the reduced test case:

fn foo(&mut self) -> _ {
    foo()
}

There is a circular dependency computing the ty::FnSig -- when trying to compute it, we try to figure out the return value, which again depends on this ty::FnSig. In #105162, this was supported by short-circuiting the cycle by synthesizing a FnSig with error types for parameters. The code in question computes the number of parameters by taking the number of parameters from the hir::FnDecl and adding 1 if there is an implicit self parameter.

I might be missing a subtlety here, but AFAICT the adjustment for implicit self args is unnecessary and results in one too many args. For example, for this non-errorful code:

trait Foo { 
    fn bar(&self) {}
}

The resulting hir::FnDecl and ty::FnSig both have the same number of inputs -- 1. So, this PR removes that adjustment and adds a test for the debug ICE.

r? @compiler-errors

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Sep 18, 2024
@compiler-errors
Copy link
Member

I'll approve it when CI is green 👍

@compiler-errors
Copy link
Member

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Sep 18, 2024

📌 Commit 3cb1f33 has been approved by compiler-errors

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 18, 2024
bors added a commit to rust-lang-ci/rust that referenced this pull request Sep 18, 2024
…iaskrgr

Rollup of 4 pull requests

Successful merges:

 - rust-lang#130116 (Implement a Method to Seal `DiagInner`'s Suggestions)
 - rust-lang#130489 (Ensure that `keyword_ident` lint doesn't trigger on `'r#kw` lifetime)
 - rust-lang#130491 (more crash tests)
 - rust-lang#130496 (Fix circular fn_sig queries to correct number of args for methods)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit c52d58d into rust-lang:master Sep 18, 2024
6 checks passed
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Sep 18, 2024
Rollup merge of rust-lang#130496 - jder:issue-130400, r=compiler-errors

Fix circular fn_sig queries to correct number of args for methods

Fixes rust-lang#130400. This was a [debug assert](https://github.com/rust-lang/rust/blob/28e8f01c2a2f33fb4214925a704e3223b372cad5/compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs#L2557) added to some argument error reporting code in rust-lang#129320 which verified that the number of params (from the HIR) matched the `matched_inputs` which ultimately come from ty::FnSig. In the reduced test case:

```
fn foo(&mut self) -> _ {
    foo()
}
```

There is a circular dependency computing the ty::FnSig -- when trying to compute it, we try to figure out the return value, which again depends on this ty::FnSig. In rust-lang#105162, this was supported by short-circuiting the cycle by synthesizing a FnSig with error types for parameters. The [code in question](https://github.com/rust-lang/rust/pull/105162/files#diff-a65feec6bfffb19fbdc60a80becd1030c82a56c16b177182cd277478fdb04592R44) computes the number of parameters by taking the number of parameters from the hir::FnDecl and adding 1 if there is an implicit self parameter.

I might be missing a subtlety here, but AFAICT the adjustment for implicit self args is unnecessary and results in one too many args. For example, for this non-errorful code:

```
trait Foo {
    fn bar(&self) {}
}
```

The resulting hir::FnDecl and ty::FnSig both have the same number of inputs -- 1. So, this PR removes that adjustment and adds a test for the debug ICE.

r? `@compiler-errors`
@rustbot rustbot added this to the 1.83.0 milestone Sep 18, 2024
@jder jder deleted the issue-130400 branch September 18, 2024 12:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ICE: assertion failed compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs:2557:13: 1 == 2/ params_with_generics.len(), matched_inputs.len()
4 participants