[PATCH] D115382: ADT: Avoid using SmallVector::set_size() in SmallString
Duncan P. N. Exon Smith via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 8 12:47:37 PST 2021
dexonsmith created this revision.
dexonsmith added a reviewer: dblaikie.
dexonsmith requested review of this revision.
Herald added a project: LLVM.
Update `SmallString::append()` to use `resize_for_overwrite()` instead
of `reserve()` followed by `set_size()`.
A step toward https://reviews.llvm.org/D115380.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D115382
Files:
llvm/include/llvm/ADT/SmallString.h
Index: llvm/include/llvm/ADT/SmallString.h
===================================================================
--- llvm/include/llvm/ADT/SmallString.h
+++ llvm/include/llvm/ADT/SmallString.h
@@ -73,13 +73,14 @@
size_t SizeNeeded = this->size();
for (const StringRef &Ref : Refs)
SizeNeeded += Ref.size();
- this->reserve(SizeNeeded);
- auto CurEnd = this->end();
+ size_t CurrentSize = SizeNeeded;
+ this->resize_for_overwrite(SizeNeeded);
for (const StringRef &Ref : Refs) {
- this->uninitialized_copy(Ref.begin(), Ref.end(), CurEnd);
- CurEnd += Ref.size();
+ this->uninitialized_copy(Ref.begin(), Ref.end(),
+ this->begin() + CurrentSize);
+ CurrentSize += Ref.size();
}
- this->set_size(SizeNeeded);
+ assert(CurrentSize == this->size());
}
/// @}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115382.392891.patch
Type: text/x-patch
Size: 855 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211208/ac4ae014/attachment.bin>
More information about the llvm-commits
mailing list