]> git.lizzy.rs Git - rust.git/blob - tests/ui/inference/deref-suggestion.rs
Auto merge of #106827 - alexcrichton:update-llvm-to-15.0.7, r=cuviper
[rust.git] / tests / ui / inference / deref-suggestion.rs
1 macro_rules! borrow {
2     ($x:expr) => { &$x }
3 }
4
5 fn foo(_: String) {}
6
7 fn foo2(s: &String) {
8     foo(s);
9     //~^ ERROR mismatched types
10 }
11
12 fn foo3(_: u32) {}
13 fn foo4(u: &u32) {
14     foo3(u);
15     //~^ ERROR mismatched types
16 }
17
18 struct S<'a> {
19     u: &'a u32,
20 }
21
22 struct R {
23     i: u32,
24 }
25
26 fn main() {
27     let s = String::new();
28     let r_s = &s;
29     foo2(r_s);
30     foo(&"aaa".to_owned());
31     //~^ ERROR mismatched types
32     foo(&mut "aaa".to_owned());
33     //~^ ERROR mismatched types
34     foo3(borrow!(0));
35     //~^ ERROR mismatched types
36     foo4(&0);
37     assert_eq!(3i32, &3i32);
38     //~^ ERROR mismatched types
39     let u = 3;
40     let s = S { u };
41     //~^ ERROR mismatched types
42     let s = S { u: u };
43     //~^ ERROR mismatched types
44     let i = &4;
45     let r = R { i };
46     //~^ ERROR mismatched types
47     let r = R { i: i };
48     //~^ ERROR mismatched types
49
50
51     let a = &1;
52     let b = &2;
53     let val: i32 = if true {
54         a + 1
55     } else {
56         b
57         //~^ ERROR mismatched types
58     };
59     let val: i32 = if true {
60         let _ = 2;
61         a + 1
62     } else {
63         let _ = 2;
64         b
65         //~^ ERROR mismatched types
66     };
67     let val = if true {
68         *a
69     } else if true {
70     //~^ ERROR incompatible types
71         b
72     } else {
73         &0
74     };
75 }