1ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===// 2ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 3ee226c05af9e0187098f43fb71465a581487af9bDan Austin// The LLVM Compiler Infrastructure 4ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 5ee226c05af9e0187098f43fb71465a581487af9bDan Austin// This file is dual licensed under the MIT and the University of Illinois Open 6ee226c05af9e0187098f43fb71465a581487af9bDan Austin// Source Licenses. See LICENSE.TXT for details. 7ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 8ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===// 9ee226c05af9e0187098f43fb71465a581487af9bDan Austin 10ee226c05af9e0187098f43fb71465a581487af9bDan Austin// UNSUPPORTED: c++98, c++03 11ee226c05af9e0187098f43fb71465a581487af9bDan Austin 12ee226c05af9e0187098f43fb71465a581487af9bDan Austin// <experimental/memory_resource> 13ee226c05af9e0187098f43fb71465a581487af9bDan Austin 14ee226c05af9e0187098f43fb71465a581487af9bDan Austin// template <class T> class polymorphic_allocator 15ee226c05af9e0187098f43fb71465a581487af9bDan Austin 16ee226c05af9e0187098f43fb71465a581487af9bDan Austin// T* polymorphic_allocator<T>::deallocate(T*, size_t size) 17ee226c05af9e0187098f43fb71465a581487af9bDan Austin 18ee226c05af9e0187098f43fb71465a581487af9bDan Austinint AssertCount = 0; 19ee226c05af9e0187098f43fb71465a581487af9bDan Austin 20ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : (void)::AssertCount++) 21ee226c05af9e0187098f43fb71465a581487af9bDan Austin#define _LIBCPP_DEBUG 0 22ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <experimental/memory_resource> 23ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <type_traits> 24ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <cassert> 25ee226c05af9e0187098f43fb71465a581487af9bDan Austin 26ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_memory_resource.hpp" 27ee226c05af9e0187098f43fb71465a581487af9bDan Austin 28ee226c05af9e0187098f43fb71465a581487af9bDan Austinnamespace ex = std::experimental::pmr; 29ee226c05af9e0187098f43fb71465a581487af9bDan Austin 30ee226c05af9e0187098f43fb71465a581487af9bDan Austinint main() 31ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 32ee226c05af9e0187098f43fb71465a581487af9bDan Austin using Alloc = NullAllocator<char>; 33ee226c05af9e0187098f43fb71465a581487af9bDan Austin using R = ex::resource_adaptor<Alloc>; 34ee226c05af9e0187098f43fb71465a581487af9bDan Austin AllocController P; 35ee226c05af9e0187098f43fb71465a581487af9bDan Austin ex::resource_adaptor<Alloc> r(Alloc{P}); 36ee226c05af9e0187098f43fb71465a581487af9bDan Austin ex::memory_resource & m1 = r; 37ee226c05af9e0187098f43fb71465a581487af9bDan Austin 38ee226c05af9e0187098f43fb71465a581487af9bDan Austin std::size_t maxSize = std::numeric_limits<std::size_t>::max() 39ee226c05af9e0187098f43fb71465a581487af9bDan Austin - alignof(std::max_align_t); 40ee226c05af9e0187098f43fb71465a581487af9bDan Austin 41ee226c05af9e0187098f43fb71465a581487af9bDan Austin m1.deallocate(nullptr, maxSize); 42ee226c05af9e0187098f43fb71465a581487af9bDan Austin assert(AssertCount == 0); 43ee226c05af9e0187098f43fb71465a581487af9bDan Austin m1.deallocate(nullptr, maxSize + 1); 44ee226c05af9e0187098f43fb71465a581487af9bDan Austin assert(AssertCount >= 1); 45ee226c05af9e0187098f43fb71465a581487af9bDan Austin} 46