mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-20 00:20:11 +00:00
Make the moved-from SmallPtrSet be a valid, empty, small-state object.
Enhance the tests to actually require moves in C++11 mode, in addition to testing the moved-from state. Further enhance the tests to cover copy-assignment into a moved-from object and moving a large-state object. (Note that we can't really test small-state vs. large-state as that isn't an observable property of the API really.) This should finish addressing review on r195239. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195261 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -206,6 +206,12 @@ SmallPtrSetImpl::SmallPtrSetImpl(const void **SmallStorage, unsigned SmallSize,
|
||||
// Otherwise, we steal the large memory allocation and no copy is needed.
|
||||
CurArray = that.CurArray;
|
||||
that.CurArray = that.SmallArray;
|
||||
|
||||
// Make the "that" object small and empty.
|
||||
that.CurArraySize = SmallSize;
|
||||
assert(that.CurArray == that.SmallArray);
|
||||
that.NumElements = 0;
|
||||
that.NumTombstones = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -246,7 +252,7 @@ void SmallPtrSetImpl::CopyFrom(const SmallPtrSetImpl &RHS) {
|
||||
}
|
||||
|
||||
#if LLVM_HAS_RVALUE_REFERENCES
|
||||
void SmallPtrSetImpl::MoveFrom(SmallPtrSetImpl &&RHS) {
|
||||
void SmallPtrSetImpl::MoveFrom(unsigned SmallSize, SmallPtrSetImpl &&RHS) {
|
||||
if (!isSmall())
|
||||
free(CurArray);
|
||||
|
||||
@@ -263,6 +269,12 @@ void SmallPtrSetImpl::MoveFrom(SmallPtrSetImpl &&RHS) {
|
||||
CurArraySize = RHS.CurArraySize;
|
||||
NumElements = RHS.NumElements;
|
||||
NumTombstones = RHS.NumTombstones;
|
||||
|
||||
// Make the RHS small and empty.
|
||||
RHS.CurArraySize = SmallSize;
|
||||
assert(RHS.CurArray == RHS.SmallArray);
|
||||
RHS.NumElements = 0;
|
||||
RHS.NumTombstones = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user