diff options
| author | bors <bors@rust-lang.org> | 2021-08-08 13:11:09 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-08-08 13:11:09 +0000 |
| commit | 4e886d68766719a7fc1714c52a0e7e81929e8b8e (patch) | |
| tree | 050ac0b5b0833c9f9218f882a5ff63fc11c7b976 /compiler/rustc_errors/src/snippet.rs | |
| parent | e8c25f266349a68faa8c4fb68f5c1d5e4512790f (diff) | |
| parent | a1d014bdbc0159c6ed60e29dc0c3ef3110ff9776 (diff) | |
| download | rust-4e886d68766719a7fc1714c52a0e7e81929e8b8e.tar.gz rust-4e886d68766719a7fc1714c52a0e7e81929e8b8e.zip | |
Auto merge of #87827 - eddyb:wrapperless-mem-replace, r=m-ou-se
Avoid using the `copy_nonoverlapping` wrapper through `mem::replace`.
This is a much simpler way to achieve the pre-#86003 behavior of `mem::replace` not needing dynamically-sized `memcpy`s (at least before inlining), than re-doing #81238 (which needs #86699 or something similar).
I didn't notice it until recently, but `ptr::write` already explicitly avoided using the wrapper, while `ptr::read` just called the wrapper (and was the reason for us observing any behavior change from #86003 in Rust-GPU).
<hr/>
The codegen test I've added fails without the change to `core::ptr::read` like this (ignore the `v0` mangling, I was using a worktree with it turned on by default, for this):
```llvm
13: ; core::intrinsics::copy_nonoverlapping::<u8>
14: ; Function Attrs: inlinehint nonlazybind uwtable
15: define internal void `@_RINvNtCscK5tvALCJol_4core10intrinsics19copy_nonoverlappinghECsaS4X3EinRE8_25mem_replace_direct_memcpy(i8*` %src, i8* %dst, i64 %count) unnamed_addr #0 {
16: start:
17: %0 = mul i64 %count, 1
18: call void `@llvm.memcpy.p0i8.p0i8.i64(i8*` align 1 %dst, i8* align 1 %src, i64 %0, i1 false)
not:17 !~~~~~~~~~~~~~~~~~~~~~ error: no match expected
19: ret void
20: }
```
With the `core::ptr::read` change, `core::intrinsics::copy_nonoverlapping` doesn't get instantiated and the test passes.
<hr/>
r? `@m-ou-se` cc `@nagisa` (codegen test) `@oli-obk` / `@RalfJung` (miri diagnostic changes)
Diffstat (limited to 'compiler/rustc_errors/src/snippet.rs')
0 files changed, 0 insertions, 0 deletions
