mirror of
https://github.com/rust-lang/rust.git
synced 2025-10-30 04:24:26 +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!
|
|
}
|