| // { dg-do compile } |
| |
| typedef __SIZE_TYPE__ size_t; |
| class bad_alloc { }; |
| typedef struct { |
| } __gthread_mutex_t; |
| int __gthread_mutex_unlock (__gthread_mutex_t *__mutex); |
| class __concurrence_unlock_error { |
| }; |
| inline void __throw_concurrence_unlock_error() { |
| throw __concurrence_unlock_error(); |
| } |
| class __mutex { |
| __gthread_mutex_t _M_mutex; |
| public: |
| void unlock() { |
| if (__gthread_mutex_unlock(&_M_mutex) != 0) |
| __throw_concurrence_unlock_error(); |
| } |
| }; |
| class free_list { |
| typedef __mutex __mutex_type; |
| __mutex_type& _M_get_mutex(); |
| void _M_get(size_t __sz) |
| #if __cplusplus <= 201402L |
| throw(bad_alloc) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } |
| #endif |
| ; |
| }; |
| void free_list::_M_get(size_t __sz) |
| #if __cplusplus <= 201402L |
| throw(bad_alloc) // { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } } |
| #endif |
| { |
| __mutex_type& __bfl_mutex = _M_get_mutex(); |
| __bfl_mutex.unlock(); |
| int __ctr = 2; |
| while (__ctr) { |
| size_t* __ret = 0; |
| --__ctr; |
| try { |
| __ret = (size_t*) (::operator new(__sz + sizeof(size_t))); |
| } |
| catch(const bad_alloc&) { } |
| } |
| } |