about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-06-04 04:48:19 +0200
committerGitHub <noreply@github.com>2019-06-04 04:48:19 +0200
commit28ce2b1fdb53562ab3ed4e3b1f6b62a57c68f3e9 (patch)
treefcdc0040ae0f4ccccc7a99c84346b1140c731bcf
parent1ae4727f3f41dd8e1c18e4e3a43ba2f1a23145a6 (diff)
parenteb73b73b8d50b29658d87670670d939746b2d00c (diff)
downloadrust-28ce2b1fdb53562ab3ed4e3b1f6b62a57c68f3e9.tar.gz
rust-28ce2b1fdb53562ab3ed4e3b1f6b62a57c68f3e9.zip
Rollup merge of #61444 - estebank:const-pt-as-ref, r=matthewjasper
Suggest using `as_ref` on `*const T`

Fix #21596.
-rw-r--r--src/librustc_typeck/check/method/suggest.rs5
-rw-r--r--src/test/ui/issues/issue-21596.rs5
-rw-r--r--src/test/ui/issues/issue-21596.stderr13
3 files changed, 23 insertions, 0 deletions
diff --git a/src/librustc_typeck/check/method/suggest.rs b/src/librustc_typeck/check/method/suggest.rs
index 9ef6112a945..f05e0d31582 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 00000000000..79f6c91d9ac
--- /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 00000000000..07d29f30e98
--- /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`.