Rollup merge of #69936 - Aaron1011:fix/suggestion-cycle, r=varkor
Fix cycle error when emitting suggestion for mismatched `fn` type Fixes #66667 Previously, we called `tcx.typeck_tables_of` when determining whether or not to emit a suggestion for a type error. However, we might already be type-checking the `DefId` we pass to `typeck_tables_of` (it could be anywhere in the query stack). Fortunately, we only need the function signature, not the entire `TypeckTables`. By using `tcx.fn_sig`, we avoid the possibility of cycle errors while retaining the ability to emit a suggestion.
This commit is contained in:
commit
f635c3757b
3 changed files with 75 additions and 22 deletions
16
src/test/ui/issues/issue-66667-function-cmp-cycle.rs
Normal file
16
src/test/ui/issues/issue-66667-function-cmp-cycle.rs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
fn first() {
|
||||
second == 1 //~ ERROR binary operation
|
||||
//~^ ERROR mismatched types
|
||||
}
|
||||
|
||||
fn second() {
|
||||
first == 1 //~ ERROR binary operation
|
||||
//~^ ERROR mismatched types
|
||||
}
|
||||
|
||||
fn bar() {
|
||||
bar == 1 //~ ERROR binary operation
|
||||
//~^ ERROR mismatched types
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
55
src/test/ui/issues/issue-66667-function-cmp-cycle.stderr
Normal file
55
src/test/ui/issues/issue-66667-function-cmp-cycle.stderr
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
error[E0369]: binary operation `==` cannot be applied to type `fn() {second}`
|
||||
--> $DIR/issue-66667-function-cmp-cycle.rs:2:12
|
||||
|
|
||||
LL | second == 1
|
||||
| ------ ^^ - {integer}
|
||||
| |
|
||||
| fn() {second}
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-66667-function-cmp-cycle.rs:2:15
|
||||
|
|
||||
LL | second == 1
|
||||
| ^ expected fn item, found integer
|
||||
|
|
||||
= note: expected fn item `fn() {second}`
|
||||
found type `{integer}`
|
||||
|
||||
error[E0369]: binary operation `==` cannot be applied to type `fn() {first}`
|
||||
--> $DIR/issue-66667-function-cmp-cycle.rs:7:11
|
||||
|
|
||||
LL | first == 1
|
||||
| ----- ^^ - {integer}
|
||||
| |
|
||||
| fn() {first}
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-66667-function-cmp-cycle.rs:7:14
|
||||
|
|
||||
LL | first == 1
|
||||
| ^ expected fn item, found integer
|
||||
|
|
||||
= note: expected fn item `fn() {first}`
|
||||
found type `{integer}`
|
||||
|
||||
error[E0369]: binary operation `==` cannot be applied to type `fn() {bar}`
|
||||
--> $DIR/issue-66667-function-cmp-cycle.rs:12:9
|
||||
|
|
||||
LL | bar == 1
|
||||
| --- ^^ - {integer}
|
||||
| |
|
||||
| fn() {bar}
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-66667-function-cmp-cycle.rs:12:12
|
||||
|
|
||||
LL | bar == 1
|
||||
| ^ expected fn item, found integer
|
||||
|
|
||||
= note: expected fn item `fn() {bar}`
|
||||
found type `{integer}`
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0308, E0369.
|
||||
For more information about an error, try `rustc --explain E0308`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue