fix: handle zero-sized memory intrinsics#876
Open
mizoz wants to merge 2 commits intorust-lang:masterfrom
Open
Conversation
bjorn3
reviewed
Apr 28, 2026
| return Ok(()); | ||
| } | ||
| return Err(Instance::new_raw(instance.def_id(), instance.args)); | ||
| } |
Member
There was a problem hiding this comment.
Why not change the memset, memcpy and memmove methods on Builder? Also this only helps with ZST types, not with copying zero elements.
Author
|
You're right — this should cover the generic I had avoided changing the builder methods because a first pass that split the current block inside those methods caused later MIR emission to keep writing to the terminated block in local testing. I'm going to rework this instead of trying to paper over it, so the updated patch handles runtime zero sizes cleanly as well. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #516.
This avoids lowering zero-sized
copy,copy_nonoverlapping, andwrite_bytesintrinsics to GCC memory builtins. For zero-sized element types, the operation has no bytes to touch, so the backend can return before the fallback lowering emitsmemcpy,memmove, ormemset.A small run test covers the three zero-sized memory intrinsic paths using
()pointers.Tested with:
git diff --checkcargo fmt --check./y.sh test --mini-testscargo test -p rustc_codegen_gcc --test lang_tests zero_sized_mem -- --nocapture