about summary refs log tree commit diff
path: root/src/test/ui
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2017-09-23 13:13:15 +0000
committerbors <bors@rust-lang.org>2017-09-23 13:13:15 +0000
commita83c3e777145bd2fd127857b3b73d5a174e1f2dd (patch)
tree74ae3aef3453e74f6c4aacd778241172798bdec4 /src/test/ui
parent7f8aef94cd260a0b131107671bd80ea9621c9832 (diff)
parent21d4ba2ea66ee297e556af9b1e4e96130e2e1bcf (diff)
downloadrust-a83c3e777145bd2fd127857b3b73d5a174e1f2dd.tar.gz
rust-a83c3e777145bd2fd127857b3b73d5a174e1f2dd.zip
Auto merge of #43870 - GuillaumeGomez:deref-suggestion, r=nikomatsakis
Add deref suggestion

Fixes #34562.
Diffstat (limited to 'src/test/ui')
-rw-r--r--src/test/ui/deref-suggestion.rs34
-rw-r--r--src/test/ui/deref-suggestion.stderr59
2 files changed, 93 insertions, 0 deletions
diff --git a/src/test/ui/deref-suggestion.rs b/src/test/ui/deref-suggestion.rs
new file mode 100644
index 00000000000..16d8226bfec
--- /dev/null
+++ b/src/test/ui/deref-suggestion.rs
@@ -0,0 +1,34 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+macro_rules! borrow {
+    ($x:expr) => { &$x }
+}
+
+fn foo(_: String) {}
+
+fn foo2(s: &String) {
+    foo(s);
+}
+
+fn foo3(_: u32) {}
+fn foo4(u: &u32) {
+    foo3(u);
+}
+
+fn main() {
+    let s = String::new();
+    let r_s = &s;
+    foo2(r_s);
+    foo(&"aaa".to_owned());
+    foo(&mut "aaa".to_owned());
+    foo3(borrow!(0));
+    foo4(&0);
+}
diff --git a/src/test/ui/deref-suggestion.stderr b/src/test/ui/deref-suggestion.stderr
new file mode 100644
index 00000000000..5ad9c19fa8c
--- /dev/null
+++ b/src/test/ui/deref-suggestion.stderr
@@ -0,0 +1,59 @@
+error[E0308]: mismatched types
+  --> $DIR/deref-suggestion.rs:18:9
+   |
+18 |     foo(s);
+   |         ^ expected struct `std::string::String`, found reference
+   |
+   = note: expected type `std::string::String`
+              found type `&std::string::String`
+   = help: here are some functions which might fulfill your needs:
+           - .escape_debug()
+           - .escape_default()
+           - .escape_unicode()
+           - .to_lowercase()
+           - .to_uppercase()
+
+error[E0308]: mismatched types
+  --> $DIR/deref-suggestion.rs:23:10
+   |
+23 |     foo3(u);
+   |          ^ expected u32, found &u32
+   |
+   = note: expected type `u32`
+              found type `&u32`
+   = help: try with `*u`
+
+error[E0308]: mismatched types
+  --> $DIR/deref-suggestion.rs:30:9
+   |
+30 |     foo(&"aaa".to_owned());
+   |         ^^^^^^^^^^^^^^^^^ expected struct `std::string::String`, found reference
+   |
+   = note: expected type `std::string::String`
+              found type `&std::string::String`
+   = help: try with `"aaa".to_owned()`
+
+error[E0308]: mismatched types
+  --> $DIR/deref-suggestion.rs:31:9
+   |
+31 |     foo(&mut "aaa".to_owned());
+   |         ^^^^^^^^^^^^^^^^^^^^^ expected struct `std::string::String`, found mutable reference
+   |
+   = note: expected type `std::string::String`
+              found type `&mut std::string::String`
+   = help: try with `"aaa".to_owned()`
+
+error[E0308]: mismatched types
+  --> $DIR/deref-suggestion.rs:12:20
+   |
+12 |     ($x:expr) => { &$x }
+   |                    ^^^ expected u32, found &{integer}
+...
+32 |     foo3(borrow!(0));
+   |          ---------- in this macro invocation
+   |
+   = note: expected type `u32`
+              found type `&{integer}`
+
+error: aborting due to 5 previous errors
+