From 503a7542d52fa4b47f7c9e04dd78a7587ad04222 Mon Sep 17 00:00:00 2001 From: wingrez Date: Thu, 7 Sep 2023 01:21:00 +0800 Subject: [PATCH] [ADT] Fix an empty BitVector call getData assert `idx < size()' failed Make sure calling getData() is legal even on an empty BitVector. --- llvm/include/llvm/ADT/BitVector.h | 2 +- llvm/unittests/ADT/BitVectorTest.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/llvm/include/llvm/ADT/BitVector.h b/llvm/include/llvm/ADT/BitVector.h index a8847a3267537..e0de1afcc9418 100644 --- a/llvm/include/llvm/ADT/BitVector.h +++ b/llvm/include/llvm/ADT/BitVector.h @@ -688,7 +688,7 @@ class BitVector { } bool isInvalid() const { return Size == (unsigned)-1; } - ArrayRef getData() const { return {&Bits[0], Bits.size()}; } + ArrayRef getData() const { return {Bits.data(), Bits.size()}; } //===--------------------------------------------------------------------===// // Portable bit mask operations. diff --git a/llvm/unittests/ADT/BitVectorTest.cpp b/llvm/unittests/ADT/BitVectorTest.cpp index ce043d47b97f1..e00e11e4655aa 100644 --- a/llvm/unittests/ADT/BitVectorTest.cpp +++ b/llvm/unittests/ADT/BitVectorTest.cpp @@ -1134,6 +1134,14 @@ TYPED_TEST(BitVectorTest, EmptyVector) { testEmpty(E); } +/// Make sure calling getData() is legal even on an empty BitVector +TYPED_TEST(BitVectorTest, EmptyVectorGetData) { + BitVector A; + testEmpty(A); + auto B = A.getData(); + EXPECT_TRUE(B.empty()); +} + TYPED_TEST(BitVectorTest, Iterators) { TypeParam Filled(10, true); EXPECT_NE(Filled.set_bits_begin(), Filled.set_bits_end());