]> git.lizzy.rs Git - rust.git/blob - src/test/ui/impl-trait/dyn-trait-return-should-be-impl-trait.rs
Rollup merge of #98441 - calebzulawski:simd_as, r=oli-obk
[rust.git] / src / test / ui / impl-trait / dyn-trait-return-should-be-impl-trait.rs
1 #![allow(bare_trait_objects)]
2 struct Struct;
3 trait Trait {}
4 impl Trait for Struct {}
5 impl Trait for u32 {}
6
7 fn fuz() -> (usize, Trait) { (42, Struct) }
8 //~^ ERROR E0277
9 //~| ERROR E0308
10 fn bar() -> (usize, dyn Trait) { (42, Struct) }
11 //~^ ERROR E0277
12 //~| ERROR E0308
13 fn bap() -> Trait { Struct }
14 //~^ ERROR E0746
15 fn ban() -> dyn Trait { Struct }
16 //~^ ERROR E0746
17 fn bak() -> dyn Trait { unimplemented!() } //~ ERROR E0746
18 // Suggest using `Box<dyn Trait>`
19 fn bal() -> dyn Trait { //~ ERROR E0746
20     if true {
21         return Struct;
22     }
23     42
24 }
25 fn bax() -> dyn Trait { //~ ERROR E0746
26     if true {
27         Struct
28     } else {
29         42 //~ ERROR `if` and `else` have incompatible types
30     }
31 }
32 fn bam() -> Box<dyn Trait> {
33     if true {
34         return Struct; //~ ERROR mismatched types
35     }
36     42 //~ ERROR mismatched types
37 }
38 fn baq() -> Box<dyn Trait> {
39     if true {
40         return 0; //~ ERROR mismatched types
41     }
42     42 //~ ERROR mismatched types
43 }
44 fn baz() -> Box<dyn Trait> {
45     if true {
46         Struct //~ ERROR mismatched types
47     } else {
48         42 //~ ERROR mismatched types
49     }
50 }
51 fn baw() -> Box<dyn Trait> {
52     if true {
53         0 //~ ERROR mismatched types
54     } else {
55         42 //~ ERROR mismatched types
56     }
57 }
58
59 // Suggest using `impl Trait`
60 fn bat() -> dyn Trait { //~ ERROR E0746
61     if true {
62         return 0;
63     }
64     42
65 }
66 fn bay() -> dyn Trait { //~ ERROR E0746
67     if true {
68         0
69     } else {
70         42
71     }
72 }
73
74 fn main() {}