Author: Vitaly Buka Date: 2020-12-29T14:01:43-08:00 New Revision: 4e74480e0234f27f40e26dec085b2a9eb2149578
URL: https://github.com/llvm/llvm-project/commit/4e74480e0234f27f40e26dec085b2a9eb2149578 DIFF: https://github.com/llvm/llvm-project/commit/4e74480e0234f27f40e26dec085b2a9eb2149578.diff LOG: [NFC][sanitizer] Simplify InternalLowerBound Added: Modified: compiler-rt/lib/lsan/lsan_common.cpp compiler-rt/lib/lsan/lsan_common_fuchsia.cpp compiler-rt/lib/sanitizer_common/sanitizer_common.h compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cpp compiler-rt/lib/sanitizer_common/tests/sanitizer_common_test.cpp Removed: ################################################################################ diff --git a/compiler-rt/lib/lsan/lsan_common.cpp b/compiler-rt/lib/lsan/lsan_common.cpp index 30c154a4fc94..ddedfa0830e1 100644 --- a/compiler-rt/lib/lsan/lsan_common.cpp +++ b/compiler-rt/lib/lsan/lsan_common.cpp @@ -551,8 +551,7 @@ static void ReportIfNotSuspended(ThreadContextBase *tctx, void *arg) { const InternalMmapVector<tid_t> &suspended_threads = *(const InternalMmapVector<tid_t> *)arg; if (tctx->status == ThreadStatusRunning) { - uptr i = InternalLowerBound(suspended_threads, 0, suspended_threads.size(), - tctx->os_id, CompareLess<int>()); + uptr i = InternalLowerBound(suspended_threads, tctx->os_id); if (i >= suspended_threads.size() || suspended_threads[i] != tctx->os_id) Report("Running thread %d was not suspended. False leaks are possible.\n", tctx->os_id); diff --git a/compiler-rt/lib/lsan/lsan_common_fuchsia.cpp b/compiler-rt/lib/lsan/lsan_common_fuchsia.cpp index 3c62c9433d3d..2d35fa5b1cff 100644 --- a/compiler-rt/lib/lsan/lsan_common_fuchsia.cpp +++ b/compiler-rt/lib/lsan/lsan_common_fuchsia.cpp @@ -107,9 +107,7 @@ void LockStuffAndStopTheWorld(StopTheWorldCallback callback, auto params = static_cast<const Params *>(data); uptr begin = reinterpret_cast<uptr>(chunk); uptr end = begin + size; - auto i = __sanitizer::InternalLowerBound(params->allocator_caches, 0, - params->allocator_caches.size(), - begin, CompareLess<uptr>()); + auto i = __sanitizer::InternalLowerBound(params->allocator_caches, begin); if (i < params->allocator_caches.size() && params->allocator_caches[i] >= begin && end - params->allocator_caches[i] <= sizeof(AllocatorCache)) { diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h index bce24d68045b..60d1c62b0681 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h @@ -467,6 +467,7 @@ inline int ToLower(int c) { template<typename T> class InternalMmapVectorNoCtor { public: + using value_type = T; void Initialize(uptr initial_capacity) { capacity_bytes_ = 0; size_ = 0; @@ -651,9 +652,13 @@ void Sort(T *v, uptr size, Compare comp = {}) { // Works like std::lower_bound: finds the first element that is not less // than the val. -template <class Container, class Value, class Compare> -uptr InternalLowerBound(const Container &v, uptr first, uptr last, - const Value &val, Compare comp) { +template <class Container, + class Compare = CompareLess<typename Container::value_type>> +uptr InternalLowerBound(const Container &v, + const typename Container::value_type &val, + Compare comp = {}) { + uptr first = 0; + uptr last = v.size(); while (last > first) { uptr mid = (first + last) / 2; if (comp(v[mid], val)) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cpp index 4692f50d3237..44a95214e38b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stackdepot.cpp @@ -145,8 +145,7 @@ StackTrace StackDepotReverseMap::Get(u32 id) { if (!map_.size()) return StackTrace(); IdDescPair pair = {id, nullptr}; - uptr idx = - InternalLowerBound(map_, 0, map_.size(), pair, IdDescPair::IdComparator); + uptr idx = InternalLowerBound(map_, pair, IdDescPair::IdComparator); if (idx > map_.size() || map_[idx].id != id) return StackTrace(); return map_[idx].desc->load(); diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_common_test.cpp b/compiler-rt/lib/sanitizer_common/tests/sanitizer_common_test.cpp index 259bd99324a2..1d0806c4c404 100644 --- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_common_test.cpp +++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_common_test.cpp @@ -226,27 +226,21 @@ bool UptrLess(uptr a, uptr b) { } TEST(SanitizerCommon, InternalLowerBound) { - static const uptr kSize = 5; - int arr[kSize]; - arr[0] = 1; - arr[1] = 3; - arr[2] = 5; - arr[3] = 7; - arr[4] = 11; - - EXPECT_EQ(0u, InternalLowerBound(arr, 0, kSize, 0, UptrLess)); - EXPECT_EQ(0u, InternalLowerBound(arr, 0, kSize, 1, UptrLess)); - EXPECT_EQ(1u, InternalLowerBound(arr, 0, kSize, 2, UptrLess)); - EXPECT_EQ(1u, InternalLowerBound(arr, 0, kSize, 3, UptrLess)); - EXPECT_EQ(2u, InternalLowerBound(arr, 0, kSize, 4, UptrLess)); - EXPECT_EQ(2u, InternalLowerBound(arr, 0, kSize, 5, UptrLess)); - EXPECT_EQ(3u, InternalLowerBound(arr, 0, kSize, 6, UptrLess)); - EXPECT_EQ(3u, InternalLowerBound(arr, 0, kSize, 7, UptrLess)); - EXPECT_EQ(4u, InternalLowerBound(arr, 0, kSize, 8, UptrLess)); - EXPECT_EQ(4u, InternalLowerBound(arr, 0, kSize, 9, UptrLess)); - EXPECT_EQ(4u, InternalLowerBound(arr, 0, kSize, 10, UptrLess)); - EXPECT_EQ(4u, InternalLowerBound(arr, 0, kSize, 11, UptrLess)); - EXPECT_EQ(5u, InternalLowerBound(arr, 0, kSize, 12, UptrLess)); + std::vector<int> arr = {1, 3, 5, 7, 11}; + + EXPECT_EQ(0u, InternalLowerBound(arr, 0)); + EXPECT_EQ(0u, InternalLowerBound(arr, 1)); + EXPECT_EQ(1u, InternalLowerBound(arr, 2)); + EXPECT_EQ(1u, InternalLowerBound(arr, 3)); + EXPECT_EQ(2u, InternalLowerBound(arr, 4)); + EXPECT_EQ(2u, InternalLowerBound(arr, 5)); + EXPECT_EQ(3u, InternalLowerBound(arr, 6)); + EXPECT_EQ(3u, InternalLowerBound(arr, 7)); + EXPECT_EQ(4u, InternalLowerBound(arr, 8)); + EXPECT_EQ(4u, InternalLowerBound(arr, 9)); + EXPECT_EQ(4u, InternalLowerBound(arr, 10)); + EXPECT_EQ(4u, InternalLowerBound(arr, 11)); + EXPECT_EQ(5u, InternalLowerBound(arr, 12)); } TEST(SanitizerCommon, InternalLowerBoundVsStdLowerBound) { @@ -268,8 +262,8 @@ TEST(SanitizerCommon, InternalLowerBoundVsStdLowerBound) { for (auto to_find : {val - 1, val, val + 1}) { uptr expected = std::lower_bound(data.begin(), data.end(), to_find) - data.begin(); - EXPECT_EQ(expected, InternalLowerBound(data.data(), 0, data.size(), - to_find, std::less<int>())); + EXPECT_EQ(expected, + InternalLowerBound(data, to_find, std::less<int>())); } } } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits