From eb73b73b8d50b29658d87670670d939746b2d00c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sat, 1 Jun 2019 16:24:19 -0700 Subject: [PATCH] Suggest using `as_ref` on `*const T` --- src/librustc_typeck/check/method/suggest.rs | 5 +++++ src/test/ui/issues/issue-21596.rs | 5 +++++ src/test/ui/issues/issue-21596.stderr | 13 +++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 src/test/ui/issues/issue-21596.rs create mode 100644 src/test/ui/issues/issue-21596.stderr diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs index 9ef6112a94591..f05e0d31582fa 100644 --- a/src/librustc_typeck/check/method/suggest.rs +++ b/src/librustc_typeck/check/method/suggest.rs @@ -324,6 +324,11 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { ); } } + if let ty::RawPtr(_) = &actual.sty { + err.note("try using `<*const T>::as_ref()` to get a reference to the \ + type behind the pointer: https://doc.rust-lang.org/std/\ + primitive.pointer.html#method.as_ref"); + } err } } else { diff --git a/src/test/ui/issues/issue-21596.rs b/src/test/ui/issues/issue-21596.rs new file mode 100644 index 0000000000000..79f6c91d9ac97 --- /dev/null +++ b/src/test/ui/issues/issue-21596.rs @@ -0,0 +1,5 @@ +fn main() { + let x = 8u8; + let z: *const u8 = &x; + println!("{}", z.to_string()); //~ ERROR E0599 +} diff --git a/src/test/ui/issues/issue-21596.stderr b/src/test/ui/issues/issue-21596.stderr new file mode 100644 index 0000000000000..07d29f30e988a --- /dev/null +++ b/src/test/ui/issues/issue-21596.stderr @@ -0,0 +1,13 @@ +error[E0599]: no method named `to_string` found for type `*const u8` in the current scope + --> $DIR/issue-21596.rs:4:22 + | +LL | println!("{}", z.to_string()); + | ^^^^^^^^^ + | + = note: try using `<*const T>::as_ref()` to get a reference to the type behind the pointer: https://doc.rust-lang.org/std/primitive.pointer.html#method.as_ref + = note: the method `to_string` exists but the following trait bounds were not satisfied: + `*const u8 : std::string::ToString` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0599`.