summaryrefslogtreecommitdiffstats
path: root/tests/ui/suggestions/match-with-different-arm-types-as-stmt-instead-of-expr.stderr
blob: 00aa7d18a968c3ecaa7758bc6a0ecab0e2edbe64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
error[E0308]: mismatched types
  --> $DIR/match-with-different-arm-types-as-stmt-instead-of-expr.rs:9:30
   |
LL | fn not_all_paths(a: &str) -> u32 {
   |    -------------             ^^^ expected `u32`, found `()`
   |    |
   |    implicitly returns `()` as its body has no tail or `return` expression
...
LL |     };
   |      - help: remove this semicolon to return this value

error[E0308]: `match` arms have incompatible types
  --> $DIR/match-with-different-arm-types-as-stmt-instead-of-expr.rs:26:14
   |
LL | /     match c {
LL | |         "baz" => Box::new(Baz),
   | |                  ------------- this is found to be of type `Box<Baz>`
LL | |         _ => Box::new(Bar),
   | |              ^^^^^^^^^^^^^ expected struct `Baz`, found struct `Bar`
LL | |     };
   | |_____- `match` arms have incompatible types
   |
   = note: expected struct `Box<Baz>`
              found struct `Box<Bar>`
note: you might have meant to return the `match` expression
  --> $DIR/match-with-different-arm-types-as-stmt-instead-of-expr.rs:27:6
   |
LL |   fn wrong(c: &str) -> Box<dyn Foo> {
   |                        ------------ the `match` arms can conform to this return type
LL | /     match c {
LL | |         "baz" => Box::new(Baz),
LL | |         _ => Box::new(Bar),
LL | |     };
   | |     -^ the `match` is a statement because of this semicolon, consider removing it
   | |_____|
   |       this could be implicitly returned but it is a statement, not a tail expression

error[E0308]: mismatched types
  --> $DIR/match-with-different-arm-types-as-stmt-instead-of-expr.rs:23:22
   |
LL | fn wrong(c: &str) -> Box<dyn Foo> {
   |    -----             ^^^^^^^^^^^^ expected struct `Box`, found `()`
   |    |
   |    implicitly returns `()` as its body has no tail or `return` expression
   |
   = note: expected struct `Box<(dyn Foo + 'static)>`
           found unit type `()`

error: aborting due to 3 previous errors

For more information about this error, try `rustc --explain E0308`.