diff options
Diffstat (limited to 'base/allocator/tcmalloc_unittest.cc')
-rw-r--r-- | base/allocator/tcmalloc_unittest.cc | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/base/allocator/tcmalloc_unittest.cc b/base/allocator/tcmalloc_unittest.cc deleted file mode 100644 index 0f7082eb02..0000000000 --- a/base/allocator/tcmalloc_unittest.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -#include <stddef.h> -#include <stdio.h> - -#include "testing/gtest/include/gtest/gtest.h" - -// TCMalloc header files. -#include "common.h" // For TCMalloc constants like page size, etc. - -// TCMalloc implementation. -#include "debugallocation_shim.cc" - -namespace { - -void* TCMallocDoMallocForTest(size_t size) { - return do_malloc(size); -} - -void TCMallocDoFreeForTest(void* ptr) { - do_free(ptr); -} - -size_t ExcludeSpaceForMarkForTest(size_t size) { - return ExcludeSpaceForMark(size); -} - -} // namespace - -TEST(TCMallocFreeCheck, BadPointerInFirstPageOfTheLargeObject) { - char* p = reinterpret_cast<char*>( - TCMallocDoMallocForTest(ExcludeSpaceForMarkForTest(kMaxSize + 1))); - for (int offset = 1; offset < kPageSize ; offset <<= 1) { - ASSERT_DEATH(TCMallocDoFreeForTest(p + offset), - "Pointer is not pointing to the start of a span"); - } -} - -TEST(TCMallocFreeCheck, BadPageAlignedPointerInsideLargeObject) { - char* p = reinterpret_cast<char*>( - TCMallocDoMallocForTest(ExcludeSpaceForMarkForTest(kMaxSize + 1))); - - for (int offset = kPageSize; offset < kMaxSize; offset += kPageSize) { - // Only the first and last page of a span are in heap map. So for others - // tcmalloc will give a general error of invalid pointer. - ASSERT_DEATH(TCMallocDoFreeForTest(p + offset), - "Attempt to free invalid pointer"); - } - ASSERT_DEATH(TCMallocDoFreeForTest(p + kMaxSize), - "Pointer is not pointing to the start of a span"); -} - -TEST(TCMallocFreeCheck, DoubleFreeLargeObject) { - char* p = reinterpret_cast<char*>( - TCMallocDoMallocForTest(ExcludeSpaceForMarkForTest(kMaxSize + 1))); - ASSERT_DEATH(TCMallocDoFreeForTest(p); TCMallocDoFreeForTest(p), - "Object was not in-use"); -} - - -#ifdef NDEBUG -TEST(TCMallocFreeCheck, DoubleFreeSmallObject) { - for (size_t size = 1; - size <= ExcludeSpaceForMarkForTest(kMaxSize); - size <<= 1) { - char* p = reinterpret_cast<char*>(TCMallocDoMallocForTest(size)); - ASSERT_DEATH(TCMallocDoFreeForTest(p); TCMallocDoFreeForTest(p), - "Circular loop in list detected"); - } -} -#else -TEST(TCMallocFreeCheck, DoubleFreeSmallObject) { - size_t size = 1; - - // When the object is small, tcmalloc validation can not distinguish normal - // memory corruption or double free, because there's not enough space in - // freed objects to keep the mark. - for (; size <= ExcludeSpaceForMarkForTest(kMinClassSize); size <<= 1) { - char* p = reinterpret_cast<char*>(TCMallocDoMallocForTest(size)); - ASSERT_DEATH(TCMallocDoFreeForTest(p); TCMallocDoFreeForTest(p), - "Memory corrupted"); - } - - for (; size <= ExcludeSpaceForMarkForTest(kMaxSize); size <<= 1) { - char* p = reinterpret_cast<char*>(TCMallocDoMallocForTest(size)); - ASSERT_DEATH(TCMallocDoFreeForTest(p); TCMallocDoFreeForTest(p), - "Attempt to double free"); - } -} -#endif - -int main(int argc, char **argv) { - testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} |