diff options
author | Alex Converse <aconverse@google.com> | 2017-04-11 10:20:18 -0700 |
---|---|---|
committer | James Zern <jzern@google.com> | 2017-07-01 12:24:32 -0700 |
commit | f7645138d46b74e1a8072779d8e6547121ef2793 (patch) | |
tree | 07b0dbd3d758889ce998f2e2d298ecadd0737756 /third_party/googletest | |
parent | 27e37e1a8ac0413ba1deec41ef578d5edc343a82 (diff) | |
download | libvpx-f7645138d46b74e1a8072779d8e6547121ef2793.tar libvpx-f7645138d46b74e1a8072779d8e6547121ef2793.tar.gz libvpx-f7645138d46b74e1a8072779d8e6547121ef2793.tar.bz2 libvpx-f7645138d46b74e1a8072779d8e6547121ef2793.zip |
googletest: suppress unsigned overflow in the LCG
Local application of:
https://github.com/google/googletest/pull/1066
Suppress unsigned overflow instrumentation in the LCG
The rest of the (covered) codebase is already integer overflow clean.
TESTED=gtest_shuffle_test goes from fail to pass with -fsanitize=integer
Change-Id: I8a6db02a7c274160adb08b7dfd528b87b5b53050
Diffstat (limited to 'third_party/googletest')
-rw-r--r-- | third_party/googletest/README.libvpx | 2 | ||||
-rw-r--r-- | third_party/googletest/src/include/gtest/internal/gtest-port.h | 13 | ||||
-rw-r--r-- | third_party/googletest/src/src/gtest.cc | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/third_party/googletest/README.libvpx b/third_party/googletest/README.libvpx index 3d9938096..2cd6910b4 100644 --- a/third_party/googletest/README.libvpx +++ b/third_party/googletest/README.libvpx @@ -20,3 +20,5 @@ Local Modifications: LICENSE README.md src +- Suppress unsigned overflow instrumentation in the LCG + https://github.com/google/googletest/pull/1066 diff --git a/third_party/googletest/src/include/gtest/internal/gtest-port.h b/third_party/googletest/src/include/gtest/internal/gtest-port.h index 0094ed507..da57e65d3 100644 --- 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 @@ using ::std::tuple_size; # 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; diff --git a/third_party/googletest/src/src/gtest.cc b/third_party/googletest/src/src/gtest.cc index d882ab2e3..5a8932c73 100644 --- a/third_party/googletest/src/src/gtest.cc +++ b/third_party/googletest/src/src/gtest.cc @@ -308,6 +308,7 @@ namespace internal { // 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; |