diff --git a/libcxx/include/__vector/vector_bool.h b/libcxx/include/__vector/vector_bool.h index 8658745b8a8f9..4b5117a918ff7 100644 --- a/libcxx/include/__vector/vector_bool.h +++ b/libcxx/include/__vector/vector_bool.h @@ -115,7 +115,7 @@ class _LIBCPP_TEMPLATE_VIS vector { } _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static size_type __external_cap_to_internal(size_type __n) _NOEXCEPT { - return (__n - 1) / __bits_per_word + 1; + return __n > 0 ? (__n - 1) / __bits_per_word + 1 : size_type(0); } public: diff --git a/libcxx/test/std/containers/sequences/vector.bool/flip.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/flip.pass.cpp index f8f575cdc0e21..fb0de061bd04c 100644 --- a/libcxx/test/std/containers/sequences/vector.bool/flip.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/flip.pass.cpp @@ -32,6 +32,11 @@ TEST_CONSTEXPR_CXX20 void test_vector_flip(std::size_t n, Allocator a) { } TEST_CONSTEXPR_CXX20 bool tests() { + // Test empty vectors + test_vector_flip(0, std::allocator()); + test_vector_flip(0, min_allocator()); + test_vector_flip(0, test_allocator(5)); + // Test small vectors with different allocators test_vector_flip(3, std::allocator()); test_vector_flip(3, min_allocator());