add STL allocators that use a specific heap and can destroy at the end; see original PR #625 by @vmarkovtsev

This commit is contained in:
Daan Leijen 2022-11-22 16:58:32 -08:00
parent 6e2b077b35
commit 9617f16df9
3 changed files with 163 additions and 1 deletions

View file

@ -36,6 +36,8 @@ static void fail_aslr(); // issue #372
static void tsan_numa_test(); // issue #414
static void strdup_test(); // issue #445
static void test_stl_allocators();
int main() {
mi_stats_reset(); // ignore earlier allocations
heap_thread_free_large();
@ -46,6 +48,8 @@ int main() {
tsan_numa_test();
strdup_test();
test_stl_allocators();
test_mt_shutdown();
//fail_aslr();
mi_stats_print(NULL);
@ -122,6 +126,43 @@ static bool test_stl_allocator2() {
return vec.size() == 0;
}
static bool test_stl_allocator3() {
std::vector<int, mi_heap_stl_allocator<int> > vec;
vec.push_back(1);
vec.pop_back();
return vec.size() == 0;
}
static bool test_stl_allocator4() {
std::vector<some_struct, mi_heap_stl_allocator<some_struct> > vec;
vec.push_back(some_struct());
vec.pop_back();
return vec.size() == 0;
}
static bool test_stl_allocator5() {
std::vector<int, mi_heap_destroy_stl_allocator<int> > vec;
vec.push_back(1);
vec.pop_back();
return vec.size() == 0;
}
static bool test_stl_allocator6() {
std::vector<some_struct, mi_heap_destroy_stl_allocator<some_struct> > vec;
vec.push_back(some_struct());
vec.pop_back();
return vec.size() == 0;
}
static void test_stl_allocators() {
test_stl_allocator1();
test_stl_allocator2();
test_stl_allocator3();
test_stl_allocator4();
test_stl_allocator5();
test_stl_allocator6();
}
// issue 445
static void strdup_test() {
#ifdef _MSC_VER