mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Fix a bug in the set(I,E)/reset(I,E) methods that I recently added. The boundary condition for checking if I and E were in the same word were incorrect, and, beyond that, the mask computation was not using a wide enough constant.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166015 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fdc054c3a3
commit
e3f7be36c7
@ -244,9 +244,9 @@ public:
|
|||||||
|
|
||||||
if (I == E) return *this;
|
if (I == E) return *this;
|
||||||
|
|
||||||
if (I / BITWORD_SIZE == (E-1) / BITWORD_SIZE) {
|
if (I / BITWORD_SIZE == E / BITWORD_SIZE) {
|
||||||
BitWord EMask = 1 << (E % BITWORD_SIZE);
|
BitWord EMask = 1UL << (E % BITWORD_SIZE);
|
||||||
BitWord IMask = 1 << (I % BITWORD_SIZE);
|
BitWord IMask = 1UL << (I % BITWORD_SIZE);
|
||||||
BitWord Mask = EMask - IMask;
|
BitWord Mask = EMask - IMask;
|
||||||
Bits[I / BITWORD_SIZE] |= Mask;
|
Bits[I / BITWORD_SIZE] |= Mask;
|
||||||
return *this;
|
return *this;
|
||||||
@ -282,9 +282,9 @@ public:
|
|||||||
|
|
||||||
if (I == E) return *this;
|
if (I == E) return *this;
|
||||||
|
|
||||||
if (I / BITWORD_SIZE == (E-1) / BITWORD_SIZE) {
|
if (I / BITWORD_SIZE == E / BITWORD_SIZE) {
|
||||||
BitWord EMask = 1 << (E % BITWORD_SIZE);
|
BitWord EMask = 1UL << (E % BITWORD_SIZE);
|
||||||
BitWord IMask = 1 << (I % BITWORD_SIZE);
|
BitWord IMask = 1UL << (I % BITWORD_SIZE);
|
||||||
BitWord Mask = EMask - IMask;
|
BitWord Mask = EMask - IMask;
|
||||||
Bits[I / BITWORD_SIZE] &= ~Mask;
|
Bits[I / BITWORD_SIZE] &= ~Mask;
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -322,6 +322,16 @@ TYPED_TEST(BitVectorTest, RangeOps) {
|
|||||||
EXPECT_FALSE(D.test(0));
|
EXPECT_FALSE(D.test(0));
|
||||||
EXPECT_TRUE( D.test(1));
|
EXPECT_TRUE( D.test(1));
|
||||||
EXPECT_TRUE( D.test(2));
|
EXPECT_TRUE( D.test(2));
|
||||||
|
|
||||||
|
TypeParam E;
|
||||||
|
E.resize(128);
|
||||||
|
E.reset();
|
||||||
|
E.set(1, 33);
|
||||||
|
|
||||||
|
EXPECT_FALSE(E.test(0));
|
||||||
|
EXPECT_TRUE( E.test(1));
|
||||||
|
EXPECT_TRUE( E.test(32));
|
||||||
|
EXPECT_FALSE(E.test(33));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user