Avoid libc++ assert failure when building with _LIBCPP_DEBUG=0
libc++ will assert when indexing one element past the end of a vector, but V8 uses this as the end iterator for ScopedPtrList. Similarly, when there's no elements in the vector, v[0] will also assert, so ScopedPtrList::begin() needs to be updated too. This CL changes ScopedPtrList to use std::vector::data() to get the iterators. BUG=chromium:923166 TBR=machenbach Change-Id: Ic6a5176611d52ed592da743ecce44287c452b379 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1565543 Commit-Queue: Thomas Anderson <thomasanderson@chromium.org> Reviewed-by: Nico Weber <thakis@chromium.org> Auto-Submit: Thomas Anderson <thomasanderson@chromium.org> Cr-Commit-Position: refs/heads/master@{#60851}
This commit is contained in:
parent
e6e349dc7d
commit
4dd01774c6
@ -390,9 +390,11 @@ class ScopedPtrList final {
|
||||
|
||||
typedef T** iterator;
|
||||
inline iterator begin() const {
|
||||
return reinterpret_cast<T**>(&buffer_[start_]);
|
||||
return reinterpret_cast<T**>(buffer_.data() + start_);
|
||||
}
|
||||
inline iterator end() const {
|
||||
return reinterpret_cast<T**>(buffer_.data() + end_);
|
||||
}
|
||||
inline iterator end() const { return reinterpret_cast<T**>(&buffer_[end_]); }
|
||||
|
||||
private:
|
||||
std::vector<void*>& buffer_;
|
||||
|
Loading…
Reference in New Issue
Block a user