diff options
| author | Vitaly Buka <vitalybuka@google.com> | 2019-04-26 18:22:47 +0000 |
|---|---|---|
| committer | Vitaly Buka <vitalybuka@google.com> | 2019-04-26 18:22:47 +0000 |
| commit | 85dcdae5e366e011a314e86f62d03fdea8d2ffd4 (patch) | |
| tree | 6ec12d6053920d32154e4b59682563e8897be640 | |
| parent | 27e01e675c1acd9f648847d96f296b611f22628f (diff) | |
| download | bcm5719-llvm-85dcdae5e366e011a314e86f62d03fdea8d2ffd4.tar.gz bcm5719-llvm-85dcdae5e366e011a314e86f62d03fdea8d2ffd4.zip | |
[sanitizer] NFC: add static_assert to confirm that we use optimal ByteMap type
Summary: If bots work we can replace #ifs with template specialization by TwoLevelByteMapSize1.
Reviewers: eugenis
Subscribers: kubamracek, #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D61200
llvm-svn: 359333
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h index d773815f9c6..04f032605ab 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary32.h @@ -47,6 +47,10 @@ struct SizeClassAllocator32FlagMasks { // Bit masks. template <class Params> class SizeClassAllocator32 { + private: + static const u64 TwoLevelByteMapSize1 = + (Params::kSpaceSize >> Params::kRegionSizeLog) >> 12; + public: using AddressSpaceView = typename Params::AddressSpaceView; static const uptr kSpaceBeg = Params::kSpaceBeg; @@ -58,12 +62,12 @@ class SizeClassAllocator32 { typedef typename Params::MapUnmapCallback MapUnmapCallback; #if SANITIZER_WORDSIZE == 32 + static_assert(TwoLevelByteMapSize1 <= 128, "FlatByteMap should be used"); using BM = FlatByteMap<(Params::kSpaceSize >> Params::kRegionSizeLog), AddressSpaceView>; #elif SANITIZER_WORDSIZE == 64 - using BM = - TwoLevelByteMap<((Params::kSpaceSize >> Params::kRegionSizeLog) >> 12), - 1 << 12, AddressSpaceView>; + static_assert(TwoLevelByteMapSize1 > 128, "TwoLevelByteMap should be used"); + using BM = TwoLevelByteMap<TwoLevelByteMapSize1, 1 << 12, AddressSpaceView>; #endif static_assert((Params::kFlags & SizeClassAllocator32FlagMasks::kForTest) || is_same<BM, ByteMap>::value, |

