// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_TEST_MEMORY_DANGLING_PTR_INSTRUMENTATION_H_ #define BASE_TEST_MEMORY_DANGLING_PTR_INSTRUMENTATION_H_ #include <cstdint> #include <string_view> #include "base/memory/raw_ptr.h" #include "base/types/expected.h" #include "partition_alloc/dangling_raw_ptr_checks.h" #include "testing/gtest/include/gtest/gtest.h" namespace base::test { // It is difficult to configure malloc as partition_alloc in death test and // enable BackupRefPtr. This can be used as an alternative. This replaces a // crash by incrementing a set of counters. // // Usage: // // ```cpp // TEST(DanglingTest, Basic) { // auto instrumentation = test::DanglingPtrInstrumentation::Create(); // if (!instrumentation.has_value()) { // GTEST_SKIP() << instrumentation.error(); // } // // [...] // EXPECT_EQ(instrumentation->dangling_ptr_detected(), 0u); // EXPECT_EQ(instrumentation->dangling_ptr_released(), 0u); // } // ``` class DanglingPtrInstrumentation { … }; } // namespace base::test #endif // BASE_TEST_MEMORY_DANGLING_PTR_INSTRUMENTATION_H_