about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2022-05-06 07:15:35 +0900
committerYuki Okushi <jtitor@2k36.org>2022-05-06 07:15:35 +0900
commit436c0e129ca535d249fbf8d61d3b9334e5cd6767 (patch)
tree6118c9a264cc0f64455ba16713721174b046f90c
parent30f386087564243ab88a93c984c265290a31580b (diff)
downloadrust-436c0e129ca535d249fbf8d61d3b9334e5cd6767.tar.gz
rust-436c0e129ca535d249fbf8d61d3b9334e5cd6767.zip
Fix an ICE on #96738
-rw-r--r--compiler/rustc_typeck/src/check/method/suggest.rs3
-rw-r--r--src/test/ui/typeck/issue-96738.rs3
-rw-r--r--src/test/ui/typeck/issue-96738.stderr11
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`.