| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // This file contains intentional memory errors, some of which may lead to | 5 // This file contains intentional memory errors, some of which may lead to |
| 6 // crashes if the test is ran without special memory testing tools. We use these | 6 // crashes if the test is ran without special memory testing tools. We use these |
| 7 // errors to verify the sanity of the tools. | 7 // errors to verify the sanity of the tools. |
| 8 | 8 |
| 9 #include "base/atomicops.h" | 9 #include "base/atomicops.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 int* volatile leak = new int[256]; // Leak some memory intentionally. | 83 int* volatile leak = new int[256]; // Leak some memory intentionally. |
| 84 leak[4] = 1; // Make sure the allocated memory is used. | 84 leak[4] = 1; // Make sure the allocated memory is used. |
| 85 } | 85 } |
| 86 | 86 |
| 87 #if defined(ADDRESS_SANITIZER) && (defined(OS_IOS) || defined(OS_WIN)) | 87 #if defined(ADDRESS_SANITIZER) && (defined(OS_IOS) || defined(OS_WIN)) |
| 88 // Because iOS doesn't support death tests, each of the following tests will | 88 // Because iOS doesn't support death tests, each of the following tests will |
| 89 // crash the whole program under Asan. On Windows Asan is based on SyzyAsan, the | 89 // crash the whole program under Asan. On Windows Asan is based on SyzyAsan, the |
| 90 // error report mecanism is different than with Asan so those test will fail. | 90 // error report mecanism is different than with Asan so those test will fail. |
| 91 #define MAYBE_AccessesToNewMemory DISABLED_AccessesToNewMemory | 91 #define MAYBE_AccessesToNewMemory DISABLED_AccessesToNewMemory |
| 92 #define MAYBE_AccessesToMallocMemory DISABLED_AccessesToMallocMemory | 92 #define MAYBE_AccessesToMallocMemory DISABLED_AccessesToMallocMemory |
| 93 #define MAYBE_ArrayDeletedWithoutBraces DISABLED_ArrayDeletedWithoutBraces | |
| 94 #define MAYBE_SingleElementDeletedWithBraces \ | |
| 95 DISABLED_SingleElementDeletedWithBraces | |
| 96 #else | 93 #else |
| 97 #define MAYBE_AccessesToNewMemory AccessesToNewMemory | 94 #define MAYBE_AccessesToNewMemory AccessesToNewMemory |
| 98 #define MAYBE_AccessesToMallocMemory AccessesToMallocMemory | 95 #define MAYBE_AccessesToMallocMemory AccessesToMallocMemory |
| 99 #define MAYBE_ArrayDeletedWithoutBraces ArrayDeletedWithoutBraces | 96 #define MAYBE_ArrayDeletedWithoutBraces ArrayDeletedWithoutBraces |
| 100 #define MAYBE_SingleElementDeletedWithBraces SingleElementDeletedWithBraces | 97 #define MAYBE_SingleElementDeletedWithBraces SingleElementDeletedWithBraces |
| 101 #endif | 98 #endif |
| 99 |
| 100 // The following tests pass with Clang r170392, but not r172454, which |
| 101 // makes AddressSanitizer detect errors in them. We disable these tests under |
| 102 // AddressSanitizer until we fully switch to Clang r172454. After that the |
| 103 // tests should be put back under the (defined(OS_IOS) || defined(OS_WIN)) |
| 104 // clause above. |
| 105 // See also http://crbug.com/172614. |
| 106 #if defined(ADDRESS_SANITIZER) |
| 107 #define MAYBE_SingleElementDeletedWithBraces \ |
| 108 DISABLED_SingleElementDeletedWithBraces |
| 109 #define MAYBE_ArrayDeletedWithoutBraces DISABLED_ArrayDeletedWithoutBraces |
| 110 #endif |
| 102 TEST(ToolsSanityTest, MAYBE_AccessesToNewMemory) { | 111 TEST(ToolsSanityTest, MAYBE_AccessesToNewMemory) { |
| 103 char *foo = new char[10]; | 112 char *foo = new char[10]; |
| 104 MakeSomeErrors(foo, 10); | 113 MakeSomeErrors(foo, 10); |
| 105 delete [] foo; | 114 delete [] foo; |
| 106 // Use after delete. | 115 // Use after delete. |
| 107 HARMFUL_ACCESS(foo[5] = 0, "heap-use-after-free"); | 116 HARMFUL_ACCESS(foo[5] = 0, "heap-use-after-free"); |
| 108 } | 117 } |
| 109 | 118 |
| 110 TEST(ToolsSanityTest, MAYBE_AccessesToMallocMemory) { | 119 TEST(ToolsSanityTest, MAYBE_AccessesToMallocMemory) { |
| 111 char *foo = reinterpret_cast<char*>(malloc(10)); | 120 char *foo = reinterpret_cast<char*>(malloc(10)); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 | 263 |
| 255 TEST(ToolsSanityTest, AtomicsAreIgnored) { | 264 TEST(ToolsSanityTest, AtomicsAreIgnored) { |
| 256 base::subtle::Atomic32 shared = 0; | 265 base::subtle::Atomic32 shared = 0; |
| 257 ReleaseStoreThread thread1(&shared); | 266 ReleaseStoreThread thread1(&shared); |
| 258 AcquireLoadThread thread2(&shared); | 267 AcquireLoadThread thread2(&shared); |
| 259 RunInParallel(&thread1, &thread2); | 268 RunInParallel(&thread1, &thread2); |
| 260 EXPECT_EQ(kMagicValue, shared); | 269 EXPECT_EQ(kMagicValue, shared); |
| 261 } | 270 } |
| 262 | 271 |
| 263 } // namespace base | 272 } // namespace base |
| OLD | NEW |