[tsan] make the 64-bit allocator build (but not work) in 32-bit mode to simplify...
authorKostya Serebryany <kcc@google.com>
Wed, 5 Dec 2012 07:11:47 +0000 (07:11 +0000)
committerKostya Serebryany <kcc@google.com>
Wed, 5 Dec 2012 07:11:47 +0000 (07:11 +0000)
llvm-svn: 169361

compiler-rt/lib/sanitizer_common/sanitizer_allocator64.h

index 7686796..f2e13af 100644 (file)
 
 #include "sanitizer_allocator.h"
 
-#if SANITIZER_WORDSIZE != 64
-# error "sanitizer_allocator64.h can only be used on 64-bit platforms"
-#endif
-
 namespace __sanitizer {
 
+// SizeClassAllocator64 -- allocator for 64-bit address space.
+//
 // Space: a portion of address space of kSpaceSize bytes starting at
 // a fixed address (kSpaceBeg). Both constants are powers of two and
 // kSpaceBeg is kSpaceSize-aligned.
@@ -143,10 +141,11 @@ class SizeClassAllocator64 {
   static const uptr kNumClasses = SizeClassMap::kNumClasses;  // 2^k <= 256
 
  private:
+  static const uptr kRegionSize = kSpaceSize / kNumClasses;
   COMPILER_CHECK(kSpaceBeg % kSpaceSize == 0);
   COMPILER_CHECK(kNumClasses <= SizeClassMap::kNumClasses);
-  static const uptr kRegionSize = kSpaceSize / kNumClasses;
-  COMPILER_CHECK((kRegionSize >> 32) > 0);  // kRegionSize must be >= 2^32.
+  // kRegionSize must be >= 2^32.
+  COMPILER_CHECK((kRegionSize) >= (1ULL << (SANITIZER_WORDSIZE / 2)));
   // Populate the free list with at most this number of bytes at once
   // or with one element if its size is greater.
   static const uptr kPopulateSize = 1 << 18;