| Index: third_party/re2/patches/re2-msan.patch
|
| diff --git a/third_party/re2/patches/re2-msan.patch b/third_party/re2/patches/re2-msan.patch
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..857766927fb55b76a4c16c6a97010326dcdb4468
|
| --- /dev/null
|
| +++ b/third_party/re2/patches/re2-msan.patch
|
| @@ -0,0 +1,63 @@
|
| +diff --git a/third_party/re2/util/sparse_array.h b/third_party/re2/util/sparse_array.h
|
| +index 3e33f89..4ee5c94 100644
|
| +--- a/third_party/re2/util/sparse_array.h
|
| ++++ b/third_party/re2/util/sparse_array.h
|
| +@@ -231,7 +231,8 @@ class SparseArray {
|
| +
|
| + template<typename Value>
|
| + SparseArray<Value>::SparseArray()
|
| +- : size_(0), max_size_(0), sparse_to_dense_(NULL), dense_(), valgrind_(RunningOnValgrind()) {}
|
| ++ : size_(0), max_size_(0), sparse_to_dense_(NULL), dense_(),
|
| ++ valgrind_(RunningOnValgrindOrMemorySanitizer()) {}
|
| +
|
| + // IndexValue pairs: exposed in SparseArray::iterator.
|
| + template<typename Value>
|
| +@@ -418,7 +419,7 @@ void SparseArray<Value>::create_index(int i) {
|
| + template<typename Value> SparseArray<Value>::SparseArray(int max_size) {
|
| + max_size_ = max_size;
|
| + sparse_to_dense_ = new int[max_size];
|
| +- valgrind_ = RunningOnValgrind();
|
| ++ valgrind_ = RunningOnValgrindOrMemorySanitizer();
|
| + dense_.resize(max_size);
|
| + // Don't need to zero the new memory, but appease Valgrind.
|
| + if (valgrind_) {
|
| +diff --git a/third_party/re2/util/sparse_set.h b/third_party/re2/util/sparse_set.h
|
| +index 165dd09..4a324d7 100644
|
| +--- a/third_party/re2/util/sparse_set.h
|
| ++++ b/third_party/re2/util/sparse_set.h
|
| +@@ -54,13 +54,14 @@ namespace re2 {
|
| + class SparseSet {
|
| + public:
|
| + SparseSet()
|
| +- : size_(0), max_size_(0), sparse_to_dense_(NULL), dense_(NULL), valgrind_(RunningOnValgrind()) {}
|
| ++ : size_(0), max_size_(0), sparse_to_dense_(NULL), dense_(NULL),
|
| ++ valgrind_(RunningOnValgrindOrMemorySanitizer()) {}
|
| +
|
| + SparseSet(int max_size) {
|
| + max_size_ = max_size;
|
| + sparse_to_dense_ = new int[max_size];
|
| + dense_ = new int[max_size];
|
| +- valgrind_ = RunningOnValgrind();
|
| ++ valgrind_ = RunningOnValgrindOrMemorySanitizer();
|
| + // Don't need to zero the memory, but do so anyway
|
| + // to appease Valgrind.
|
| + if (valgrind_) {
|
| +diff --git a/third_party/re2/util/util.h b/third_party/re2/util/util.h
|
| +index de1ef5b..49159c2 100644
|
| +--- a/third_party/re2/util/util.h
|
| ++++ b/third_party/re2/util/util.h
|
| +@@ -129,6 +129,14 @@ static inline uint64 Hash64StringWithSeed(const char* s, int len, uint32 seed) {
|
| + return ((uint64)x << 32) | y;
|
| + }
|
| +
|
| ++inline bool RunningOnValgrindOrMemorySanitizer() {
|
| ++#if defined(MEMORY_SANITIZER)
|
| ++ return true;
|
| ++#else
|
| ++ return RunningOnValgrind();
|
| ++#endif
|
| ++}
|
| ++
|
| + } // namespace re2
|
| +
|
| + #include "util/arena.h"
|
|
|