Clean up FastStr::new_inline_impl #9
Closed
+3
−19
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.
There are no tests, so I'm a bit confused by this.
Motivation
MaybeUninit::uninit().assume_init()
to create a[u8; N]
is UB. It is always UB, immediately, becauseu8
must be initialized. Code using this pattern tends to not cause issues currently because LLVM is not very good at tracking initialization, but the UB in this crate is an obstacle for assessing users of this crate.Solution
I just used initialized bytes, as is done everywhere else. Benchmarks do not indicate any measurable performance change, which is expected for such a small buffer. The alternative is to use
MaybeUninit
inRepr::Inline
, but that would require a lot more code change for no measurable performance impact.I also swapped in
copy_nonoverlapping
; the copied ranges are guaranteed to be non-overlapping because the destination buffer is a local and the source buffer is a passed-in pointer.