ref: 24d0391efb748b353834b9ca947f773d2575a8dc
parent: 9a05f9771a81bf571c82ac4e6a2071922985e3f1
parent: f7645138d46b74e1a8072779d8e6547121ef2793
author: James Zern <jzern@google.com>
date: Wed Jul 5 17:19:44 EDT 2017
Merge "googletest: suppress unsigned overflow in the LCG"
--- a/third_party/googletest/README.libvpx
+++ b/third_party/googletest/README.libvpx
@@ -20,3 +20,5 @@
LICENSE
README.md
src
+- Suppress unsigned overflow instrumentation in the LCG
+ https://github.com/google/googletest/pull/1066
--- a/third_party/googletest/src/include/gtest/internal/gtest-port.h
+++ b/third_party/googletest/src/include/gtest/internal/gtest-port.h
@@ -985,6 +985,19 @@
# define GTEST_ATTRIBUTE_NO_SANITIZE_THREAD_
#endif // __clang__
+// A function level attribute to disable UndefinedBehaviorSanitizer's (defined)
+// unsigned integer overflow instrumentation.
+#if defined(__clang__)
+# if defined(__has_attribute) && __has_attribute(no_sanitize)
+# define GTEST_ATTRIBUTE_NO_SANITIZE_UNSIGNED_OVERFLOW_ \
+ __attribute__((no_sanitize("unsigned-integer-overflow")))
+# else
+# define GTEST_ATTRIBUTE_NO_SANITIZE_UNSIGNED_OVERFLOW_
+# endif // defined(__has_attribute) && __has_attribute(no_sanitize)
+#else
+# define GTEST_ATTRIBUTE_NO_SANITIZE_UNSIGNED_OVERFLOW_
+#endif // __clang__
+
namespace testing {
class Message;
--- a/third_party/googletest/src/src/gtest.cc
+++ b/third_party/googletest/src/src/gtest.cc
@@ -308,6 +308,7 @@
// Generates a random number from [0, range), using a Linear
// Congruential Generator (LCG). Crashes if 'range' is 0 or greater
// than kMaxRange.
+GTEST_ATTRIBUTE_NO_SANITIZE_UNSIGNED_OVERFLOW_
UInt32 Random::Generate(UInt32 range) {
// These constants are the same as are used in glibc's rand(3).
state_ = (1103515245U*state_ + 12345U) % kMaxRange;