about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_typeck/src/check/method/suggest.rs1
-rw-r--r--src/test/ui/typeck/issue-89806.rs3
-rw-r--r--src/test/ui/typeck/issue-89806.stderr26
3 files changed, 30 insertions, 0 deletions
diff --git a/compiler/rustc_typeck/src/check/method/suggest.rs b/compiler/rustc_typeck/src/check/method/suggest.rs
index 28b19981c2d..934b83bd700 100644
--- a/compiler/rustc_typeck/src/check/method/suggest.rs
+++ b/compiler/rustc_typeck/src/check/method/suggest.rs
@@ -1251,6 +1251,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                 self.tcx.lang_items().deref_trait(),
                 self.tcx.lang_items().deref_mut_trait(),
                 self.tcx.lang_items().drop_trait(),
+                self.tcx.get_diagnostic_item(sym::AsRef),
             ];
             // Try alternative arbitrary self types that could fulfill this call.
             // FIXME: probe for all types that *could* be arbitrary self-types, not
diff --git a/src/test/ui/typeck/issue-89806.rs b/src/test/ui/typeck/issue-89806.rs
new file mode 100644
index 00000000000..69cec08652a
--- /dev/null
+++ b/src/test/ui/typeck/issue-89806.rs
@@ -0,0 +1,3 @@
+fn main() {
+    0u8.as_ref(); //~ ERROR no method named `as_ref` found for type `u8` in the current scope
+}
diff --git a/src/test/ui/typeck/issue-89806.stderr b/src/test/ui/typeck/issue-89806.stderr
new file mode 100644
index 00000000000..9a54fac5261
--- /dev/null
+++ b/src/test/ui/typeck/issue-89806.stderr
@@ -0,0 +1,26 @@
+error[E0599]: no method named `as_ref` found for type `u8` in the current scope
+  --> $DIR/issue-89806.rs:2:9
+   |
+LL |     0u8.as_ref();
+   |         ^^^^^^ method not found in `u8`
+   |
+  ::: $SRC_DIR/core/src/pin.rs:LL:COL
+   |
+LL |     pub fn as_ref(&self) -> Pin<&P::Target> {
+   |            ------
+   |            |
+   |            the method is available for `Pin<&mut u8>` here
+   |            the method is available for `Pin<&u8>` here
+   |
+help: consider wrapping the receiver expression with the appropriate type
+   |
+LL |     Pin::new(&mut 0u8).as_ref();
+   |     +++++++++++++    +
+help: consider wrapping the receiver expression with the appropriate type
+   |
+LL |     Pin::new(&0u8).as_ref();
+   |     ++++++++++   +
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0599`.