diff options
| author | Yuki Okushi <jtitor@2k36.org> | 2022-05-06 07:15:35 +0900 |
|---|---|---|
| committer | Yuki Okushi <jtitor@2k36.org> | 2022-05-06 07:15:35 +0900 |
| commit | 436c0e129ca535d249fbf8d61d3b9334e5cd6767 (patch) | |
| tree | 6118c9a264cc0f64455ba16713721174b046f90c | |
| parent | 30f386087564243ab88a93c984c265290a31580b (diff) | |
| download | rust-436c0e129ca535d249fbf8d61d3b9334e5cd6767.tar.gz rust-436c0e129ca535d249fbf8d61d3b9334e5cd6767.zip | |
Fix an ICE on #96738
| -rw-r--r-- | compiler/rustc_typeck/src/check/method/suggest.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/typeck/issue-96738.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/typeck/issue-96738.stderr | 11 |
3 files changed, 15 insertions, 2 deletions
diff --git a/compiler/rustc_typeck/src/check/method/suggest.rs b/compiler/rustc_typeck/src/check/method/suggest.rs index 634ba2baf96..f36d2496673 100644 --- a/compiler/rustc_typeck/src/check/method/suggest.rs +++ b/compiler/rustc_typeck/src/check/method/suggest.rs @@ -367,8 +367,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if self.is_fn_ty(rcvr_ty, span) { if let SelfSource::MethodCall(expr) = source { - let suggest = if let ty::FnDef(def_id, _) = rcvr_ty.kind() { - let local_id = def_id.expect_local(); + let suggest = if let ty::FnDef(def_id, _) = rcvr_ty.kind() && let Some(local_id) = def_id.as_local() { let hir_id = tcx.hir().local_def_id_to_hir_id(local_id); let node = tcx.hir().get(hir_id); let fields = node.tuple_fields(); diff --git a/src/test/ui/typeck/issue-96738.rs b/src/test/ui/typeck/issue-96738.rs new file mode 100644 index 00000000000..7f1d1428eb9 --- /dev/null +++ b/src/test/ui/typeck/issue-96738.rs @@ -0,0 +1,3 @@ +fn main() { + Some.nonexistent_method(); //~ ERROR: no method named `nonexistent_method` found +} diff --git a/src/test/ui/typeck/issue-96738.stderr b/src/test/ui/typeck/issue-96738.stderr new file mode 100644 index 00000000000..6f9bffbb790 --- /dev/null +++ b/src/test/ui/typeck/issue-96738.stderr @@ -0,0 +1,11 @@ +error[E0599]: no method named `nonexistent_method` found for fn item `fn(_) -> Option<_> {Option::<_>::Some}` in the current scope + --> $DIR/issue-96738.rs:2:10 + | +LL | Some.nonexistent_method(); + | ---- ^^^^^^^^^^^^^^^^^^ method not found in `fn(_) -> Option<_> {Option::<_>::Some}` + | | + | this is a function, perhaps you wish to call it + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0599`. |
