When filling a vector<bool> with stuff, initialize the last word of the storage that...
authorMarshall Clow <mclow.lists@gmail.com>
Tue, 23 Oct 2018 18:38:15 +0000 (18:38 +0000)
committerMarshall Clow <mclow.lists@gmail.com>
Tue, 23 Oct 2018 18:38:15 +0000 (18:38 +0000)
llvm-svn: 345067

libcxx/include/vector

index de7de09..8ac7576 100644 (file)
@@ -2606,6 +2606,8 @@ vector<bool, _Allocator>::__construct_at_end(size_type __n, bool __x)
 {
     size_type __old_size = this->__size_;
     this->__size_ += __n;
+    if (__old_size == 0 || (__old_size / __bits_per_word) != (this->__size_ / __bits_per_word))
+       this->__begin_[this->__size_ / __bits_per_word] = __storage_type(0);
     _VSTD::fill_n(__make_iter(__old_size), __n, __x);
 }
 
@@ -2620,6 +2622,8 @@ vector<bool, _Allocator>::__construct_at_end(_ForwardIterator __first, _ForwardI
 {
     size_type __old_size = this->__size_;
     this->__size_ += _VSTD::distance(__first, __last);
+    if (__old_size == 0 || (__old_size / __bits_per_word) != (this->__size_ / __bits_per_word))
+       this->__begin_[this->__size_ / __bits_per_word] = __storage_type(0);
     _VSTD::copy(__first, __last, __make_iter(__old_size));
 }