diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2021-12-11 23:31:50 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-11 23:31:50 +0100 |
| commit | 90eb610d143e8b81de57ab4f0ade6354e3e26022 (patch) | |
| tree | 32550ee664caa3e2f2d74b9c2b3068021338fd98 /compiler/rustc_codegen_llvm/src | |
| parent | 443ed7c6203608def39739b21a50a8e7a0f4e428 (diff) | |
| parent | 917dafc73a9eb257b9b5c2d357c4abd8bb1c3a8e (diff) | |
| download | rust-90eb610d143e8b81de57ab4f0ade6354e3e26022.tar.gz rust-90eb610d143e8b81de57ab4f0ade6354e3e26022.zip | |
Rollup merge of #91737 - Manishearth:panic-immediate-stdlib, r=joshtriplett
Make certain panicky stdlib functions behave better under panic_immediate_abort
The stdlib has a `panic_immediate_abort` feature that turns panics into immediate aborts, without any formatting/display logic. This feature was [introduced](https://github.com/rust-lang/rust/pull/55011) primarily for codesize-constrained situations.
Unfortunately, this win doesn't quite propagate to `Result::expect()` and `Result::unwrap()`, while the formatting machinery is reduced, `expect()` and `unwrap()` both call `unwrap_failed("msg", &err)` which has a signature of `fn unwrap_failed(msg: &str, error: &dyn fmt::Debug)` and is `#[inline(never)]`. This means that `unwrap_failed` will unconditionally construct a `dyn Debug` trait object even though the object is never used in the function.
Constructing a trait object (even if you never call a method on it!) forces rust to include the vtable and any dependencies. This means that in `panic_immediate_abort` mode, calling expect/unwrap on a Result will pull in a whole bunch of formatting code for the error type even if it's completely unused.
This PR swaps out the function with one that won't require a trait object such that it won't force the inclusion of vtables in the code. It also gates off `#[inline(never)]` in a bunch of other places where allowing the inlining of an abort may be useful (this kind of thing is already done elsewhere in the stdlib).
I don't know how to write a test for this; we don't really seem to have any tests for `panic_immediate_abort` anyway so perhaps it's fine as is.
Diffstat (limited to 'compiler/rustc_codegen_llvm/src')
0 files changed, 0 insertions, 0 deletions
