Skip to content

Commit 3547863

Browse files
committed
Migrate from SmallVector.set_size to resize_for_overwrite
In the "next" branch, set_size has been made protected. Instead, users can use resize_for_overwrite, optionally followed by truncate, to handle the same use cases more safely.
1 parent b7d00e4 commit 3547863

File tree

5 files changed

+8
-11
lines changed

5 files changed

+8
-11
lines changed

include/swift/Basic/DiverseStack.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,7 @@ class DiverseValueBuffer {
395395
public:
396396
DiverseValueBuffer(const T &value) {
397397
size_t size = value.allocated_size();
398-
data.reserve(size);
399-
data.set_size(size);
398+
data.resize_for_overwrite(size);
400399
memcpy(data.data(), reinterpret_cast<const void *>(&value), size);
401400
}
402401

lib/IRGen/Explosion.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ class Explosion {
4545
Explosion &operator=(const Explosion &) = delete;
4646
Explosion(Explosion &&other) : NextValue(0) {
4747
// Do an uninitialized copy of the non-consumed elements.
48-
Values.reserve(other.size());
49-
Values.set_size(other.size());
48+
Values.resize_for_overwrite(other.size());
5049
std::uninitialized_copy(other.begin(), other.end(), Values.begin());
5150

5251
// Remove everything from the other explosion.

lib/IRGen/GenCall.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3257,8 +3257,7 @@ void CallEmission::setFromCallee() {
32573257

32583258
// Set up the args array.
32593259
assert(Args.empty());
3260-
Args.reserve(numArgs);
3261-
Args.set_size(numArgs);
3260+
Args.resize_for_overwrite(numArgs);
32623261
LastArgWritten = numArgs;
32633262
}
32643263

lib/SIL/Utils/MemoryLocations.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ void MemoryLocations::analyzeLocation(SILValue loc) {
200200
SubLocationMap subLocationMap;
201201
if (!analyzeLocationUsesRecursively(loc, currentLocIdx, collectedVals,
202202
subLocationMap)) {
203-
locations.set_size(currentLocIdx);
203+
locations.truncate(currentLocIdx);
204204
for (SILValue V : collectedVals) {
205205
addr2LocIdx.erase(V);
206206
}

tools/SourceKit/tools/sourcekitd-repl/sourcekitd-repl.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,29 +91,29 @@ using Convert = ConvertForWcharSize<sizeof(wchar_t)>;
9191
static void convertFromUTF8(llvm::StringRef utf8,
9292
llvm::SmallVectorImpl<wchar_t> &out) {
9393
size_t reserve = out.size() + utf8.size();
94-
out.reserve(reserve);
94+
out.resize_for_overwrite(reserve);
9595
const char *utf8_begin = utf8.begin();
9696
wchar_t *wide_begin = out.end();
9797
auto res = Convert::ConvertFromUTF8(&utf8_begin, utf8.end(),
9898
&wide_begin, out.data() + reserve,
9999
lenientConversion);
100100
assert(res == conversionOK && "utf8-to-wide conversion failed!");
101101
(void)res;
102-
out.set_size(wide_begin - out.begin());
102+
out.truncate(wide_begin - out.begin());
103103
}
104104

105105
static void convertToUTF8(llvm::ArrayRef<wchar_t> wide,
106106
llvm::SmallVectorImpl<char> &out) {
107107
size_t reserve = out.size() + wide.size()*4;
108-
out.reserve(reserve);
108+
out.resize_for_overwrite(reserve);
109109
const wchar_t *wide_begin = wide.begin();
110110
char *utf8_begin = out.end();
111111
auto res = Convert::ConvertToUTF8(&wide_begin, wide.end(),
112112
&utf8_begin, out.data() + reserve,
113113
lenientConversion);
114114
assert(res == conversionOK && "wide-to-utf8 conversion failed!");
115115
(void)res;
116-
out.set_size(utf8_begin - out.begin());
116+
out.truncate(utf8_begin - out.begin());
117117
}
118118
} // end anonymous namespace
119119

0 commit comments

Comments
 (0)