71 lines · cpp
1//===-- iterate.cpp ---------------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "gwp_asan/tests/harness.h"10 11#include <algorithm>12#include <set>13#include <vector>14 15TEST_F(CustomGuardedPoolAllocator, Iterate) {16 InitNumSlots(7);17 std::vector<std::pair<void *, size_t>> Allocated;18 auto alloc = [&](size_t size) {19 Allocated.push_back({GPA.allocate(size), size});20 };21 22 void *Ptr = GPA.allocate(5);23 alloc(2);24 alloc(1);25 alloc(100);26 GPA.deallocate(Ptr);27 alloc(42);28 std::sort(Allocated.begin(), Allocated.end());29 30 GPA.disable();31 void *Base = Allocated[0].first;32 size_t Size = reinterpret_cast<size_t>(Allocated.back().first) -33 reinterpret_cast<size_t>(Base) + 1;34 std::vector<std::pair<void *, size_t>> Found;35 GPA.iterate(36 Base, Size,37 [](uintptr_t Addr, size_t Size, void *Arg) {38 reinterpret_cast<std::vector<std::pair<void *, size_t>> *>(Arg)39 ->push_back({(void *)Addr, Size});40 },41 reinterpret_cast<void *>(&Found));42 GPA.enable();43 44 std::sort(Found.begin(), Found.end());45 EXPECT_EQ(Allocated, Found);46 47 // Now without the last allocation.48 GPA.disable();49 Size = reinterpret_cast<size_t>(Allocated.back().first) -50 reinterpret_cast<size_t>(Base); // Allocated.back() is out of range.51 Found.clear();52 GPA.iterate(53 Base, Size,54 [](uintptr_t Addr, size_t Size, void *Arg) {55 reinterpret_cast<std::vector<std::pair<void *, size_t>> *>(Arg)56 ->push_back({(void *)Addr, Size});57 },58 reinterpret_cast<void *>(&Found));59 GPA.enable();60 61 // We should have found every allocation but the last.62 // Remove it and compare the rest.63 std::sort(Found.begin(), Found.end());64 GPA.deallocate(Allocated.back().first);65 Allocated.pop_back();66 EXPECT_EQ(Allocated, Found);67 68 for (auto PS : Allocated)69 GPA.deallocate(PS.first);70}71