[llvm] r272965 - Fix BitVector move ctor/assignment.

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 16 14:53:46 PDT 2016


On Thu, Jun 16, 2016 at 2:45 PM, Evgeniy Stepanov via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: eugenis
> Date: Thu Jun 16 16:45:13 2016
> New Revision: 272965
>
> URL: http://llvm.org/viewvc/llvm-project?rev=272965&view=rev
> Log:
> Fix BitVector move ctor/assignment.
>
> Current implementation leaves the object in an invalid state.
>
> This reverts commit bf0c389ac683cd6c0e5959b16537e59e5f4589e3.
>

I assume this isn't a revert of anything, is it?

(but if it is, we have llvm/utils/git-svn/git-svnrevert that helps revert a
patch using a git hash, but produces a commit message that lists the SVN
revision instead of the git hash, so it's useful for archival purposes)


>
> Modified:
>     llvm/trunk/include/llvm/ADT/BitVector.h
>     llvm/trunk/unittests/ADT/BitVectorTest.cpp
>
> Modified: llvm/trunk/include/llvm/ADT/BitVector.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/BitVector.h?rev=272965&r1=272964&r2=272965&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/BitVector.h (original)
> +++ llvm/trunk/include/llvm/ADT/BitVector.h Thu Jun 16 16:45:13 2016
> @@ -105,6 +105,7 @@ public:
>    BitVector(BitVector &&RHS)
>      : Bits(RHS.Bits), Size(RHS.Size), Capacity(RHS.Capacity) {
>      RHS.Bits = nullptr;
> +    RHS.Size = RHS.Capacity = 0;
>    }
>
>    ~BitVector() {
> @@ -454,6 +455,7 @@ public:
>      Capacity = RHS.Capacity;
>
>      RHS.Bits = nullptr;
> +    RHS.Size = RHS.Capacity = 0;
>
>      return *this;
>    }
>
> Modified: llvm/trunk/unittests/ADT/BitVectorTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/BitVectorTest.cpp?rev=272965&r1=272964&r2=272965&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ADT/BitVectorTest.cpp (original)
> +++ llvm/trunk/unittests/ADT/BitVectorTest.cpp Thu Jun 16 16:45:13 2016
> @@ -399,5 +399,31 @@ TYPED_TEST(BitVectorTest, CompoundTestRe
>    C.reset(C);
>    EXPECT_TRUE(C.none());
>  }
> +
> +TYPED_TEST(BitVectorTest, MoveConstructor) {
> +  TypeParam A(10, true);
> +  TypeParam B(std::move(A));
> +  // Check that the move ctor leaves the moved-from object in a valid
> state.
> +  // The following line used to crash.
> +  A = B;
> +
> +  TypeParam C(10, true);
> +  EXPECT_EQ(C, A);
> +  EXPECT_EQ(C, B);
> +}
> +
> +TYPED_TEST(BitVectorTest, MoveAssignment) {
> +  TypeParam A(10, true);
> +  TypeParam B;
> +  B = std::move(A);
> +  // Check that move assignment leaves the moved-from object in a valid
> state.
> +  // The following line used to crash.
> +  A = B;
> +
> +  TypeParam C(10, true);
> +  EXPECT_EQ(C, A);
> +  EXPECT_EQ(C, B);
> +}
> +
>  }
>  #endif
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160616/b5803e7c/attachment.html>


More information about the llvm-commits mailing list