about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2023-11-02 21:22:42 +0000
committerEsteban Küber <esteban@kuber.com.ar>2023-11-27 16:19:02 +0000
commit8221f9c837f46461d2dd6f29a4468b3a0ee4b508 (patch)
treea12a92f71a213ef32c017df9d2c1382650e8202d /compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp
parentaa330518f47f26c627448832e2cae0a00c57a475 (diff)
downloadrust-8221f9c837f46461d2dd6f29a4468b3a0ee4b508.tar.gz
rust-8221f9c837f46461d2dd6f29a4468b3a0ee4b508.zip
Account for `!` arm in tail `match` expr
On functions with a default return type that influences the coerced type
of `match` arms, check if the failing arm is actually of type `!`. If
so, suggest changing the return type so the coercion against the prior
arms is successful.

```
error[E0308]: `match` arms have incompatible types
  --> $DIR/match-tail-expr-never-type-error.rs:9:13
   |
LL |   fn bar(a: bool) {
   |                  - help: try adding a return type: `-> i32`
LL | /     match a {
LL | |         true => 1,
   | |                 - this is found to be of type `{integer}`
LL | |         false => {
LL | |             never()
   | |             ^^^^^^^
   | |             |
   | |             expected integer, found `()`
   | |             this expression is of type `!`, but it get's coerced to `()` due to its surrounding expression
LL | |         }
LL | |     }
   | |_____- `match` arms have incompatible types
```

Fix #24157.
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp')
0 files changed, 0 insertions, 0 deletions