about summary refs log tree commit diff
path: root/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
diff options
context:
space:
mode:
authorGuillaume Boisseau <Nadrieril@users.noreply.github.com>2024-03-09 21:40:06 +0100
committerGitHub <noreply@github.com>2024-03-09 21:40:06 +0100
commite3c0158788dffbd62c3e7f69ac61e5f03ad614c6 (patch)
tree49764503764d108892743736e6d95108a39b0989 /compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
parent5b6d30a4a9cff36380504716c992c4f5847c4342 (diff)
parent784e6a1e080e5ba18e5c246e744e2d20525d1c3d (diff)
downloadrust-e3c0158788dffbd62c3e7f69ac61e5f03ad614c6.tar.gz
rust-e3c0158788dffbd62c3e7f69ac61e5f03ad614c6.zip
Rollup merge of #120504 - kornelski:try_with_capacity, r=Amanieu
Vec::try_with_capacity

Related to #91913

Implements try_with_capacity for `Vec`, `VecDeque`, and `String`. I can follow it up with more collections if desired.

`Vec::try_with_capacity()` is functionally equivalent to the current stable:

```rust
let mut v = Vec::new();
v.try_reserve_exact(n)?
```

However, `try_reserve` calls non-inlined `finish_grow`, which requires old and new `Layout`, and is designed to reallocate memory. There is benefit to using `try_with_capacity`, besides syntax convenience, because it generates much smaller code at the call site with a direct call to the allocator. There's codegen test included.

It's also a very desirable functionality for users of `no_global_oom_handling` (Rust-for-Linux), since it makes a very commonly used function available in that environment (`with_capacity` is used much more frequently than all `(try_)reserve(_exact)`).
Diffstat (limited to 'compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp')
0 files changed, 0 insertions, 0 deletions