mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-02 18:27:37 +00:00

In the desugaring of `assert!`, we now expand to a `match` expression instead of `if !cond {..}`. The span of incorrect conditions will point only at the expression, and not the whole `assert!` invocation. ``` error[E0308]: mismatched types --> $DIR/issue-14091.rs:2:13 | LL | assert!(1,1); | ^ expected `bool`, found integer ``` We no longer mention the expression needing to implement the `Not` trait. ``` error[E0308]: mismatched types --> $DIR/issue-14091-2.rs:15:13 | LL | assert!(x, x); | ^ expected `bool`, found `BytePos` ``` `assert!(val)` now desugars to: ```rust match val { true => {}, _ => $crate::panic::panic_2021!(), } ``` Fix #122159. We make some minor changes to some diagnostics to avoid span overlap on type mismatch or inverted "expected"/"found" on type errors. We remove some unnecessary parens from core, alloc and miri. address review comments
17 lines
617 B
Rust
17 lines
617 B
Rust
fn main() {
|
|
assert!("foo"); //~ ERROR mismatched types
|
|
//~^ NOTE expected `bool`, found `str`
|
|
//~| NOTE in this expansion of assert!
|
|
let x = Some(&1);
|
|
assert!(x); //~ ERROR mismatched types
|
|
//~^ NOTE expected `bool`, found `Option<&{integer}>`
|
|
//~| NOTE expected enum `bool`
|
|
//~| NOTE in this expansion of assert!
|
|
//~| NOTE in this expansion of assert!
|
|
assert!(x, ""); //~ ERROR mismatched types
|
|
//~^ NOTE expected `bool`, found `Option<&{integer}>`
|
|
//~| NOTE expected enum `bool`
|
|
//~| NOTE in this expansion of assert!
|
|
//~| NOTE in this expansion of assert!
|
|
}
|