about summary refs log tree commit diff
path: root/compiler/rustc_pattern_analysis/src
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2024-01-23 04:42:26 +0000
committerEsteban Küber <esteban@kuber.com.ar>2024-01-23 04:42:26 +0000
commit34f4f3da4f3e2ac8fa086c4d3a3c89d49d23a263 (patch)
treea5ba391740b4306b5237ce8f3616d4d5934ab25b /compiler/rustc_pattern_analysis/src
parentac56a2b564a3e15b8377e72294a3d565a1c8c659 (diff)
downloadrust-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