diff --git a/libcxx/include/__memory_resource/memory_resource.h b/libcxx/include/__memory_resource/memory_resource.h --- a/libcxx/include/__memory_resource/memory_resource.h +++ b/libcxx/include/__memory_resource/memory_resource.h @@ -32,11 +32,13 @@ public: virtual ~memory_resource() = default; - _LIBCPP_HIDE_FROM_ABI void* allocate(size_t __bytes, size_t __align = __max_align) { + [[using __gnu__: __returns_nonnull__, __alloc_size__(2), __alloc_align__(3)]] _LIBCPP_HIDE_FROM_ABI void* + allocate(size_t __bytes, size_t __align = __max_align) { return do_allocate(__bytes, __align); } - _LIBCPP_HIDE_FROM_ABI void deallocate(void* __p, size_t __bytes, size_t __align = __max_align) { + [[__gnu__::__nonnull__]] _LIBCPP_HIDE_FROM_ABI void + deallocate(void* __p, size_t __bytes, size_t __align = __max_align) { do_deallocate(__p, __bytes, __align); } @@ -61,10 +63,14 @@ // [mem.res.global] -_LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* get_default_resource() noexcept; -_LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* set_default_resource(memory_resource*) noexcept; -_LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* new_delete_resource() noexcept; -_LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* null_memory_resource() noexcept; +[[using __gnu__: __returns_nonnull__, __pure__]] _LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* +get_default_resource() noexcept; +[[using __gnu__: __returns_nonnull__, __pure__]] _LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* +set_default_resource(memory_resource*) noexcept; +[[using __gnu__: __returns_nonnull__, __const__]] _LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* +new_delete_resource() noexcept; +[[using __gnu__: __returns_nonnull__, __const__]] _LIBCPP_AVAILABILITY_MEMORY_RESOURCE _LIBCPP_FUNC_VIS memory_resource* +null_memory_resource() noexcept; } // namespace pmr diff --git a/libcxx/include/__memory_resource/unsynchronized_pool_resource.h b/libcxx/include/__memory_resource/unsynchronized_pool_resource.h --- a/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +++ b/libcxx/include/__memory_resource/unsynchronized_pool_resource.h @@ -75,11 +75,11 @@ unsynchronized_pool_resource& operator=(const unsynchronized_pool_resource&) = delete; - _LIBCPP_AVAILABILITY_MEMORY_RESOURCE void release(); + [[__gnu__::__pure__]] _LIBCPP_AVAILABILITY_MEMORY_RESOURCE void release(); _LIBCPP_HIDE_FROM_ABI memory_resource* upstream_resource() const { return __res_; } - _LIBCPP_AVAILABILITY_MEMORY_RESOURCE pool_options options() const; + [[__gnu__::__pure__]] _LIBCPP_AVAILABILITY_MEMORY_RESOURCE pool_options options() const; protected: _LIBCPP_AVAILABILITY_MEMORY_RESOURCE void* do_allocate(size_t __bytes, size_t __align) override; // key function