diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2024-01-23 04:42:26 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2024-01-23 04:42:26 +0000 |
| commit | 34f4f3da4f3e2ac8fa086c4d3a3c89d49d23a263 (patch) | |
| tree | a5ba391740b4306b5237ce8f3616d4d5934ab25b /compiler/rustc_pattern_analysis/src | |
| parent | ac56a2b564a3e15b8377e72294a3d565a1c8c659 (diff) | |
| download | rust-34f4f3da4f3e2ac8fa086c4d3a3c89d49d23a263.tar.gz rust-34f4f3da4f3e2ac8fa086c4d3a3c89d49d23a263.zip | |
Suggest boxing both arms of if expr if that solves divergent arms involving `impl Trait`
When encountering the following
```rust
// run-rustfix
trait Trait {}
struct Struct;
impl Trait for Struct {}
fn foo() -> Box<dyn Trait> {
Box::new(Struct)
}
fn bar() -> impl Trait {
Struct
}
fn main() {
let _ = if true {
Struct
} else {
foo() //~ ERROR E0308
};
let _ = if true {
foo()
} else {
Struct //~ ERROR E0308
};
let _ = if true {
Struct
} else {
bar() // impl Trait
};
let _ = if true {
bar() // impl Trait
} else {
Struct
};
}
```
suggest boxing both arms
```rust
let _ = if true {
Box::new(Struct) as Box<dyn Trait>
} else {
Box::new(bar())
};
let _ = if true {
Box::new(bar()) as Box<dyn Trait>
} else {
Box::new(Struct)
};
```
Diffstat (limited to 'compiler/rustc_pattern_analysis/src')
0 files changed, 0 insertions, 0 deletions
