diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2020-10-24 22:39:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-24 22:39:53 +0200 |
| commit | e3808edeeea28c137129c0c5bf70c24562e794f5 (patch) | |
| tree | c58e4147d059534a0c5151944ff6da1ff3e9b8f6 /compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp | |
| parent | e12e97223f9f0bb0f2806334029aec1d9790f074 (diff) | |
| parent | 9890217c0eedcbe4742e412ea59e851ecd500bf5 (diff) | |
| download | rust-e3808edeeea28c137129c0c5bf70c24562e794f5.tar.gz rust-e3808edeeea28c137129c0c5bf70c24562e794f5.zip | |
Rollup merge of #78119 - fusion-engineering-forks:panic-use-as-str, r=Amanieu
Throw core::panic!("message") as &str instead of String.
This makes `core::panic!("message")` consistent with `std::panic!("message")`, which throws a `&str` and not a `String`.
This also makes any other panics from `core::panicking::panic` result in a `&str` rather than a `String`, which includes compiler-generated panics such as the panics generated for `mem::zeroed()`.
---
Demonstration:
```rust
use std::panic;
use std::any::Any;
fn main() {
panic::set_hook(Box::new(|panic_info| check(panic_info.payload())));
check(&*panic::catch_unwind(|| core::panic!("core")).unwrap_err());
check(&*panic::catch_unwind(|| std::panic!("std")).unwrap_err());
}
fn check(msg: &(dyn Any + Send)) {
if let Some(s) = msg.downcast_ref::<String>() {
println!("Got a String: {:?}", s);
} else if let Some(s) = msg.downcast_ref::<&str>() {
println!("Got a &str: {:?}", s);
}
}
```
Before:
```
Got a String: "core"
Got a String: "core"
Got a &str: "std"
Got a &str: "std"
```
After:
```
Got a &str: "core"
Got a &str: "core"
Got a &str: "std"
Got a &str: "std"
```
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/CoverageMappingWrapper.cpp')
0 files changed, 0 insertions, 0 deletions
