about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2024-03-17 20:46:36 +0000
committerEsteban Küber <esteban@kuber.com.ar>2025-08-12 16:30:48 +0000
commit0a522ccfd97de0f28e5c090431c12241be875a04 (patch)
treeef35fff484af3716ab0061f97fb5bd5db6f2becb /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
parent12087f1d097d8ee3acdb388833e375b8e0f00b4e (diff)
downloadrust-0a522ccfd97de0f28e5c090431c12241be875a04.tar.gz
rust-0a522ccfd97de0f28e5c090431c12241be875a04.zip
Change the desugaring of `assert!` for better error output
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
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions