Home | History | Annotate | Download | only in memory.resource.global
      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // REQUIRES: c++experimental
     11 // UNSUPPORTED: c++98, c++03
     12 
     13 // <experimental/memory_resource>
     14 
     15 // memory_resource * new_delete_resource()
     16 
     17 // The lifetime of the value returned by 'new_delete_resource()' should
     18 // never end, even very late into program termination. This test constructs
     19 // attempts to use 'new_delete_resource()' very late in program termination
     20 // to detect lifetime issues.
     21 
     22 #include <experimental/memory_resource>
     23 #include <type_traits>
     24 #include <cassert>
     25 
     26 namespace ex = std::experimental::pmr;
     27 
     28 struct POSType {
     29   ex::memory_resource* res = nullptr;
     30   void* ptr = nullptr;
     31   int n = 0;
     32   POSType() {res = ex::new_delete_resource(); ptr = res->allocate(42); n = 42; }
     33   POSType(ex::memory_resource* r, void* p, int s) : res(r), ptr(p), n(s) {}
     34   ~POSType() { if (ptr) res->deallocate(ptr, n); }
     35 };
     36 
     37 void swap(POSType & L, POSType & R) {
     38     std::swap(L.res, R.res);
     39     std::swap(L.ptr, R.ptr);
     40     std::swap(L.n, R.n);
     41 }
     42 
     43 POSType constructed_before_resources;
     44 
     45 // Constructs resources
     46 ex::memory_resource* resource = ex::new_delete_resource();
     47 
     48 POSType constructed_after_resources(resource, resource->allocate(1024), 1024);
     49 
     50 int main()
     51 {
     52     swap(constructed_after_resources, constructed_before_resources);
     53 }
     54