1// { dg-do compile } 2 3typedef __SIZE_TYPE__ size_t; 4class bad_alloc { }; 5typedef struct { 6} __gthread_mutex_t; 7int __gthread_mutex_unlock (__gthread_mutex_t *__mutex); 8class __concurrence_unlock_error { 9}; 10inline void __throw_concurrence_unlock_error() { 11 throw __concurrence_unlock_error(); 12} 13class __mutex { 14 __gthread_mutex_t _M_mutex; 15public: 16 void unlock() { 17 if (__gthread_mutex_unlock(&_M_mutex) != 0) 18 __throw_concurrence_unlock_error(); 19 } 20}; 21class free_list { 22 typedef __mutex __mutex_type; 23 __mutex_type& _M_get_mutex(); 24 void _M_get(size_t __sz) throw(bad_alloc); 25}; 26void free_list::_M_get(size_t __sz) throw(bad_alloc) 27{ 28 __mutex_type& __bfl_mutex = _M_get_mutex(); 29 __bfl_mutex.unlock(); 30 int __ctr = 2; 31 while (__ctr) { 32 size_t* __ret = 0; 33 --__ctr; 34 try { 35 __ret = (size_t*) (::operator new(__sz + sizeof(size_t))); 36 } 37 catch(const bad_alloc&) { } 38 } 39} 40