Skip to content

Commit

Permalink
Rollup merge of rust-lang#114461 - sebastiantoh:issue-114423, r=estebank
Browse files Browse the repository at this point in the history
Fix unwrap on None

Fixes rust-lang#114423

r? `@estebank`
  • Loading branch information
matthiaskrgr committed Aug 4, 2023
2 parents 073e4af + 97aa4ba commit 65fc356
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 2 deletions.
3 changes: 1 addition & 2 deletions compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1620,8 +1620,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
.iter()
.enumerate()
.filter(|x| x.1.hir_id == *hir_id)
.map(|(i, _)| init_tup.get(i).unwrap())
.next()
.find_map(|(i, _)| init_tup.get(i))
{
self.note_type_is_not_clone_inner_expr(init)
} else {
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/typeck/issue-114423.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
struct RGB {
g: f64,
b: f64,
}

fn main() {
let (r, alone_in_path, b): (f32, f32, f32) = (e.clone(), e.clone());
//~^ ERROR cannot find value `e` in this scope
//~| ERROR cannot find value `e` in this scope
//~| ERROR mismatched types
let _ = RGB { r, g, b };
//~^ ERROR cannot find value `g` in this scope
//~| ERROR struct `RGB` has no field named `r`
//~| ERROR mismatched types
}
52 changes: 52 additions & 0 deletions tests/ui/typeck/issue-114423.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
error[E0425]: cannot find value `e` in this scope
--> $DIR/issue-114423.rs:7:51
|
LL | let (r, alone_in_path, b): (f32, f32, f32) = (e.clone(), e.clone());
| ^ not found in this scope

error[E0425]: cannot find value `e` in this scope
--> $DIR/issue-114423.rs:7:62
|
LL | let (r, alone_in_path, b): (f32, f32, f32) = (e.clone(), e.clone());
| ^ not found in this scope

error[E0425]: cannot find value `g` in this scope
--> $DIR/issue-114423.rs:11:22
|
LL | let _ = RGB { r, g, b };
| ^ help: a local variable with a similar name exists: `b`

error[E0308]: mismatched types
--> $DIR/issue-114423.rs:7:50
|
LL | let (r, alone_in_path, b): (f32, f32, f32) = (e.clone(), e.clone());
| --------------- ^^^^^^^^^^^^^^^^^^^^^^ expected a tuple with 3 elements, found one with 2 elements
| |
| expected due to this
|
= note: expected tuple `(f32, f32, f32)`
found tuple `(f32, f32)`

error[E0560]: struct `RGB` has no field named `r`
--> $DIR/issue-114423.rs:11:19
|
LL | let _ = RGB { r, g, b };
| ^ `RGB` does not have this field
|
= note: all struct fields are already assigned

error[E0308]: mismatched types
--> $DIR/issue-114423.rs:11:25
|
LL | let _ = RGB { r, g, b };
| ^ expected `f64`, found `f32`
|
help: you can convert an `f32` to an `f64`
|
LL | let _ = RGB { r, g, b: b.into() };
| ++ +++++++

error: aborting due to 6 previous errors

Some errors have detailed explanations: E0308, E0425, E0560.
For more information about an error, try `rustc --explain E0308`.

0 comments on commit 65fc356

Please sign in to comment.