diff options
author | Dan Albert <danalbert@google.com> | 2016-02-24 13:48:45 -0800 |
---|---|---|
committer | Dan Albert <danalbert@google.com> | 2016-02-24 13:51:18 -0800 |
commit | b9de1157289455b0ca26daff519d4a0ddcd1fa13 (patch) | |
tree | 4c56cc0a34b91f17033a40a455f26652304f7b8d /gcc-4.8.1/gcc/testsuite/g++.dg/tm | |
parent | 098157a754787181cfa10e71325832448ddcea98 (diff) | |
download | toolchain_gcc-b9de1157289455b0ca26daff519d4a0ddcd1fa13.tar.gz toolchain_gcc-b9de1157289455b0ca26daff519d4a0ddcd1fa13.tar.bz2 toolchain_gcc-b9de1157289455b0ca26daff519d4a0ddcd1fa13.zip |
Update 4.8.1 to 4.8.3.
My previous drop was the wrong version. The platform mingw is
currently using 4.8.3, not 4.8.1 (not sure how I got that wrong).
From ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.3/gcc-4.8.3.tar.bz2.
Bug: http://b/26523949
Change-Id: Id85f1bdcbbaf78c7d0b5a69e74c798a08f341c35
Diffstat (limited to 'gcc-4.8.1/gcc/testsuite/g++.dg/tm')
48 files changed, 0 insertions, 5652 deletions
diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/20100429.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/20100429.C deleted file mode 100644 index 087ce32b2..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/20100429.C +++ /dev/null @@ -1,15 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -int foo(int a); -int foo(float a); -int -bar(int a) -{ - int r; - __transaction_atomic - { - r = foo(a); // { dg-error "unsafe function call 'int foo\\(int\\)'" } - } - return r; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/20100727.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/20100727.C deleted file mode 100644 index bda2df060..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/20100727.C +++ /dev/null @@ -1,796 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -typedef long int ptrdiff_t; -typedef long unsigned int size_t; -namespace std __attribute__ ((__visibility__ ("default"))) -{ - using::ptrdiff_t; - using::size_t; -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - struct input_iterator_tag - { - }; - struct output_iterator_tag - { - }; - struct forward_iterator_tag:public input_iterator_tag - { - }; - struct bidirectional_iterator_tag:public forward_iterator_tag - { - }; - struct random_access_iterator_tag:public bidirectional_iterator_tag - { - }; - template < typename _Category, typename _Tp, typename _Distance = - ptrdiff_t, typename _Pointer = _Tp *, typename _Reference = - _Tp & >struct iterator - { - typedef _Category iterator_category; - typedef _Tp value_type; - typedef _Distance difference_type; - typedef _Pointer pointer; - typedef _Reference reference; - }; - template < typename _Iterator > struct iterator_traits - { - typedef typename _Iterator::iterator_category iterator_category; - typedef typename _Iterator::value_type value_type; - typedef typename _Iterator::difference_type difference_type; - typedef typename _Iterator::pointer pointer; - typedef typename _Iterator::reference reference; - }; - template < typename _Tp > struct iterator_traits <_Tp * > - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef _Tp *pointer; - typedef _Tp & reference; - }; - template < typename _Tp > struct iterator_traits <const _Tp *> - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef const _Tp *pointer; - typedef const _Tp & reference; - }; - template < typename _Iter > inline typename iterator_traits < - _Iter >::iterator_category __iterator_category (const _Iter &) - { - return typename iterator_traits < _Iter >::iterator_category (); - } -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ -template < typename _Iterator > class reverse_iterator:public iterator < typename iterator_traits < _Iterator >::iterator_category, - typename iterator_traits < _Iterator >::value_type, - typename iterator_traits < _Iterator >::difference_type, - typename iterator_traits < _Iterator >::pointer, - typename iterator_traits < _Iterator >::reference > - { - protected:_Iterator current; - typedef iterator_traits < _Iterator > __traits_type; - public:typedef _Iterator iterator_type; - typedef typename __traits_type::difference_type difference_type; - typedef typename __traits_type::pointer pointer; - typedef typename __traits_type::reference reference; - reverse_iterator ():current () - { - } explicit reverse_iterator (iterator_type __x):current (__x) - { - } reverse_iterator (const reverse_iterator & __x):current (__x.current) - { - } template < typename _Iter > reverse_iterator (const reverse_iterator < - _Iter > - &__x):current (__x. - base ()) - { - } iterator_type base () const - { - return current; - } - reference operator* () const - { - _Iterator __tmp = current; - return *--__tmp; - } - pointer operator-> () const - { - return &(operator* ()); - } - reverse_iterator & operator++ () - { - --current; - return *this; - } - reverse_iterator operator++ (int) - { - reverse_iterator __tmp = *this; - --current; - return __tmp; - } - reverse_iterator & operator-- () - { - ++current; - return *this; - } - reverse_iterator operator-- (int) - { - reverse_iterator __tmp = *this; - ++current; - return __tmp; - } - reverse_iterator operator+ (difference_type __n) const - { - return reverse_iterator (current - __n); - } - reverse_iterator & operator+= (difference_type __n) - { - current -= __n; - return *this; - } - reverse_iterator operator- (difference_type __n) const - { - return reverse_iterator (current + __n); - } - reverse_iterator & operator-= (difference_type __n) - { - current += __n; - return *this; - } - reference operator[] (difference_type __n) const - { - return *(*this + __n); - } - }; - template < typename _Iterator > - inline bool operator== (const reverse_iterator < _Iterator > &__x, - const reverse_iterator < _Iterator > &__y) - { - return __x.base () == __y.base (); - } - template < typename _Iterator > - inline bool operator< (const reverse_iterator < _Iterator > &__x, - const reverse_iterator < _Iterator > &__y) - { - return __y.base () < __x.base (); - } - template < typename _Iterator > - inline bool operator!= (const reverse_iterator < _Iterator > &__x, - const reverse_iterator < _Iterator > &__y) - { - return !(__x == __y); - } - template < typename _Iterator > - inline bool operator> (const reverse_iterator < _Iterator > &__x, - const reverse_iterator < _Iterator > &__y) - { - return __y < __x; - } - template < typename _Iterator > - inline bool operator<= (const reverse_iterator < _Iterator > &__x, - const reverse_iterator < _Iterator > &__y) - { - return !(__y < __x); - } - template < typename _Iterator > - inline bool operator>= (const reverse_iterator < _Iterator > &__x, - const reverse_iterator < _Iterator > &__y) - { - return !(__x < __y); - } - template < typename _Iterator > inline typename reverse_iterator < - _Iterator >::difference_type operator- (const reverse_iterator < - _Iterator > &__x, - const reverse_iterator < - _Iterator > &__y) - { - return __y.base () - __x.base (); - } - template < typename _Iterator > inline reverse_iterator < _Iterator > - operator+ (typename reverse_iterator < _Iterator >::difference_type __n, - const reverse_iterator < _Iterator > &__x) - { - return reverse_iterator < _Iterator > (__x.base () - __n); - } - template < typename _IteratorL, - typename _IteratorR > inline bool operator== (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return __x.base () == __y.base (); - } - template < typename _IteratorL, - typename _IteratorR > inline bool operator< (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return __y.base () < __x.base (); - } - template < typename _IteratorL, - typename _IteratorR > inline bool operator!= (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return !(__x == __y); - } - template < typename _IteratorL, - typename _IteratorR > inline bool operator> (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return __y < __x; - } - template < typename _IteratorL, - typename _IteratorR > inline bool operator<= (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return !(__y < __x); - } - template < typename _IteratorL, - typename _IteratorR > inline bool operator>= (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return !(__x < __y); - } - template < typename _IteratorL, - typename _IteratorR > inline typename reverse_iterator < - _IteratorL >::difference_type operator- (const reverse_iterator < - _IteratorL > &__x, - const reverse_iterator < - _IteratorR > &__y) - { - return __y.base () - __x.base (); - } -template < typename _Container > class back_insert_iterator:public iterator < output_iterator_tag, void, void, void, - void > - { - protected:_Container * container; - public:typedef _Container container_type; - explicit back_insert_iterator (_Container & __x):container (&__x) - { - } back_insert_iterator & operator= (typename _Container:: - const_reference __value) - { - container->push_back (__value); - return *this; - } - back_insert_iterator & operator* () - { - return *this; - } - back_insert_iterator & operator++ () - { - return *this; - } - back_insert_iterator operator++ (int) - { - return *this; - } - }; - template < typename _Container > inline back_insert_iterator < _Container > - back_inserter (_Container & __x) - { - return back_insert_iterator < _Container > (__x); - } -template < typename _Container > class front_insert_iterator:public iterator < output_iterator_tag, void, void, void, - void > - { - protected:_Container * container; - public:typedef _Container container_type; - explicit front_insert_iterator (_Container & __x):container (&__x) - { - } front_insert_iterator & operator= (typename _Container:: - const_reference __value) - { - container->push_front (__value); - return *this; - } - front_insert_iterator & operator* () - { - return *this; - } - front_insert_iterator & operator++ () - { - return *this; - } - front_insert_iterator operator++ (int) - { - return *this; - } - }; - template < typename _Container > inline front_insert_iterator < _Container > - front_inserter (_Container & __x) - { - return front_insert_iterator < _Container > (__x); - } -template < typename _Container > class insert_iterator:public iterator < output_iterator_tag, void, void, void, - void > - { - protected:_Container * container; - typename _Container::iterator iter; - public:typedef _Container container_type; - insert_iterator (_Container & __x, - typename _Container::iterator __i):container (&__x), - iter (__i) - { - } insert_iterator & operator= (typename _Container:: - const_reference __value) - { - iter = container->insert (iter, __value); - ++iter; - return *this; - } - insert_iterator & operator* () - { - return *this; - } - insert_iterator & operator++ () - { - return *this; - } - insert_iterator & operator++ (int) - { - return *this; - } - }; - template < typename _Container, - typename _Iterator > inline insert_iterator < _Container > - inserter (_Container & __x, _Iterator __i) - { - return insert_iterator < _Container > (__x, - typename _Container:: - iterator (__i)); - } -} - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - using std::size_t; - using std::ptrdiff_t; - template < typename _Tp > class new_allocator - { - public:typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp *pointer; - typedef const _Tp *const_pointer; - typedef _Tp & reference; - typedef const _Tp & const_reference; - typedef _Tp value_type; - template < typename _Tp1 > struct rebind - { - typedef new_allocator < _Tp1 > other; - }; - new_allocator ()throw () - { - } new_allocator (const new_allocator &) throw () - { - } template < typename _Tp1 > new_allocator (const new_allocator < _Tp1 > - &) throw () - { - } ~new_allocator ()throw () - { - } pointer address (reference __x) const - { - return &__x; - } - const_pointer address (const_reference __x) const - { - return &__x; - } - pointer allocate (size_type __n, const void * = 0) - { - return static_cast < _Tp * >(::operator new (__n * sizeof (_Tp))); - } - void deallocate (pointer __p, size_type) - { - ::operator delete (__p); - } size_type max_size () const throw () - { - return size_t (-1) / sizeof (_Tp); - } - void construct (pointer __p, const _Tp & __val) - { - ::new ((void *) __p) _Tp (__val); - } void destroy (pointer __p) - { - __p->~_Tp (); - }}; - template < typename _Tp > inline bool operator== (const new_allocator < - _Tp > &, - const new_allocator < - _Tp > &) - { - return true; - } - template < typename _Tp > inline bool operator!= (const new_allocator < - _Tp > &, - const new_allocator < - _Tp > &) - { - return false; - } -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - template < typename _Tp > class allocator; - template <> class allocator < void > - { - public:typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef void *pointer; - typedef const void *const_pointer; - typedef void value_type; - template < typename _Tp1 > struct rebind - { - typedef allocator < _Tp1 > other; - }; - }; -template < typename _Tp > class allocator:public __gnu_cxx::new_allocator < - _Tp > - { - public:typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp *pointer; - typedef const _Tp *const_pointer; - typedef _Tp & reference; - typedef const _Tp & const_reference; - typedef _Tp value_type; - template < typename _Tp1 > struct rebind - { - typedef allocator < _Tp1 > other; - }; - allocator ()throw () - { - } allocator (const allocator & __a) throw ():__gnu_cxx::new_allocator < - _Tp > (__a) - { - } template < typename _Tp1 > allocator (const allocator < _Tp1 > - &) throw () - { - } ~allocator ()throw () - { - }}; - template < typename _T1, - typename _T2 > inline bool operator== (const allocator < _T1 > &, - const allocator < _T2 > &) - { - return true; - } - template < typename _Tp > inline bool operator== (const allocator < _Tp > &, - const allocator < _Tp > &) - { - return true; - } - template < typename _T1, - typename _T2 > inline bool operator!= (const allocator < _T1 > &, - const allocator < _T2 > &) - { - return false; - } - template < typename _Tp > inline bool operator!= (const allocator < _Tp > &, - const allocator < _Tp > &) - { - return false; - } - template < typename _Alloc, bool = __is_empty (_Alloc) > struct __alloc_swap - { - static void _S_do_it (_Alloc &, _Alloc &) - { - }}; - template < typename _Alloc > struct __alloc_swap <_Alloc, false > - { - static void _S_do_it (_Alloc & __one, _Alloc & __two) - { - if (__one != __two) - swap (__one, __two); - } - }; - template < typename _Alloc, bool = __is_empty (_Alloc) > struct __alloc_neq - { - static bool _S_do_it (const _Alloc &, const _Alloc &) - { - return false; - } - }; - template < typename _Alloc > struct __alloc_neq <_Alloc, false > - { - static bool _S_do_it (const _Alloc & __one, const _Alloc & __two) - { - return __one != __two; - } - }; -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - struct _List_node_base - { - _List_node_base *_M_next; - _List_node_base *_M_prev; - static void swap (_List_node_base & __x, _List_node_base & __y) throw (); - void _M_transfer (_List_node_base * const __first, - _List_node_base * const __last) throw (); - void _M_reverse () throw (); - void _M_hook (_List_node_base * const __position) throw (); - void _M_unhook () throw (); - }; - template < typename _Tp > struct _List_node:public _List_node_base - { - _Tp _M_data; - }; - template < typename _Tp > struct _List_iterator - { - typedef _List_iterator < _Tp > _Self; - typedef _List_node < _Tp > _Node; - typedef ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - typedef _Tp value_type; - typedef _Tp *pointer; - typedef _Tp & reference; - _List_iterator ():_M_node () - { - } explicit _List_iterator (_List_node_base * __x):_M_node (__x) - { - } reference operator* () const - { - return static_cast < _Node * >(_M_node)->_M_data; - } - pointer operator-> () const - { - return &static_cast < _Node * >(_M_node)->_M_data; - } - _Self & operator++ () - { - _M_node = _M_node->_M_next; - return *this; - } - _Self operator++ (int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_next; - return __tmp; - } - _Self & operator-- () - { - _M_node = _M_node->_M_prev; - return *this; - } - _Self operator-- (int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_prev; - return __tmp; - } - bool operator== (const _Self & __x) const - { - return _M_node == __x._M_node; - } - bool operator!= (const _Self & __x) const - { - return _M_node != __x._M_node; - } - _List_node_base *_M_node; - }; - template < typename _Tp > struct _List_const_iterator - { - typedef _List_const_iterator < _Tp > _Self; - typedef const _List_node < _Tp > _Node; - typedef _List_iterator < _Tp > iterator; - typedef ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - typedef _Tp value_type; - typedef const _Tp *pointer; - typedef const _Tp & reference; - _List_const_iterator ():_M_node () - { - } explicit _List_const_iterator (const _List_node_base * - __x):_M_node (__x) - { - } _List_const_iterator (const iterator & __x):_M_node (__x._M_node) - { - } reference operator* () const - { - return static_cast < _Node * >(_M_node)->_M_data; - } - pointer operator-> () const - { - return &static_cast < _Node * >(_M_node)->_M_data; - } - _Self & operator++ () - { - _M_node = _M_node->_M_next; - return *this; - } - _Self operator++ (int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_next; - return __tmp; - } - _Self & operator-- () - { - _M_node = _M_node->_M_prev; - return *this; - } - _Self operator-- (int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_prev; - return __tmp; - } - bool operator== (const _Self & __x) const - { - return _M_node == __x._M_node; - } - bool operator!= (const _Self & __x) const - { - return _M_node != __x._M_node; - } - const _List_node_base *_M_node; - }; - template < typename _Tp, typename _Alloc > class _List_base - { - protected:typedef typename _Alloc::template rebind < _List_node < _Tp > - >::other _Node_alloc_type; - typedef typename _Alloc::template rebind < _Tp >::other _Tp_alloc_type; - struct _List_impl:public _Node_alloc_type - { - _List_node_base _M_node; - _List_impl ():_Node_alloc_type (), _M_node () - { - } _List_impl (const _Node_alloc_type & __a):_Node_alloc_type (__a), - _M_node () - { - }}; - _List_impl _M_impl; - _List_node < _Tp > *_M_get_node () - { - return _M_impl._Node_alloc_type::allocate (1); - } - void _M_put_node (_List_node < _Tp > *__p) - { - _M_impl._Node_alloc_type::deallocate (__p, 1); - } public:typedef _Alloc allocator_type; - _Node_alloc_type & _M_get_Node_allocator () - { - return *static_cast < _Node_alloc_type * >(&this->_M_impl); - } - const _Node_alloc_type & _M_get_Node_allocator () const - { - return *static_cast < const _Node_alloc_type *>(&this->_M_impl); - } _Tp_alloc_type _M_get_Tp_allocator () const - { - return _Tp_alloc_type (_M_get_Node_allocator ()); - } - allocator_type get_allocator () const - { - return allocator_type (_M_get_Node_allocator ()); - } - _List_base ():_M_impl () - { - _M_init (); - } - _List_base (const allocator_type & __a):_M_impl (__a) - { - _M_init (); - } ~_List_base () - { - _M_clear (); - } void _M_clear (); - void _M_init () - { - this->_M_impl._M_node._M_next = &this->_M_impl._M_node; - this->_M_impl._M_node._M_prev = &this->_M_impl._M_node; - }}; -template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class list:protected _List_base < _Tp, - _Alloc - > - { - typedef typename _Alloc::value_type _Alloc_value_type; - typedef _List_base < _Tp, _Alloc > _Base; - typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; - public:typedef _Tp value_type; - typedef typename _Tp_alloc_type::pointer pointer; - typedef typename _Tp_alloc_type::const_pointer const_pointer; - typedef typename _Tp_alloc_type::reference reference; - typedef typename _Tp_alloc_type::const_reference const_reference; - typedef _List_iterator < _Tp > iterator; - typedef _List_const_iterator < _Tp > const_iterator; - typedef std::reverse_iterator < const_iterator > const_reverse_iterator; - typedef std::reverse_iterator < iterator > reverse_iterator; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Alloc allocator_type; - protected:typedef _List_node < _Tp > _Node; - using _Base::_M_impl; - using _Base::_M_put_node; - using _Base::_M_get_node; - using _Base::_M_get_Tp_allocator; - using _Base::_M_get_Node_allocator; - public:iterator begin () - { - return iterator (this->_M_impl._M_node._M_next); - } - const_iterator begin () const - { - return const_iterator (this->_M_impl._M_node._M_next); - } - iterator end () - { - return iterator (&this->_M_impl._M_node); - } - void remove (const _Tp & __value); - template < typename _Predicate > void remove_if (_Predicate); - void _M_erase (iterator __position) - { - __position._M_node->_M_unhook (); - _Node *__n = static_cast < _Node * >(__position._M_node); - _M_get_Tp_allocator ().destroy (&__n->_M_data); - _M_put_node (__n); - } void _M_check_equal_allocators (list & __x) - { - if (std::__alloc_neq < - typename _Base::_Node_alloc_type >:: - _S_do_it (_M_get_Node_allocator (), __x._M_get_Node_allocator ())); - } - }; -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - template < typename _Tp, typename _Alloc > void list < _Tp, - _Alloc >::remove (const value_type & __value) - { - iterator __first = begin (); - iterator __last = end (); - iterator __extra = __last; - while (__first != __last) - { - iterator __next = __first; - ++__next; - if (*__first == __value) - { - if (&*__first != &__value) - _M_erase (__first); - else - __extra = __first; - } - __first = __next; - } - if (__extra != __last) - _M_erase (__extra); - } -} - -class Unit -{ -public:int dummy; -}; -class Building -{ -public:__attribute__ ((transaction_callable)) void removeUnitFromInside (Unit * - unit); - std::list < Unit * >unitsInside; -}; -void -Building::removeUnitFromInside (Unit * unit) -{ - unitsInside.remove (unit); -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/alias.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/alias.C deleted file mode 100644 index 4459c703b..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/alias.C +++ /dev/null @@ -1,20 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O0" } - -/* Test that we generate transactional clones for both the base and - the complete dtor for class Itemset. */ - -class Itemset { -public: - __attribute__((transaction_safe)) ~Itemset(); - __attribute__((transaction_safe)) void operator delete(void *); -private: -}; - -__attribute__((transaction_safe)) -Itemset::~Itemset() -{ -} - -// { dg-final { scan-assembler "_ZGTtN7ItemsetD1Ev" } } -// { dg-final { scan-assembler "_ZGTtN7ItemsetD2Ev" } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/asm-1.c b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/asm-1.c deleted file mode 100644 index 3c8ebd2f6..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/asm-1.c +++ /dev/null @@ -1,22 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O1" } - -template<class T> class shared_ptr { -public: - shared_ptr() { - __asm__ (""); - } -}; -template<typename _Tp> class deque { -public: - void push_back() { - ::new _Tp(); - } -}; -class Bar { - __attribute__((transaction_callable)) void push(); - deque<shared_ptr<int> > events; -}; -void Bar::push() { - events.push_back(); -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-2.C deleted file mode 100644 index 6a418e559..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-2.C +++ /dev/null @@ -1,22 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -fdump-tree-optimized-asmname" } - -struct __attribute__((transaction_safe)) Tsafe -{ - void f(); -}; - -void Tsafe::f() { } - -struct __attribute__((transaction_callable)) Tcall -{ - void f(); -}; - -void Tcall::f() { } - -// { dg-final { scan-tree-dump-times "_ZN5Tsafe1fEv" 1 "optimized" } } -// { dg-final { scan-tree-dump-times "_ZN5Tcall1fEv" 1 "optimized" } } -// { dg-final { scan-tree-dump-times "_ZGTtN5Tsafe1fEv" 1 "optimized" } } -// { dg-final { scan-tree-dump-times "_ZGTtN5Tcall1fEv" 1 "optimized" } } -// { dg-final { cleanup-tree-dump "optimized" } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-3.C deleted file mode 100644 index a2c9718bc..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-3.C +++ /dev/null @@ -1,33 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -fdump-tree-optimized-asmname" } - -struct __attribute__((transaction_safe)) A -{ -}; - -struct B : public A -{ - void f(); -}; - -struct C -{ -}; - -struct D : public C -{ -}; - -struct E : public D, public A -{ - void f(); -}; - -void B::f() { } -void E::f() { } - -// { dg-final { scan-tree-dump-times "_ZN1B1fEv" 1 "optimized" } } -// { dg-final { scan-tree-dump-times "_ZGTtN1B1fEv" 1 "optimized" } } -// { dg-final { scan-tree-dump-times "_ZN1E1fEv" 1 "optimized" } } -// { dg-final { scan-tree-dump-times "_ZGTtN1E1fEv" 1 "optimized" } } -// { dg-final { cleanup-tree-dump "optimized" } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-4.C deleted file mode 100644 index b589b9d41..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/attrib-4.C +++ /dev/null @@ -1,48 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -#define __ts __attribute__((transaction_safe)) -#define __tc __attribute__((transaction_callable)) -#define __tp __attribute__((transaction_pure)) -#define __tu __attribute__((transaction_unsafe)) - -struct __ts A -{ - virtual void f(); - virtual void g(); -}; - -struct __tc B : public A -{ - void f() __tc; // { dg-error ".transaction_callable. overriding .transaction_safe." } - void g(); - virtual void h(); -}; - -struct C : public B -{ - void g() __tc; // { dg-error ".transaction_callable. overriding .transaction_safe." } -}; - -struct C2 : public B -{ - void g() __ts; - void h() __tu; // { dg-error ".transaction_unsafe. overriding .transaction_callable." } -}; - -struct D -{ - virtual void f() __tp; - virtual void g() __tp; -}; - -struct E : public D -{ - void f() __ts; // { dg-error ".transaction_safe. overriding .transaction_pure." } - void g(); -}; - -struct F : public E -{ - void g() __ts; // { dg-error ".transaction_safe. overriding .transaction_pure." } -}; diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/cgraph_edge.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/cgraph_edge.C deleted file mode 100644 index d4c8f77fe..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/cgraph_edge.C +++ /dev/null @@ -1,33 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O3" } - -template<typename _InputIterator, typename _Distance> inline void advance(_InputIterator& __i, _Distance __n) - { - if (__n > 0) - while (__n--) - --__i; - else - --__i; - } - -void _Rb_tree_increment (); - -template<typename _Tp> struct _Rb_tree_iterator - { - typedef _Rb_tree_iterator<_Tp> iterator; - - iterator& operator--() - { - _Rb_tree_increment(); - } - }; - -void update () - { - _Rb_tree_iterator<int>::iterator it; - __transaction_relaxed - { - advance (it, 0); - } - } - diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/fatomic-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/fatomic-1.C deleted file mode 100644 index dac850aac..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/fatomic-1.C +++ /dev/null @@ -1,10 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -struct S -{ - int i, j, k; - S(); -}; - -S::S() __transaction_atomic : i(1), j(2), k(3) { } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-1.C deleted file mode 100644 index 1f4e19e98..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-1.C +++ /dev/null @@ -1,22 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -class HashTree -{ -public: - __attribute__((transaction_safe)) - int add_element2(); -private: - int Count; -}; - - -__attribute__((transaction_safe)) -int HashTree::add_element2() -{ - int tt; - __transaction_atomic { - tt = Count; - } - return tt; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-2.C deleted file mode 100644 index c6d5d98ba..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-2.C +++ /dev/null @@ -1,41 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O" } - -typedef unsigned long int uint64_t; -extern int *hash_indx; - -typedef struct -{ - uint64_t exit_atomicsec_time; -} ent_ex_times; -class HashTree -{ -public: - __attribute__((transaction_safe)) - void *operator new(__SIZE_TYPE__); - __attribute__((transaction_safe)) - int add_element(); -private: - HashTree **Hash_table; - int Count; -}; - - -__attribute__((transaction_safe)) -int HashTree::add_element() -{ - ent_ex_times enter_exit_times_inside; - int val = hash_indx[5]; - int tt; - if (Hash_table[val] == __null) - { - __transaction_atomic { - Hash_table[val] = new HashTree; - } - } - __transaction_atomic { - tt = Count++; - enter_exit_times_inside.exit_atomicsec_time = 5; - } - return tt; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-3.C deleted file mode 100644 index 19718c34a..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/nested-3.C +++ /dev/null @@ -1,43 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O0" } - -// Same as nested-2.C but with no optimization. - -typedef unsigned long int uint64_t; -extern int *hash_indx; - -typedef struct -{ - uint64_t exit_atomicsec_time; -} ent_ex_times; -class HashTree -{ -public: - __attribute__((transaction_safe)) - void *operator new(__SIZE_TYPE__); - __attribute__((transaction_safe)) - int add_element(); -private: - HashTree **Hash_table; - int Count; -}; - - -__attribute__((transaction_safe)) -int HashTree::add_element() -{ - ent_ex_times enter_exit_times_inside; - int val = hash_indx[5]; - int tt; - if (Hash_table[val] == __null) - { - __transaction_atomic { - Hash_table[val] = new HashTree; - } - } - __transaction_atomic { - tt = Count++; - enter_exit_times_inside.exit_atomicsec_time = 5; - } - return tt; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-1.C deleted file mode 100644 index 9b1a8c65f..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-1.C +++ /dev/null @@ -1,38 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O -std=c++0x -fdump-tree-tmmark -fdump-tree-tmlower" } - -struct TrueFalse -{ - static constexpr bool v() { return true; } -}; - -int global; - -template<typename T> int foo() -{ - __transaction_atomic noexcept(T::v()) { global += 1; } - return __transaction_atomic noexcept(T::v()) (global + 2); -} - -int f1() -{ - return foo<TrueFalse>(); -} - -int f2() -{ - return __transaction_atomic noexcept(true) (global + 3) - + __transaction_atomic noexcept(TrueFalse::v()) (global + 4); -} - -int f3() -{ - __transaction_atomic noexcept(true) { global += 5; } - __transaction_atomic noexcept(TrueFalse::v()) { global += 6; } - return global; -} - -/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 6 "tmlower" } } */ -/* { dg-final { scan-tree-dump-times "ITM_RU" 6 "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmlower" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-2.C deleted file mode 100644 index f9cbbb612..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-2.C +++ /dev/null @@ -1,20 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -std=c++0x" } - -// All of these must fail, because they are not constant expressions. -template<typename T> int foo(int x, T t) -{ - __transaction_atomic noexcept(t) { x++; } /* { dg-error "not a constant" } */ - return __transaction_atomic noexcept(t) (x+1); /* { dg-error "not a constant" } */ -} - -int bar(int x) -{ - __transaction_atomic noexcept(x == 23) { x++; } /* { dg-error "not a constant" } */ - return __transaction_atomic noexcept(x == 42) (x+1); /* { dg-error "not a constant" } */ -} - -int f(int x) -{ - return foo<bool>(x, true); -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-3.C deleted file mode 100644 index 958290ef6..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-3.C +++ /dev/null @@ -1,40 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O -std=c++0x -fdump-tree-tmmark -fdump-tree-tmlower" } - -// Same as noexcept-1.C but all noexcepts are false. - -struct TrueFalse -{ - static constexpr bool v() { return false; } -}; - -int global; - -template<typename T> int foo() -{ - __transaction_atomic noexcept(T::v()) { global += 1; } - return __transaction_atomic noexcept(T::v()) (global + 2); -} - -int f1() -{ - return foo<TrueFalse>(); -} - -int f2() -{ - return __transaction_atomic noexcept(false) (global + 3) - + __transaction_atomic noexcept(TrueFalse::v()) (global + 4); -} - -int f3() -{ - __transaction_atomic noexcept(false) { global += 5; } - __transaction_atomic noexcept(TrueFalse::v()) { global += 6; } - return global; -} - -/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */ -/* { dg-final { scan-tree-dump-times "ITM_RU" 6 "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmlower" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-4.C deleted file mode 100644 index 1166a1598..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-4.C +++ /dev/null @@ -1,35 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O -std=c++0x -fdump-tree-tmmark -fdump-tree-tmlower" } - -// Similar to noexcept-1.C but without an explicit (true) for noexcept. - -struct TrueFalse -{ - static constexpr bool v() { return true; } -}; - -int global; - -template<typename T> int foo() -{ - __transaction_atomic noexcept { global += 1; } - return __transaction_atomic noexcept (global + 2) - + __transaction_atomic noexcept (global + 3); -} - -int f1() -{ - return foo<TrueFalse>(); -} - -int f3() -{ - __transaction_atomic noexcept { global += 4; } - return __transaction_atomic noexcept (global + 5) - + __transaction_atomic noexcept (global + 6); -} - -/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 6 "tmlower" } } */ -/* { dg-final { scan-tree-dump-times "ITM_RU" 6 "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmlower" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-5.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-5.C deleted file mode 100644 index 44ef6177e..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/noexcept-5.C +++ /dev/null @@ -1,21 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O -std=c++0x -fdump-tree-tmmark -fdump-tree-tmlower" } - -int global; - -void f2(int x) -{ - __transaction_atomic - { - __transaction_atomic noexcept(true) - { - global += 1; - if (x) - throw 23; - } - } -} -/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 1 "tmlower" } } */ -/* { dg-final { scan-tree-dump-times "ITM_RU" 1 "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmlower" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/opt-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/opt-1.C deleted file mode 100644 index 8dd41a5bf..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/opt-1.C +++ /dev/null @@ -1,9 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O" } - -struct S -{ - virtual void f() __attribute__((transaction_safe)); -}; - -void f(S *s) { __transaction_atomic { s->f(); } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-2.C deleted file mode 100644 index ab10c34ba..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-2.C +++ /dev/null @@ -1,30 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O1" } - -__attribute__((transaction_pure)) -inline int atomic_exchange_and_add(int dv ) -{ - int r; - __asm__ ("" : "=r"(r)); - return r; -} - -class sp_counted_base -{ -public: - __attribute__((transaction_safe)) - void release() - { - if( atomic_exchange_and_add(-1 ) == 1 ) - { - } - } -}; - -sp_counted_base *base; - -void here(){ - __transaction_atomic { - base->release(); - } -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-3.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-3.C deleted file mode 100644 index c8caee6c8..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-3.C +++ /dev/null @@ -1,69 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O0" } - -__attribute__((transaction_safe)) -void* operator new (__SIZE_TYPE__); - -__attribute__((transaction_pure)) -inline int atomic_exchange_and_add( int * pw, int dv ) -{ - int r; - __asm__ ("" : "=r"(r)); - return r; -} - -class sp_counted_base -{ -protected: - int use_count_; // #shared -public: - __attribute__((transaction_safe)) - virtual void dispose() = 0; // nothrow - - __attribute__((transaction_safe)) - void release() // nothrow - { - if( atomic_exchange_and_add( &use_count_, -1 ) == 1 ) - { - dispose(); - } - } -}; - -class sp_counted_base_x86 : public sp_counted_base -{ -public: - void dispose() - { - release(); - } -}; - -class shared_count -{ -private: - sp_counted_base * pi_; -public: - int j; - __attribute__((transaction_safe)) - shared_count(): pi_(new sp_counted_base_x86()), j(0) - { - } - __attribute__((transaction_safe)) - ~shared_count() // nothrow - { - if( pi_ != 0 ) pi_->release(); - } -}; - -volatile int i = 1; -shared_count * c; -int main() -{ - if ( i == 0) { - __transaction_atomic { - shared_count sc; - } - } - return 0; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-4.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-4.C deleted file mode 100644 index d1cb8d55a..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940-4.C +++ /dev/null @@ -1,69 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O1" } - -__attribute__((transaction_safe)) -void* operator new (__SIZE_TYPE__); - -__attribute__((transaction_pure)) -inline int atomic_exchange_and_add( int * pw, int dv ) -{ - int r; - __asm__ ("" : "=r"(r)); - return r; -} - -class sp_counted_base -{ -protected: - int use_count_; // #shared -public: - __attribute__((transaction_safe)) - virtual void dispose() = 0; // nothrow - - __attribute__((transaction_safe)) - void release() // nothrow - { - if( atomic_exchange_and_add( &use_count_, -1 ) == 1 ) - { - dispose(); - } - } -}; - -class sp_counted_base_x86 : public sp_counted_base -{ -public: - void dispose() - { - release(); - } -}; - -class shared_count -{ -private: - sp_counted_base * pi_; -public: - int j; - __attribute__((transaction_safe)) - shared_count(): pi_(new sp_counted_base_x86()), j(0) - { - } - __attribute__((transaction_safe)) - ~shared_count() // nothrow - { - if( pi_ != 0 ) pi_->release(); - } -}; - -volatile int i = 1; -shared_count * c; -int main() -{ - if ( i == 0) { - __transaction_atomic { - shared_count sc; - } - } - return 0; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940.C deleted file mode 100644 index 3e9a2c3f8..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr45940.C +++ /dev/null @@ -1,30 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O0" } - -__attribute__((transaction_pure)) -inline int atomic_exchange_and_add(int dv ) -{ - int r; - __asm__ ("" : "=r"(r)); - return r; -} - -class sp_counted_base -{ -public: - __attribute__((transaction_safe)) - void release() - { - if( atomic_exchange_and_add(-1 ) == 1 ) - { - } - } -}; - -sp_counted_base *base; - -void here(){ - __transaction_atomic { - base->release(); - } -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46269.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46269.C deleted file mode 100644 index b4b13af5b..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46269.C +++ /dev/null @@ -1,29 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -static inline void atomic_exchange_and_add() -{ - __asm__ (""); -} - -template<class T> class shared_ptr -{ -public: - shared_ptr( T * p ) - { - atomic_exchange_and_add(); - } -}; - -class BuildingCompletedEvent -{ - public: - __attribute__((transaction_callable)) void updateBuildingSite(void); - __attribute__((transaction_pure)) BuildingCompletedEvent(); -}; - -void BuildingCompletedEvent::updateBuildingSite(void) -{ - shared_ptr<BuildingCompletedEvent> event(new BuildingCompletedEvent()); -} - diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46270.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46270.C deleted file mode 100644 index 291e620a3..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46270.C +++ /dev/null @@ -1,27 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -#include <list> -class Game -{ -public: - struct BuildProject - { - int posX; - }; - std::list<BuildProject> buildProjects; -}; - -static Game game; -static std::list<std::list<Game::BuildProject>::iterator> erasableBuildProjects; - -static void *buildProjectSyncStepConcurrently(int id, int localTeam) -{ - __transaction_relaxed { - std::list<std::list<Game::BuildProject>::iterator>::iterator it - = erasableBuildProjects.begin(); - game.buildProjects.erase( (std::list<Game::BuildProject> - ::iterator) *it); - } - return 0; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46300.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46300.C deleted file mode 100644 index 7b3c613c3..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46300.C +++ /dev/null @@ -1,8 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -void foo(){ - __transaction_atomic { - throw 5; - } -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46567.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46567.C deleted file mode 100644 index 2f0ef93f2..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46567.C +++ /dev/null @@ -1,2676 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O2" } - -typedef __PTRDIFF_TYPE__ ptrdiff_t; -typedef __SIZE_TYPE__ size_t; -namespace std __attribute__ ((__visibility__ ("default"))) { - using ::ptrdiff_t; - using ::size_t; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - void - __throw_bad_exception(void) __attribute__((__noreturn__)); - void - __throw_bad_alloc(void) __attribute__((__noreturn__)); - void - __throw_bad_cast(void) __attribute__((__noreturn__)); - void - __throw_bad_typeid(void) __attribute__((__noreturn__)); - void - __throw_logic_error(const char*) __attribute__((__noreturn__)); - void - __throw_domain_error(const char*) __attribute__((__noreturn__)); - void - __throw_invalid_argument(const char*) __attribute__((__noreturn__)); - void - __throw_length_error(const char*) __attribute__((__noreturn__)); - void - __throw_out_of_range(const char*) __attribute__((__noreturn__)); - void - __throw_runtime_error(const char*) __attribute__((__noreturn__)); - void - __throw_range_error(const char*) __attribute__((__noreturn__)); - void - __throw_overflow_error(const char*) __attribute__((__noreturn__)); - void - __throw_underflow_error(const char*) __attribute__((__noreturn__)); - void - __throw_ios_failure(const char*) __attribute__((__noreturn__)); - void - __throw_system_error(int) __attribute__((__noreturn__)); -} - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - template<typename _Iterator, typename _Container> - class __normal_iterator; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - struct __true_type { }; - struct __false_type { }; - template<bool> - struct __truth_type - { typedef __false_type __type; }; - template<> - struct __truth_type<true> - { typedef __true_type __type; }; - template<class _Sp, class _Tp> - struct __traitor - { - enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; - typedef typename __truth_type<__value>::__type __type; - }; - template<typename, typename> - struct __are_same - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<typename _Tp> - struct __are_same<_Tp, _Tp> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_void - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<> - struct __is_void<void> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_integer - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<> - struct __is_integer<bool> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<signed char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<unsigned char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<wchar_t> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<short> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<unsigned short> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<int> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<unsigned int> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<long> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<unsigned long> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<long long> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_integer<unsigned long long> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_floating - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<> - struct __is_floating<float> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_floating<double> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_floating<long double> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_pointer - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<typename _Tp> - struct __is_pointer<_Tp*> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_normal_iterator - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<typename _Iterator, typename _Container> - struct __is_normal_iterator< __gnu_cxx::__normal_iterator<_Iterator, - _Container> > - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_arithmetic - : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > - { }; - template<typename _Tp> - struct __is_fundamental - : public __traitor<__is_void<_Tp>, __is_arithmetic<_Tp> > - { }; - template<typename _Tp> - struct __is_scalar - : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > - { }; - template<typename _Tp> - struct __is_char - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<> - struct __is_char<char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_char<wchar_t> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_byte - { - enum { __value = 0 }; - typedef __false_type __type; - }; - template<> - struct __is_byte<char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_byte<signed char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<> - struct __is_byte<unsigned char> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - template<typename _Tp> - struct __is_move_iterator - { - enum { __value = 0 }; - typedef __false_type __type; - }; -} - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - template<bool, typename> - struct __enable_if - { }; - template<typename _Tp> - struct __enable_if<true, _Tp> - { typedef _Tp __type; }; - template<bool _Cond, typename _Iftrue, typename _Iffalse> - struct __conditional_type - { typedef _Iftrue __type; }; - template<typename _Iftrue, typename _Iffalse> - struct __conditional_type<false, _Iftrue, _Iffalse> - { typedef _Iffalse __type; }; - template<typename _Tp> - struct __add_unsigned - { - private: - typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type; - public: - typedef typename __if_type::__type __type; - }; - template<> - struct __add_unsigned<char> - { typedef unsigned char __type; }; - template<> - struct __add_unsigned<signed char> - { typedef unsigned char __type; }; - template<> - struct __add_unsigned<short> - { typedef unsigned short __type; }; - template<> - struct __add_unsigned<int> - { typedef unsigned int __type; }; - template<> - struct __add_unsigned<long> - { typedef unsigned long __type; }; - template<> - struct __add_unsigned<long long> - { typedef unsigned long long __type; }; - template<> - struct __add_unsigned<bool>; - template<> - struct __add_unsigned<wchar_t>; - template<typename _Tp> - struct __remove_unsigned - { - private: - typedef __enable_if<std::__is_integer<_Tp>::__value, _Tp> __if_type; - public: - typedef typename __if_type::__type __type; - }; - template<> - struct __remove_unsigned<char> - { typedef signed char __type; }; - template<> - struct __remove_unsigned<unsigned char> - { typedef signed char __type; }; - template<> - struct __remove_unsigned<unsigned short> - { typedef short __type; }; - template<> - struct __remove_unsigned<unsigned int> - { typedef int __type; }; - template<> - struct __remove_unsigned<unsigned long> - { typedef long __type; }; - template<> - struct __remove_unsigned<unsigned long long> - { typedef long long __type; }; - template<> - struct __remove_unsigned<bool>; - template<> - struct __remove_unsigned<wchar_t>; - template<typename _Type> - inline bool - __is_null_pointer(_Type* __ptr) - { return __ptr == 0; } - template<typename _Type> - inline bool - __is_null_pointer(_Type) - { return false; } - template<typename _Tp, bool = std::__is_integer<_Tp>::__value> - struct __promote - { typedef double __type; }; - template<typename _Tp> - struct __promote<_Tp, false> - { typedef _Tp __type; }; - template<typename _Tp, typename _Up> - struct __promote_2 - { - private: - typedef typename __promote<_Tp>::__type __type1; - typedef typename __promote<_Up>::__type __type2; - public: - typedef __typeof__(__type1() + __type2()) __type; - }; - template<typename _Tp, typename _Up, typename _Vp> - struct __promote_3 - { - private: - typedef typename __promote<_Tp>::__type __type1; - typedef typename __promote<_Up>::__type __type2; - typedef typename __promote<_Vp>::__type __type3; - public: - typedef __typeof__(__type1() + __type2() + __type3()) __type; - }; - template<typename _Tp, typename _Up, typename _Vp, typename _Wp> - struct __promote_4 - { - private: - typedef typename __promote<_Tp>::__type __type1; - typedef typename __promote<_Up>::__type __type2; - typedef typename __promote<_Vp>::__type __type3; - typedef typename __promote<_Wp>::__type __type4; - public: - typedef __typeof__(__type1() + __type2() + __type3() + __type4()) __type; - }; -} - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - template<typename _Value> - struct __numeric_traits_integer - { - static const _Value __min = (((_Value)(-1) < 0) ? (_Value)1 << (sizeof(_Value) * 8 - ((_Value)(-1) < 0)) : (_Value)0); - static const _Value __max = (((_Value)(-1) < 0) ? (((((_Value)1 << ((sizeof(_Value) * 8 - ((_Value)(-1) < 0)) - 1)) - 1) << 1) + 1) : ~(_Value)0); - static const bool __is_signed = ((_Value)(-1) < 0); - static const int __digits = (sizeof(_Value) * 8 - ((_Value)(-1) < 0)); - }; - template<typename _Value> - const _Value __numeric_traits_integer<_Value>::__min; - template<typename _Value> - const _Value __numeric_traits_integer<_Value>::__max; - template<typename _Value> - const bool __numeric_traits_integer<_Value>::__is_signed; - template<typename _Value> - const int __numeric_traits_integer<_Value>::__digits; - template<typename _Value> - struct __numeric_traits_floating - { - static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 3010 / 10000); - static const bool __is_signed = true; - static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18); - static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932); - }; - template<typename _Value> - const int __numeric_traits_floating<_Value>::__max_digits10; - template<typename _Value> - const bool __numeric_traits_floating<_Value>::__is_signed; - template<typename _Value> - const int __numeric_traits_floating<_Value>::__digits10; - template<typename _Value> - const int __numeric_traits_floating<_Value>::__max_exponent10; - template<typename _Value> - struct __numeric_traits - : public __conditional_type<std::__is_integer<_Value>::__value, - __numeric_traits_integer<_Value>, - __numeric_traits_floating<_Value> >::__type - { }; -} - - -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Tp> - inline void - swap(_Tp& __a, _Tp& __b) - { - - _Tp __tmp = (__a); - __a = (__b); - __b = (__tmp); - } - template<typename _Tp, size_t _Nm> - inline void - swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) - { - for (size_t __n = 0; __n < _Nm; ++__n) - swap(__a[__n], __b[__n]); - } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<class _T1, class _T2> - struct pair - { - typedef _T1 first_type; - typedef _T2 second_type; - _T1 first; - _T2 second; - pair() - : first(), second() { } - pair(const _T1& __a, const _T2& __b) - : first(__a), second(__b) { } - template<class _U1, class _U2> - pair(const pair<_U1, _U2>& __p) - : first(__p.first), - second(__p.second) { } - }; - template<class _T1, class _T2> - inline bool - operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return __x.first == __y.first && __x.second == __y.second; } - template<class _T1, class _T2> - inline bool - operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return __x.first < __y.first - || (!(__y.first < __x.first) && __x.second < __y.second); } - template<class _T1, class _T2> - inline bool - operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return !(__x == __y); } - template<class _T1, class _T2> - inline bool - operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return __y < __x; } - template<class _T1, class _T2> - inline bool - operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return !(__y < __x); } - template<class _T1, class _T2> - inline bool - operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return !(__x < __y); } - template<class _T1, class _T2> - inline pair<_T1, _T2> - make_pair(_T1 __x, _T2 __y) - { return pair<_T1, _T2>(__x, __y); } -} - - -namespace std __attribute__ ((__visibility__ ("default"))) { - struct input_iterator_tag { }; - struct output_iterator_tag { }; - struct forward_iterator_tag : public input_iterator_tag { }; - struct bidirectional_iterator_tag : public forward_iterator_tag { }; - struct random_access_iterator_tag : public bidirectional_iterator_tag { }; - template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, - typename _Pointer = _Tp*, typename _Reference = _Tp&> - struct iterator - { - typedef _Category iterator_category; - typedef _Tp value_type; - typedef _Distance difference_type; - typedef _Pointer pointer; - typedef _Reference reference; - }; - template<typename _Iterator> - struct iterator_traits - { - typedef typename _Iterator::iterator_category iterator_category; - typedef typename _Iterator::value_type value_type; - typedef typename _Iterator::difference_type difference_type; - typedef typename _Iterator::pointer pointer; - typedef typename _Iterator::reference reference; - }; - template<typename _Tp> - struct iterator_traits<_Tp*> - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef _Tp& reference; - }; - template<typename _Tp> - struct iterator_traits<const _Tp*> - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef const _Tp* pointer; - typedef const _Tp& reference; - }; - template<typename _Iter> - inline typename iterator_traits<_Iter>::iterator_category - __iterator_category(const _Iter&) - { return typename iterator_traits<_Iter>::iterator_category(); } -} - -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _InputIterator> - inline typename iterator_traits<_InputIterator>::difference_type - __distance(_InputIterator __first, _InputIterator __last, - input_iterator_tag) - { - - typename iterator_traits<_InputIterator>::difference_type __n = 0; - while (__first != __last) - { - ++__first; - ++__n; - } - return __n; - } - template<typename _RandomAccessIterator> - inline typename iterator_traits<_RandomAccessIterator>::difference_type - __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, - random_access_iterator_tag) - { - - return __last - __first; - } - template<typename _InputIterator> - inline typename iterator_traits<_InputIterator>::difference_type - distance(_InputIterator __first, _InputIterator __last) - { - return std::__distance(__first, __last, - std::__iterator_category(__first)); - } - template<typename _InputIterator, typename _Distance> - inline void - __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) - { - - while (__n--) - ++__i; - } - template<typename _BidirectionalIterator, typename _Distance> - inline void - __advance(_BidirectionalIterator& __i, _Distance __n, - bidirectional_iterator_tag) - { - - if (__n > 0) - while (__n--) - ++__i; - else - while (__n++) - --__i; - } - template<typename _RandomAccessIterator, typename _Distance> - inline void - __advance(_RandomAccessIterator& __i, _Distance __n, - random_access_iterator_tag) - { - - __i += __n; - } - template<typename _InputIterator, typename _Distance> - inline void - advance(_InputIterator& __i, _Distance __n) - { - typename iterator_traits<_InputIterator>::difference_type __d = __n; - std::__advance(__i, __d, std::__iterator_category(__i)); - } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Iterator> - class reverse_iterator - : public iterator<typename iterator_traits<_Iterator>::iterator_category, - typename iterator_traits<_Iterator>::value_type, - typename iterator_traits<_Iterator>::difference_type, - typename iterator_traits<_Iterator>::pointer, - typename iterator_traits<_Iterator>::reference> - { - protected: - _Iterator current; - public: - typedef _Iterator iterator_type; - typedef typename iterator_traits<_Iterator>::difference_type - difference_type; - typedef typename iterator_traits<_Iterator>::reference reference; - typedef typename iterator_traits<_Iterator>::pointer pointer; - public: - reverse_iterator() : current() { } - explicit - reverse_iterator(iterator_type __x) : current(__x) { } - reverse_iterator(const reverse_iterator& __x) - : current(__x.current) { } - template<typename _Iter> - reverse_iterator(const reverse_iterator<_Iter>& __x) - : current(__x.base()) { } - iterator_type - base() const - { return current; } - reference - operator*() const - { - _Iterator __tmp = current; - return *--__tmp; - } - pointer - operator->() const - { return &(operator*()); } - reverse_iterator& - operator++() - { - --current; - return *this; - } - reverse_iterator - operator++(int) - { - reverse_iterator __tmp = *this; - --current; - return __tmp; - } - reverse_iterator& - operator--() - { - ++current; - return *this; - } - reverse_iterator - operator--(int) - { - reverse_iterator __tmp = *this; - ++current; - return __tmp; - } - reverse_iterator - operator+(difference_type __n) const - { return reverse_iterator(current - __n); } - reverse_iterator& - operator+=(difference_type __n) - { - current -= __n; - return *this; - } - reverse_iterator - operator-(difference_type __n) const - { return reverse_iterator(current + __n); } - reverse_iterator& - operator-=(difference_type __n) - { - current += __n; - return *this; - } - reference - operator[](difference_type __n) const - { return *(*this + __n); } - }; - template<typename _Iterator> - inline bool - operator==(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __x.base() == __y.base(); } - template<typename _Iterator> - inline bool - operator<(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __y.base() < __x.base(); } - template<typename _Iterator> - inline bool - operator!=(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return !(__x == __y); } - template<typename _Iterator> - inline bool - operator>(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __y < __x; } - template<typename _Iterator> - inline bool - operator<=(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return !(__y < __x); } - template<typename _Iterator> - inline bool - operator>=(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return !(__x < __y); } - template<typename _Iterator> - inline typename reverse_iterator<_Iterator>::difference_type - operator-(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __y.base() - __x.base(); } - template<typename _Iterator> - inline reverse_iterator<_Iterator> - operator+(typename reverse_iterator<_Iterator>::difference_type __n, - const reverse_iterator<_Iterator>& __x) - { return reverse_iterator<_Iterator>(__x.base() - __n); } - template<typename _IteratorL, typename _IteratorR> - inline bool - operator==(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __x.base() == __y.base(); } - template<typename _IteratorL, typename _IteratorR> - inline bool - operator<(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __y.base() < __x.base(); } - template<typename _IteratorL, typename _IteratorR> - inline bool - operator!=(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return !(__x == __y); } - template<typename _IteratorL, typename _IteratorR> - inline bool - operator>(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __y < __x; } - template<typename _IteratorL, typename _IteratorR> - inline bool - operator<=(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return !(__y < __x); } - template<typename _IteratorL, typename _IteratorR> - inline bool - operator>=(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return !(__x < __y); } - template<typename _IteratorL, typename _IteratorR> - inline typename reverse_iterator<_IteratorL>::difference_type - operator-(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __y.base() - __x.base(); } - template<typename _Container> - class back_insert_iterator - : public iterator<output_iterator_tag, void, void, void, void> - { - protected: - _Container* container; - public: - typedef _Container container_type; - explicit - back_insert_iterator(_Container& __x) : container(&__x) { } - back_insert_iterator& - operator=(typename _Container::const_reference __value) - { - container->push_back(__value); - return *this; - } - back_insert_iterator& - operator*() - { return *this; } - back_insert_iterator& - operator++() - { return *this; } - back_insert_iterator - operator++(int) - { return *this; } - }; - template<typename _Container> - inline back_insert_iterator<_Container> - back_inserter(_Container& __x) - { return back_insert_iterator<_Container>(__x); } - template<typename _Container> - class front_insert_iterator - : public iterator<output_iterator_tag, void, void, void, void> - { - protected: - _Container* container; - public: - typedef _Container container_type; - explicit front_insert_iterator(_Container& __x) : container(&__x) { } - front_insert_iterator& - operator=(typename _Container::const_reference __value) - { - container->push_front(__value); - return *this; - } - front_insert_iterator& - operator*() - { return *this; } - front_insert_iterator& - operator++() - { return *this; } - front_insert_iterator - operator++(int) - { return *this; } - }; - template<typename _Container> - inline front_insert_iterator<_Container> - front_inserter(_Container& __x) - { return front_insert_iterator<_Container>(__x); } - template<typename _Container> - class insert_iterator - : public iterator<output_iterator_tag, void, void, void, void> - { - protected: - _Container* container; - typename _Container::iterator iter; - public: - typedef _Container container_type; - insert_iterator(_Container& __x, typename _Container::iterator __i) - : container(&__x), iter(__i) {} - insert_iterator& - operator=(typename _Container::const_reference __value) - { - iter = container->insert(iter, __value); - ++iter; - return *this; - } - insert_iterator& - operator*() - { return *this; } - insert_iterator& - operator++() - { return *this; } - insert_iterator& - operator++(int) - { return *this; } - }; - template<typename _Container, typename _Iterator> - inline insert_iterator<_Container> - inserter(_Container& __x, _Iterator __i) - { - return insert_iterator<_Container>(__x, - typename _Container::iterator(__i)); - } -} -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - using std::iterator_traits; - using std::iterator; - template<typename _Iterator, typename _Container> - class __normal_iterator - { - protected: - _Iterator _M_current; - public: - typedef _Iterator iterator_type; - typedef typename iterator_traits<_Iterator>::iterator_category - iterator_category; - typedef typename iterator_traits<_Iterator>::value_type value_type; - typedef typename iterator_traits<_Iterator>::difference_type - difference_type; - typedef typename iterator_traits<_Iterator>::reference reference; - typedef typename iterator_traits<_Iterator>::pointer pointer; - __normal_iterator() : _M_current(_Iterator()) { } - explicit - __normal_iterator(const _Iterator& __i) : _M_current(__i) { } - template<typename _Iter> - __normal_iterator(const __normal_iterator<_Iter, - typename __enable_if< - (std::__are_same<_Iter, typename _Container::pointer>::__value), - _Container>::__type>& __i) - : _M_current(__i.base()) { } - reference - operator*() const - { return *_M_current; } - pointer - operator->() const - { return _M_current; } - __normal_iterator& - operator++() - { - ++_M_current; - return *this; - } - __normal_iterator - operator++(int) - { return __normal_iterator(_M_current++); } - __normal_iterator& - operator--() - { - --_M_current; - return *this; - } - __normal_iterator - operator--(int) - { return __normal_iterator(_M_current--); } - reference - operator[](const difference_type& __n) const - { return _M_current[__n]; } - __normal_iterator& - operator+=(const difference_type& __n) - { _M_current += __n; return *this; } - __normal_iterator - operator+(const difference_type& __n) const - { return __normal_iterator(_M_current + __n); } - __normal_iterator& - operator-=(const difference_type& __n) - { _M_current -= __n; return *this; } - __normal_iterator - operator-(const difference_type& __n) const - { return __normal_iterator(_M_current - __n); } - const _Iterator& - base() const - { return _M_current; } - }; - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline bool - operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() == __rhs.base(); } - template<typename _Iterator, typename _Container> - inline bool - operator==(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() == __rhs.base(); } - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline bool - operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() != __rhs.base(); } - template<typename _Iterator, typename _Container> - inline bool - operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() != __rhs.base(); } - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline bool - operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() < __rhs.base(); } - template<typename _Iterator, typename _Container> - inline bool - operator<(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() < __rhs.base(); } - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline bool - operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() > __rhs.base(); } - template<typename _Iterator, typename _Container> - inline bool - operator>(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() > __rhs.base(); } - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline bool - operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() <= __rhs.base(); } - template<typename _Iterator, typename _Container> - inline bool - operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() <= __rhs.base(); } - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline bool - operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() >= __rhs.base(); } - template<typename _Iterator, typename _Container> - inline bool - operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() >= __rhs.base(); } - template<typename _IteratorL, typename _IteratorR, typename _Container> - inline typename __normal_iterator<_IteratorL, _Container>::difference_type - operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - { return __lhs.base() - __rhs.base(); } - template<typename _Iterator, typename _Container> - inline typename __normal_iterator<_Iterator, _Container>::difference_type - operator-(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - { return __lhs.base() - __rhs.base(); } - template<typename _Iterator, typename _Container> - inline __normal_iterator<_Iterator, _Container> - operator+(typename __normal_iterator<_Iterator, _Container>::difference_type - __n, const __normal_iterator<_Iterator, _Container>& __i) - { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } -} -namespace std -{ - namespace __debug { } -} -namespace __gnu_debug -{ - using namespace std::__debug; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<bool _BoolType> - struct __iter_swap - { - template<typename _ForwardIterator1, typename _ForwardIterator2> - static void - iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) - { - typedef typename iterator_traits<_ForwardIterator1>::value_type - _ValueType1; - _ValueType1 __tmp = (*__a); - *__a = (*__b); - *__b = (__tmp); - } - }; - template<> - struct __iter_swap<true> - { - template<typename _ForwardIterator1, typename _ForwardIterator2> - static void - iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) - { - swap(*__a, *__b); - } - }; - template<typename _ForwardIterator1, typename _ForwardIterator2> - inline void - iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) - { - typedef typename iterator_traits<_ForwardIterator1>::value_type - _ValueType1; - typedef typename iterator_traits<_ForwardIterator2>::value_type - _ValueType2; - - - - - typedef typename iterator_traits<_ForwardIterator1>::reference - _ReferenceType1; - typedef typename iterator_traits<_ForwardIterator2>::reference - _ReferenceType2; - std::__iter_swap<__are_same<_ValueType1, _ValueType2>::__value - && __are_same<_ValueType1&, _ReferenceType1>::__value - && __are_same<_ValueType2&, _ReferenceType2>::__value>:: - iter_swap(__a, __b); - } - template<typename _ForwardIterator1, typename _ForwardIterator2> - _ForwardIterator2 - swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, - _ForwardIterator2 __first2) - { - - - ; - for (; __first1 != __last1; ++__first1, ++__first2) - std::iter_swap(__first1, __first2); - return __first2; - } - template<typename _Tp> - inline const _Tp& - min(const _Tp& __a, const _Tp& __b) - { - - if (__b < __a) - return __b; - return __a; - } - template<typename _Tp> - inline const _Tp& - max(const _Tp& __a, const _Tp& __b) - { - - if (__a < __b) - return __b; - return __a; - } - template<typename _Tp, typename _Compare> - inline const _Tp& - min(const _Tp& __a, const _Tp& __b, _Compare __comp) - { - if (__comp(__b, __a)) - return __b; - return __a; - } - template<typename _Tp, typename _Compare> - inline const _Tp& - max(const _Tp& __a, const _Tp& __b, _Compare __comp) - { - if (__comp(__a, __b)) - return __b; - return __a; - } - template<typename _Iterator, - bool _IsNormal = __is_normal_iterator<_Iterator>::__value> - struct __niter_base - { - static _Iterator - __b(_Iterator __it) - { return __it; } - }; - template<typename _Iterator> - struct __niter_base<_Iterator, true> - { - static typename _Iterator::iterator_type - __b(_Iterator __it) - { return __it.base(); } - }; - template<typename _Iterator, - bool _IsMove = __is_move_iterator<_Iterator>::__value> - struct __miter_base - { - static _Iterator - __b(_Iterator __it) - { return __it; } - }; - template<typename _Iterator> - struct __miter_base<_Iterator, true> - { - static typename _Iterator::iterator_type - __b(_Iterator __it) - { return __it.base(); } - }; - template<bool, bool, typename> - struct __copy_move - { - template<typename _II, typename _OI> - static _OI - __copy_m(_II __first, _II __last, _OI __result) - { - for (; __first != __last; ++__result, ++__first) - *__result = *__first; - return __result; - } - }; - template<> - struct __copy_move<false, false, random_access_iterator_tag> - { - template<typename _II, typename _OI> - static _OI - __copy_m(_II __first, _II __last, _OI __result) - { - typedef typename iterator_traits<_II>::difference_type _Distance; - for(_Distance __n = __last - __first; __n > 0; --__n) - { - *__result = *__first; - ++__first; - ++__result; - } - return __result; - } - }; - template<bool _IsMove> - struct __copy_move<_IsMove, true, random_access_iterator_tag> - { - template<typename _Tp> - static _Tp* - __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) - { - __builtin_memmove(__result, __first, - sizeof(_Tp) * (__last - __first)); - return __result + (__last - __first); - } - }; - template<bool _IsMove, typename _II, typename _OI> - inline _OI - __copy_move_a(_II __first, _II __last, _OI __result) - { - typedef typename iterator_traits<_II>::value_type _ValueTypeI; - typedef typename iterator_traits<_OI>::value_type _ValueTypeO; - typedef typename iterator_traits<_II>::iterator_category _Category; - const bool __simple = (__is_pod(_ValueTypeI) - && __is_pointer<_II>::__value - && __is_pointer<_OI>::__value - && __are_same<_ValueTypeI, _ValueTypeO>::__value); - return std::__copy_move<_IsMove, __simple, - _Category>::__copy_m(__first, __last, __result); - } - template<typename _CharT> - struct char_traits; - template<typename _CharT, typename _Traits> - class istreambuf_iterator; - template<typename _CharT, typename _Traits> - class ostreambuf_iterator; - template<bool _IsMove, typename _CharT> - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, - ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type - __copy_move_a2(_CharT*, _CharT*, - ostreambuf_iterator<_CharT, char_traits<_CharT> >); - template<bool _IsMove, typename _CharT> - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, - ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type - __copy_move_a2(const _CharT*, const _CharT*, - ostreambuf_iterator<_CharT, char_traits<_CharT> >); - template<bool _IsMove, typename _CharT> - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, - _CharT*>::__type - __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, - istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); - template<bool _IsMove, typename _II, typename _OI> - inline _OI - __copy_move_a2(_II __first, _II __last, _OI __result) - { - return _OI(std::__copy_move_a<_IsMove> - (std::__niter_base<_II>::__b(__first), - std::__niter_base<_II>::__b(__last), - std::__niter_base<_OI>::__b(__result))); - } - template<typename _II, typename _OI> - inline _OI - copy(_II __first, _II __last, _OI __result) - { - - - ; - return (std::__copy_move_a2<__is_move_iterator<_II>::__value> - (std::__miter_base<_II>::__b(__first), - std::__miter_base<_II>::__b(__last), __result)); - } - template<bool, bool, typename> - struct __copy_move_backward - { - template<typename _BI1, typename _BI2> - static _BI2 - __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) - { - while (__first != __last) - *--__result = *--__last; - return __result; - } - }; - template<> - struct __copy_move_backward<false, false, random_access_iterator_tag> - { - template<typename _BI1, typename _BI2> - static _BI2 - __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) - { - typename iterator_traits<_BI1>::difference_type __n; - for (__n = __last - __first; __n > 0; --__n) - *--__result = *--__last; - return __result; - } - }; - template<bool _IsMove> - struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> - { - template<typename _Tp> - static _Tp* - __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result) - { - const ptrdiff_t _Num = __last - __first; - __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); - return __result - _Num; - } - }; - template<bool _IsMove, typename _BI1, typename _BI2> - inline _BI2 - __copy_move_backward_a(_BI1 __first, _BI1 __last, _BI2 __result) - { - typedef typename iterator_traits<_BI1>::value_type _ValueType1; - typedef typename iterator_traits<_BI2>::value_type _ValueType2; - typedef typename iterator_traits<_BI1>::iterator_category _Category; - const bool __simple = (__is_pod(_ValueType1) - && __is_pointer<_BI1>::__value - && __is_pointer<_BI2>::__value - && __are_same<_ValueType1, _ValueType2>::__value); - return std::__copy_move_backward<_IsMove, __simple, - _Category>::__copy_move_b(__first, - __last, - __result); - } - template<bool _IsMove, typename _BI1, typename _BI2> - inline _BI2 - __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) - { - return _BI2(std::__copy_move_backward_a<_IsMove> - (std::__niter_base<_BI1>::__b(__first), - std::__niter_base<_BI1>::__b(__last), - std::__niter_base<_BI2>::__b(__result))); - } - template<typename _BI1, typename _BI2> - inline _BI2 - copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) - { - - - - ; - return (std::__copy_move_backward_a2<__is_move_iterator<_BI1>::__value> - (std::__miter_base<_BI1>::__b(__first), - std::__miter_base<_BI1>::__b(__last), __result)); - } - template<typename _ForwardIterator, typename _Tp> - inline typename - __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, void>::__type - __fill_a(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __value) - { - for (; __first != __last; ++__first) - *__first = __value; - } - template<typename _ForwardIterator, typename _Tp> - inline typename - __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type - __fill_a(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __value) - { - const _Tp __tmp = __value; - for (; __first != __last; ++__first) - *__first = __tmp; - } - template<typename _Tp> - inline typename - __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type - __fill_a(_Tp* __first, _Tp* __last, const _Tp& __c) - { - const _Tp __tmp = __c; - __builtin_memset(__first, static_cast<unsigned char>(__tmp), - __last - __first); - } - template<typename _ForwardIterator, typename _Tp> - inline void - fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) - { - - ; - std::__fill_a(std::__niter_base<_ForwardIterator>::__b(__first), - std::__niter_base<_ForwardIterator>::__b(__last), __value); - } - template<typename _OutputIterator, typename _Size, typename _Tp> - inline typename - __gnu_cxx::__enable_if<!__is_scalar<_Tp>::__value, _OutputIterator>::__type - __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) - { - for (; __n > 0; --__n, ++__first) - *__first = __value; - return __first; - } - template<typename _OutputIterator, typename _Size, typename _Tp> - inline typename - __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type - __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value) - { - const _Tp __tmp = __value; - for (; __n > 0; --__n, ++__first) - *__first = __tmp; - return __first; - } - template<typename _Size, typename _Tp> - inline typename - __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, _Tp*>::__type - __fill_n_a(_Tp* __first, _Size __n, const _Tp& __c) - { - std::__fill_a(__first, __first + __n, __c); - return __first + __n; - } - template<typename _OI, typename _Size, typename _Tp> - inline _OI - fill_n(_OI __first, _Size __n, const _Tp& __value) - { - - return _OI(std::__fill_n_a(std::__niter_base<_OI>::__b(__first), - __n, __value)); - } - template<bool _BoolType> - struct __equal - { - template<typename _II1, typename _II2> - static bool - equal(_II1 __first1, _II1 __last1, _II2 __first2) - { - for (; __first1 != __last1; ++__first1, ++__first2) - if (!(*__first1 == *__first2)) - return false; - return true; - } - }; - template<> - struct __equal<true> - { - template<typename _Tp> - static bool - equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) - { - return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) - * (__last1 - __first1)); - } - }; - template<typename _II1, typename _II2> - inline bool - __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) - { - typedef typename iterator_traits<_II1>::value_type _ValueType1; - typedef typename iterator_traits<_II2>::value_type _ValueType2; - const bool __simple = (__is_integer<_ValueType1>::__value - && __is_pointer<_II1>::__value - && __is_pointer<_II2>::__value - && __are_same<_ValueType1, _ValueType2>::__value); - return std::__equal<__simple>::equal(__first1, __last1, __first2); - } - template<typename, typename> - struct __lc_rai - { - template<typename _II1, typename _II2> - static _II1 - __newlast1(_II1, _II1 __last1, _II2, _II2) - { return __last1; } - template<typename _II> - static bool - __cnd2(_II __first, _II __last) - { return __first != __last; } - }; - template<> - struct __lc_rai<random_access_iterator_tag, random_access_iterator_tag> - { - template<typename _RAI1, typename _RAI2> - static _RAI1 - __newlast1(_RAI1 __first1, _RAI1 __last1, - _RAI2 __first2, _RAI2 __last2) - { - const typename iterator_traits<_RAI1>::difference_type - __diff1 = __last1 - __first1; - const typename iterator_traits<_RAI2>::difference_type - __diff2 = __last2 - __first2; - return __diff2 < __diff1 ? __first1 + __diff2 : __last1; - } - template<typename _RAI> - static bool - __cnd2(_RAI, _RAI) - { return true; } - }; - template<bool _BoolType> - struct __lexicographical_compare - { - template<typename _II1, typename _II2> - static bool __lc(_II1, _II1, _II2, _II2); - }; - template<bool _BoolType> - template<typename _II1, typename _II2> - bool - __lexicographical_compare<_BoolType>:: - __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) - { - typedef typename iterator_traits<_II1>::iterator_category _Category1; - typedef typename iterator_traits<_II2>::iterator_category _Category2; - typedef std::__lc_rai<_Category1, _Category2> __rai_type; - __last1 = __rai_type::__newlast1(__first1, __last1, - __first2, __last2); - for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); - ++__first1, ++__first2) - { - if (*__first1 < *__first2) - return true; - if (*__first2 < *__first1) - return false; - } - return __first1 == __last1 && __first2 != __last2; - } - template<> - struct __lexicographical_compare<true> - { - template<typename _Tp, typename _Up> - static bool - __lc(const _Tp* __first1, const _Tp* __last1, - const _Up* __first2, const _Up* __last2) - { - const size_t __len1 = __last1 - __first1; - const size_t __len2 = __last2 - __first2; - const int __result = __builtin_memcmp(__first1, __first2, - std::min(__len1, __len2)); - return __result != 0 ? __result < 0 : __len1 < __len2; - } - }; - template<typename _II1, typename _II2> - inline bool - __lexicographical_compare_aux(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2) - { - typedef typename iterator_traits<_II1>::value_type _ValueType1; - typedef typename iterator_traits<_II2>::value_type _ValueType2; - const bool __simple = - (__is_byte<_ValueType1>::__value && __is_byte<_ValueType2>::__value - && !__gnu_cxx::__numeric_traits<_ValueType1>::__is_signed - && !__gnu_cxx::__numeric_traits<_ValueType2>::__is_signed - && __is_pointer<_II1>::__value - && __is_pointer<_II2>::__value); - return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, - __first2, __last2); - } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _II1, typename _II2> - inline bool - equal(_II1 __first1, _II1 __last1, _II2 __first2) - { - - - - ; - return std::__equal_aux(std::__niter_base<_II1>::__b(__first1), - std::__niter_base<_II1>::__b(__last1), - std::__niter_base<_II2>::__b(__first2)); - } - template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> - inline bool - equal(_IIter1 __first1, _IIter1 __last1, - _IIter2 __first2, _BinaryPredicate __binary_pred) - { - - - ; - for (; __first1 != __last1; ++__first1, ++__first2) - if (!bool(__binary_pred(*__first1, *__first2))) - return false; - return true; - } - template<typename _II1, typename _II2> - inline bool - lexicographical_compare(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2) - { - typedef typename iterator_traits<_II1>::value_type _ValueType1; - typedef typename iterator_traits<_II2>::value_type _ValueType2; - - - - - ; - ; - return std::__lexicographical_compare_aux - (std::__niter_base<_II1>::__b(__first1), - std::__niter_base<_II1>::__b(__last1), - std::__niter_base<_II2>::__b(__first2), - std::__niter_base<_II2>::__b(__last2)); - } - template<typename _II1, typename _II2, typename _Compare> - bool - lexicographical_compare(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2, _Compare __comp) - { - typedef typename iterator_traits<_II1>::iterator_category _Category1; - typedef typename iterator_traits<_II2>::iterator_category _Category2; - typedef std::__lc_rai<_Category1, _Category2> __rai_type; - - - ; - ; - __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); - for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); - ++__first1, ++__first2) - { - if (__comp(*__first1, *__first2)) - return true; - if (__comp(*__first2, *__first1)) - return false; - } - return __first1 == __last1 && __first2 != __last2; - } - template<typename _InputIterator1, typename _InputIterator2> - pair<_InputIterator1, _InputIterator2> - mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2) - { - - - - ; - while (__first1 != __last1 && *__first1 == *__first2) - { - ++__first1; - ++__first2; - } - return pair<_InputIterator1, _InputIterator2>(__first1, __first2); - } - template<typename _InputIterator1, typename _InputIterator2, - typename _BinaryPredicate> - pair<_InputIterator1, _InputIterator2> - mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2, _BinaryPredicate __binary_pred) - { - - - ; - while (__first1 != __last1 && bool(__binary_pred(*__first1, *__first2))) - { - ++__first1; - ++__first2; - } - return pair<_InputIterator1, _InputIterator2>(__first1, __first2); - } -} - -extern "C++" { -namespace std -{ - class exception - { - public: - exception() throw() { } - virtual ~exception() throw(); - virtual const char* what() const throw(); - }; - class bad_exception : public exception - { - public: - bad_exception() throw() { } - virtual ~bad_exception() throw(); - virtual const char* what() const throw(); - }; - typedef void (*terminate_handler) (); - typedef void (*unexpected_handler) (); - terminate_handler set_terminate(terminate_handler) throw(); - void terminate() __attribute__ ((__noreturn__)); - unexpected_handler set_unexpected(unexpected_handler) throw(); - void unexpected() __attribute__ ((__noreturn__)); - bool uncaught_exception() throw(); -} -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - void __verbose_terminate_handler(); -} -} -extern "C++" { -namespace std -{ - class bad_alloc : public exception - { - public: - bad_alloc() throw() { } - virtual ~bad_alloc() throw(); - virtual const char* what() const throw(); - }; - struct nothrow_t { }; - extern const nothrow_t nothrow; - typedef void (*new_handler)(); - new_handler set_new_handler(new_handler) throw(); -} -void* operator new(std::size_t) throw (std::bad_alloc); -void* operator new[](std::size_t) throw (std::bad_alloc); -void operator delete(void*) throw(); -void operator delete[](void*) throw(); -void* operator new(std::size_t, const std::nothrow_t&) throw(); -void* operator new[](std::size_t, const std::nothrow_t&) throw(); -void operator delete(void*, const std::nothrow_t&) throw(); -void operator delete[](void*, const std::nothrow_t&) throw(); -inline void* operator new(std::size_t, void* __p) throw() { return __p; } -inline void* operator new[](std::size_t, void* __p) throw() { return __p; } -inline void operator delete (void*, void*) throw() { } -inline void operator delete[](void*, void*) throw() { } -} -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - using std::size_t; - using std::ptrdiff_t; - template<typename _Tp> - class new_allocator - { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - typedef _Tp value_type; - template<typename _Tp1> - struct rebind - { typedef new_allocator<_Tp1> other; }; - new_allocator() throw() { } - new_allocator(const new_allocator&) throw() { } - template<typename _Tp1> - new_allocator(const new_allocator<_Tp1>&) throw() { } - ~new_allocator() throw() { } - pointer - address(reference __x) const { return &__x; } - const_pointer - address(const_reference __x) const { return &__x; } - pointer - allocate(size_type __n, const void* = 0) - { - if (__builtin_expect(__n > this->max_size(), false)) - std::__throw_bad_alloc(); - return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); - } - void - deallocate(pointer __p, size_type) - { ::operator delete(__p); } - size_type - max_size() const throw() - { return size_t(-1) / sizeof(_Tp); } - void - construct(pointer __p, const _Tp& __val) - { ::new((void *)__p) _Tp(__val); } - void - destroy(pointer __p) { __p->~_Tp(); } - }; - template<typename _Tp> - inline bool - operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&) - { return true; } - template<typename _Tp> - inline bool - operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&) - { return false; } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Tp> - class allocator; - template<> - class allocator<void> - { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef void* pointer; - typedef const void* const_pointer; - typedef void value_type; - template<typename _Tp1> - struct rebind - { typedef allocator<_Tp1> other; }; - }; - template<typename _Tp> - class allocator: public __gnu_cxx::new_allocator<_Tp> - { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - typedef _Tp value_type; - template<typename _Tp1> - struct rebind - { typedef allocator<_Tp1> other; }; - allocator() throw() { } - allocator(const allocator& __a) throw() - : __gnu_cxx::new_allocator<_Tp>(__a) { } - template<typename _Tp1> - allocator(const allocator<_Tp1>&) throw() { } - ~allocator() throw() { } - }; - template<typename _T1, typename _T2> - inline bool - operator==(const allocator<_T1>&, const allocator<_T2>&) - { return true; } - template<typename _Tp> - inline bool - operator==(const allocator<_Tp>&, const allocator<_Tp>&) - { return true; } - template<typename _T1, typename _T2> - inline bool - operator!=(const allocator<_T1>&, const allocator<_T2>&) - { return false; } - template<typename _Tp> - inline bool - operator!=(const allocator<_Tp>&, const allocator<_Tp>&) - { return false; } - extern template class allocator<char>; - extern template class allocator<wchar_t>; - template<typename _Alloc, bool = __is_empty(_Alloc)> - struct __alloc_swap - { static void _S_do_it(_Alloc&, _Alloc&) { } }; - template<typename _Alloc> - struct __alloc_swap<_Alloc, false> - { - static void - _S_do_it(_Alloc& __one, _Alloc& __two) - { - if (__one != __two) - swap(__one, __two); - } - }; - template<typename _Alloc, bool = __is_empty(_Alloc)> - struct __alloc_neq - { - static bool - _S_do_it(const _Alloc&, const _Alloc&) - { return false; } - }; - template<typename _Alloc> - struct __alloc_neq<_Alloc, false> - { - static bool - _S_do_it(const _Alloc& __one, const _Alloc& __two) - { return __one != __two; } - }; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - struct _List_node_base - { - _List_node_base* _M_next; - _List_node_base* _M_prev; - static void - swap(_List_node_base& __x, _List_node_base& __y); - void - transfer(_List_node_base * const __first, - _List_node_base * const __last); - void - reverse(); - void - hook(_List_node_base * const __position); - void - unhook(); - }; - template<typename _Tp> - struct _List_node : public _List_node_base - { - _Tp _M_data; - }; - template<typename _Tp> - struct _List_iterator - { - typedef _List_iterator<_Tp> _Self; - typedef _List_node<_Tp> _Node; - typedef ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - typedef _Tp value_type; - typedef _Tp* pointer; - typedef _Tp& reference; - _List_iterator() - : _M_node() { } - explicit - _List_iterator(_List_node_base* __x) - : _M_node(__x) { } - reference - operator*() const - { return static_cast<_Node*>(_M_node)->_M_data; } - pointer - operator->() const - { return &static_cast<_Node*>(_M_node)->_M_data; } - _Self& - operator++() - { - _M_node = _M_node->_M_next; - return *this; - } - _Self - operator++(int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_next; - return __tmp; - } - _Self& - operator--() - { - _M_node = _M_node->_M_prev; - return *this; - } - _Self - operator--(int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_prev; - return __tmp; - } - bool - operator==(const _Self& __x) const - { return _M_node == __x._M_node; } - bool - operator!=(const _Self& __x) const - { return _M_node != __x._M_node; } - _List_node_base* _M_node; - }; - template<typename _Tp> - struct _List_const_iterator - { - typedef _List_const_iterator<_Tp> _Self; - typedef const _List_node<_Tp> _Node; - typedef _List_iterator<_Tp> iterator; - typedef ptrdiff_t difference_type; - typedef std::bidirectional_iterator_tag iterator_category; - typedef _Tp value_type; - typedef const _Tp* pointer; - typedef const _Tp& reference; - _List_const_iterator() - : _M_node() { } - explicit - _List_const_iterator(const _List_node_base* __x) - : _M_node(__x) { } - _List_const_iterator(const iterator& __x) - : _M_node(__x._M_node) { } - reference - operator*() const - { return static_cast<_Node*>(_M_node)->_M_data; } - pointer - operator->() const - { return &static_cast<_Node*>(_M_node)->_M_data; } - _Self& - operator++() - { - _M_node = _M_node->_M_next; - return *this; - } - _Self - operator++(int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_next; - return __tmp; - } - _Self& - operator--() - { - _M_node = _M_node->_M_prev; - return *this; - } - _Self - operator--(int) - { - _Self __tmp = *this; - _M_node = _M_node->_M_prev; - return __tmp; - } - bool - operator==(const _Self& __x) const - { return _M_node == __x._M_node; } - bool - operator!=(const _Self& __x) const - { return _M_node != __x._M_node; } - const _List_node_base* _M_node; - }; - template<typename _Val> - inline bool - operator==(const _List_iterator<_Val>& __x, - const _List_const_iterator<_Val>& __y) - { return __x._M_node == __y._M_node; } - template<typename _Val> - inline bool - operator!=(const _List_iterator<_Val>& __x, - const _List_const_iterator<_Val>& __y) - { return __x._M_node != __y._M_node; } - template<typename _Tp, typename _Alloc> - class _List_base - { - protected: - typedef typename _Alloc::template rebind<_List_node<_Tp> >::other - _Node_alloc_type; - typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type; - struct _List_impl - : public _Node_alloc_type - { - _List_node_base _M_node; - _List_impl() - : _Node_alloc_type(), _M_node() - { } - _List_impl(const _Node_alloc_type& __a) - : _Node_alloc_type(__a), _M_node() - { } - }; - _List_impl _M_impl; - _List_node<_Tp>* - _M_get_node() - { return _M_impl._Node_alloc_type::allocate(1); } - void - _M_put_node(_List_node<_Tp>* __p) - { _M_impl._Node_alloc_type::deallocate(__p, 1); } - public: - typedef _Alloc allocator_type; - _Node_alloc_type& - _M_get_Node_allocator() - { return *static_cast<_Node_alloc_type*>(&this->_M_impl); } - const _Node_alloc_type& - _M_get_Node_allocator() const - { return *static_cast<const _Node_alloc_type*>(&this->_M_impl); } - _Tp_alloc_type - _M_get_Tp_allocator() const - { return _Tp_alloc_type(_M_get_Node_allocator()); } - allocator_type - get_allocator() const - { return allocator_type(_M_get_Node_allocator()); } - _List_base() - : _M_impl() - { _M_init(); } - _List_base(const allocator_type& __a) - : _M_impl(__a) - { _M_init(); } - ~_List_base() - { _M_clear(); } - void - _M_clear(); - void - _M_init() - { - this->_M_impl._M_node._M_next = &this->_M_impl._M_node; - this->_M_impl._M_node._M_prev = &this->_M_impl._M_node; - } - }; - template<typename _Tp, typename _Alloc = std::allocator<_Tp> > - class list : protected _List_base<_Tp, _Alloc> - { - typedef typename _Alloc::value_type _Alloc_value_type; - - - typedef _List_base<_Tp, _Alloc> _Base; - typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; - public: - typedef _Tp value_type; - typedef typename _Tp_alloc_type::pointer pointer; - typedef typename _Tp_alloc_type::const_pointer const_pointer; - typedef typename _Tp_alloc_type::reference reference; - typedef typename _Tp_alloc_type::const_reference const_reference; - typedef _List_iterator<_Tp> iterator; - typedef _List_const_iterator<_Tp> const_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Alloc allocator_type; - protected: - typedef _List_node<_Tp> _Node; - using _Base::_M_impl; - using _Base::_M_put_node; - using _Base::_M_get_node; - using _Base::_M_get_Tp_allocator; - using _Base::_M_get_Node_allocator; - _Node* - _M_create_node(const value_type& __x) - { - _Node* __p = this->_M_get_node(); - try - { - _M_get_Tp_allocator().construct(&__p->_M_data, __x); - } - catch(...) - { - _M_put_node(__p); - throw; - } - return __p; - } - public: - list() - : _Base() { } - explicit - list(const allocator_type& __a) - : _Base(__a) { } - explicit - list(size_type __n, const value_type& __value = value_type(), - const allocator_type& __a = allocator_type()) - : _Base(__a) - { _M_fill_initialize(__n, __value); } - list(const list& __x) - : _Base(__x._M_get_Node_allocator()) - { _M_initialize_dispatch(__x.begin(), __x.end(), __false_type()); } - template<typename _InputIterator> - list(_InputIterator __first, _InputIterator __last, - const allocator_type& __a = allocator_type()) - : _Base(__a) - { - typedef typename std::__is_integer<_InputIterator>::__type _Integral; - _M_initialize_dispatch(__first, __last, _Integral()); - } - list& - operator=(const list& __x); - void - assign(size_type __n, const value_type& __val) - { _M_fill_assign(__n, __val); } - template<typename _InputIterator> - void - assign(_InputIterator __first, _InputIterator __last) - { - typedef typename std::__is_integer<_InputIterator>::__type _Integral; - _M_assign_dispatch(__first, __last, _Integral()); - } - allocator_type - get_allocator() const - { return _Base::get_allocator(); } - iterator - begin() - { return iterator(this->_M_impl._M_node._M_next); } - const_iterator - begin() const - { return const_iterator(this->_M_impl._M_node._M_next); } - iterator - end() - { return iterator(&this->_M_impl._M_node); } - const_iterator - end() const - { return const_iterator(&this->_M_impl._M_node); } - reverse_iterator - rbegin() - { return reverse_iterator(end()); } - const_reverse_iterator - rbegin() const - { return const_reverse_iterator(end()); } - reverse_iterator - rend() - { return reverse_iterator(begin()); } - const_reverse_iterator - rend() const - { return const_reverse_iterator(begin()); } - bool - empty() const - { return this->_M_impl._M_node._M_next == &this->_M_impl._M_node; } - size_type - size() const - { return std::distance(begin(), end()); } - size_type - max_size() const - { return _M_get_Node_allocator().max_size(); } - void - resize(size_type __new_size, value_type __x = value_type()); - reference - front() - { return *begin(); } - const_reference - front() const - { return *begin(); } - reference - back() - { - iterator __tmp = end(); - --__tmp; - return *__tmp; - } - const_reference - back() const - { - const_iterator __tmp = end(); - --__tmp; - return *__tmp; - } - void - push_front(const value_type& __x) - { this->_M_insert(begin(), __x); } - void - pop_front() - { this->_M_erase(begin()); } - void - push_back(const value_type& __x) - { this->_M_insert(end(), __x); } - void - pop_back() - { this->_M_erase(iterator(this->_M_impl._M_node._M_prev)); } - iterator - insert(iterator __position, const value_type& __x); - void - insert(iterator __position, size_type __n, const value_type& __x) - { - list __tmp(__n, __x, _M_get_Node_allocator()); - splice(__position, __tmp); - } - template<typename _InputIterator> - void - insert(iterator __position, _InputIterator __first, - _InputIterator __last) - { - list __tmp(__first, __last, _M_get_Node_allocator()); - splice(__position, __tmp); - } - iterator - erase(iterator __position); - iterator - erase(iterator __first, iterator __last) - { - while (__first != __last) - __first = erase(__first); - return __last; - } - void - swap(list& __x) - { - _List_node_base::swap(this->_M_impl._M_node, __x._M_impl._M_node); - std::__alloc_swap<typename _Base::_Node_alloc_type>:: - _S_do_it(_M_get_Node_allocator(), __x._M_get_Node_allocator()); - } - void - clear() - { - _Base::_M_clear(); - _Base::_M_init(); - } - void - splice(iterator __position, list& __x) - { - if (!__x.empty()) - { - _M_check_equal_allocators(__x); - this->_M_transfer(__position, __x.begin(), __x.end()); - } - } - void - splice(iterator __position, list& __x, iterator __i) - { - iterator __j = __i; - ++__j; - if (__position == __i || __position == __j) - return; - if (this != &__x) - _M_check_equal_allocators(__x); - this->_M_transfer(__position, __i, __j); - } - void - splice(iterator __position, list& __x, iterator __first, - iterator __last) - { - if (__first != __last) - { - if (this != &__x) - _M_check_equal_allocators(__x); - this->_M_transfer(__position, __first, __last); - } - } - void - remove(const _Tp& __value); - template<typename _Predicate> - void - remove_if(_Predicate); - void - unique(); - template<typename _BinaryPredicate> - void - unique(_BinaryPredicate); - void - merge(list& __x); - template<typename _StrictWeakOrdering> - void - merge(list&, _StrictWeakOrdering); - void - reverse() - { this->_M_impl._M_node.reverse(); } - void - sort(); - template<typename _StrictWeakOrdering> - void - sort(_StrictWeakOrdering); - protected: - template<typename _Integer> - void - _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) - { _M_fill_initialize(static_cast<size_type>(__n), __x); } - template<typename _InputIterator> - void - _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, - __false_type) - { - for (; __first != __last; ++__first) - push_back(*__first); - } - void - _M_fill_initialize(size_type __n, const value_type& __x) - { - for (; __n > 0; --__n) - push_back(__x); - } - template<typename _Integer> - void - _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) - { _M_fill_assign(__n, __val); } - template<typename _InputIterator> - void - _M_assign_dispatch(_InputIterator __first, _InputIterator __last, - __false_type); - void - _M_fill_assign(size_type __n, const value_type& __val); - void - _M_transfer(iterator __position, iterator __first, iterator __last) - { __position._M_node->transfer(__first._M_node, __last._M_node); } - void - _M_insert(iterator __position, const value_type& __x) - { - _Node* __tmp = _M_create_node(__x); - __tmp->hook(__position._M_node); - } - void - _M_erase(iterator __position) - { - __position._M_node->unhook(); - _Node* __n = static_cast<_Node*>(__position._M_node); - _M_get_Tp_allocator().destroy(&__n->_M_data); - _M_put_node(__n); - } - void - _M_check_equal_allocators(list& __x) - { - if (std::__alloc_neq<typename _Base::_Node_alloc_type>:: - _S_do_it(_M_get_Node_allocator(), __x._M_get_Node_allocator())) - __throw_runtime_error(("list::_M_check_equal_allocators")); - } - }; - template<typename _Tp, typename _Alloc> - inline bool - operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) - { - typedef typename list<_Tp, _Alloc>::const_iterator const_iterator; - const_iterator __end1 = __x.end(); - const_iterator __end2 = __y.end(); - const_iterator __i1 = __x.begin(); - const_iterator __i2 = __y.begin(); - while (__i1 != __end1 && __i2 != __end2 && *__i1 == *__i2) - { - ++__i1; - ++__i2; - } - return __i1 == __end1 && __i2 == __end2; - } - template<typename _Tp, typename _Alloc> - inline bool - operator<(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) - { return std::lexicographical_compare(__x.begin(), __x.end(), - __y.begin(), __y.end()); } - template<typename _Tp, typename _Alloc> - inline bool - operator!=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) - { return !(__x == __y); } - template<typename _Tp, typename _Alloc> - inline bool - operator>(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) - { return __y < __x; } - template<typename _Tp, typename _Alloc> - inline bool - operator<=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) - { return !(__y < __x); } - template<typename _Tp, typename _Alloc> - inline bool - operator>=(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) - { return !(__x < __y); } - template<typename _Tp, typename _Alloc> - inline void - swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y) - { __x.swap(__y); } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Tp, typename _Alloc> - void - _List_base<_Tp, _Alloc>:: - _M_clear() - { - typedef _List_node<_Tp> _Node; - _Node* __cur = static_cast<_Node*>(this->_M_impl._M_node._M_next); - while (__cur != &this->_M_impl._M_node) - { - _Node* __tmp = __cur; - __cur = static_cast<_Node*>(__cur->_M_next); - _M_get_Tp_allocator().destroy(&__tmp->_M_data); - _M_put_node(__tmp); - } - } - template<typename _Tp, typename _Alloc> - typename list<_Tp, _Alloc>::iterator - list<_Tp, _Alloc>:: - insert(iterator __position, const value_type& __x) - { - _Node* __tmp = _M_create_node(__x); - __tmp->hook(__position._M_node); - return iterator(__tmp); - } - template<typename _Tp, typename _Alloc> - typename list<_Tp, _Alloc>::iterator - list<_Tp, _Alloc>:: - erase(iterator __position) - { - iterator __ret = iterator(__position._M_node->_M_next); - _M_erase(__position); - return __ret; - } - template<typename _Tp, typename _Alloc> - void - list<_Tp, _Alloc>:: - resize(size_type __new_size, value_type __x) - { - iterator __i = begin(); - size_type __len = 0; - for (; __i != end() && __len < __new_size; ++__i, ++__len) - ; - if (__len == __new_size) - erase(__i, end()); - else - insert(end(), __new_size - __len, __x); - } - template<typename _Tp, typename _Alloc> - list<_Tp, _Alloc>& - list<_Tp, _Alloc>:: - operator=(const list& __x) - { - if (this != &__x) - { - iterator __first1 = begin(); - iterator __last1 = end(); - const_iterator __first2 = __x.begin(); - const_iterator __last2 = __x.end(); - for (; __first1 != __last1 && __first2 != __last2; - ++__first1, ++__first2) - *__first1 = *__first2; - if (__first2 == __last2) - erase(__first1, __last1); - else - insert(__last1, __first2, __last2); - } - return *this; - } - template<typename _Tp, typename _Alloc> - void - list<_Tp, _Alloc>:: - _M_fill_assign(size_type __n, const value_type& __val) - { - iterator __i = begin(); - for (; __i != end() && __n > 0; ++__i, --__n) - *__i = __val; - if (__n > 0) - insert(end(), __n, __val); - else - erase(__i, end()); - } - template<typename _Tp, typename _Alloc> - template <typename _InputIterator> - void - list<_Tp, _Alloc>:: - _M_assign_dispatch(_InputIterator __first2, _InputIterator __last2, - __false_type) - { - iterator __first1 = begin(); - iterator __last1 = end(); - for (; __first1 != __last1 && __first2 != __last2; - ++__first1, ++__first2) - *__first1 = *__first2; - if (__first2 == __last2) - erase(__first1, __last1); - else - insert(__last1, __first2, __last2); - } - template<typename _Tp, typename _Alloc> - void - list<_Tp, _Alloc>:: - remove(const value_type& __value) - { - iterator __first = begin(); - iterator __last = end(); - iterator __extra = __last; - while (__first != __last) - { - iterator __next = __first; - ++__next; - if (*__first == __value) - { - if (&*__first != &__value) - _M_erase(__first); - else - __extra = __first; - } - __first = __next; - } - if (__extra != __last) - _M_erase(__extra); - } - template<typename _Tp, typename _Alloc> - void - list<_Tp, _Alloc>:: - unique() - { - iterator __first = begin(); - iterator __last = end(); - if (__first == __last) - return; - iterator __next = __first; - while (++__next != __last) - { - if (*__first == *__next) - _M_erase(__next); - else - __first = __next; - __next = __first; - } - } - template<typename _Tp, typename _Alloc> - void - list<_Tp, _Alloc>:: - merge(list& __x) - { - if (this != &__x) - { - _M_check_equal_allocators(__x); - iterator __first1 = begin(); - iterator __last1 = end(); - iterator __first2 = __x.begin(); - iterator __last2 = __x.end(); - while (__first1 != __last1 && __first2 != __last2) - if (*__first2 < *__first1) - { - iterator __next = __first2; - _M_transfer(__first1, __first2, ++__next); - __first2 = __next; - } - else - ++__first1; - if (__first2 != __last2) - _M_transfer(__last1, __first2, __last2); - } - } - template<typename _Tp, typename _Alloc> - template <typename _StrictWeakOrdering> - void - list<_Tp, _Alloc>:: - merge(list& __x, _StrictWeakOrdering __comp) - { - if (this != &__x) - { - _M_check_equal_allocators(__x); - iterator __first1 = begin(); - iterator __last1 = end(); - iterator __first2 = __x.begin(); - iterator __last2 = __x.end(); - while (__first1 != __last1 && __first2 != __last2) - if (__comp(*__first2, *__first1)) - { - iterator __next = __first2; - _M_transfer(__first1, __first2, ++__next); - __first2 = __next; - } - else - ++__first1; - if (__first2 != __last2) - _M_transfer(__last1, __first2, __last2); - } - } - template<typename _Tp, typename _Alloc> - void - list<_Tp, _Alloc>:: - sort() - { - if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node - && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) - { - list __carry; - list __tmp[64]; - list * __fill = &__tmp[0]; - list * __counter; - do - { - __carry.splice(__carry.begin(), *this, begin()); - for(__counter = &__tmp[0]; - __counter != __fill && !__counter->empty(); - ++__counter) - { - __counter->merge(__carry); - __carry.swap(*__counter); - } - __carry.swap(*__counter); - if (__counter == __fill) - ++__fill; - } - while ( !empty() ); - for (__counter = &__tmp[1]; __counter != __fill; ++__counter) - __counter->merge(*(__counter - 1)); - swap( *(__fill - 1) ); - } - } - template<typename _Tp, typename _Alloc> - template <typename _Predicate> - void - list<_Tp, _Alloc>:: - remove_if(_Predicate __pred) - { - iterator __first = begin(); - iterator __last = end(); - while (__first != __last) - { - iterator __next = __first; - ++__next; - if (__pred(*__first)) - _M_erase(__first); - __first = __next; - } - } - template<typename _Tp, typename _Alloc> - template <typename _BinaryPredicate> - void - list<_Tp, _Alloc>:: - unique(_BinaryPredicate __binary_pred) - { - iterator __first = begin(); - iterator __last = end(); - if (__first == __last) - return; - iterator __next = __first; - while (++__next != __last) - { - if (__binary_pred(*__first, *__next)) - _M_erase(__next); - else - __first = __next; - __next = __first; - } - } - template<typename _Tp, typename _Alloc> - template <typename _StrictWeakOrdering> - void - list<_Tp, _Alloc>:: - sort(_StrictWeakOrdering __comp) - { - if (this->_M_impl._M_node._M_next != &this->_M_impl._M_node - && this->_M_impl._M_node._M_next->_M_next != &this->_M_impl._M_node) - { - list __carry; - list __tmp[64]; - list * __fill = &__tmp[0]; - list * __counter; - do - { - __carry.splice(__carry.begin(), *this, begin()); - for(__counter = &__tmp[0]; - __counter != __fill && !__counter->empty(); - ++__counter) - { - __counter->merge(__carry, __comp); - __carry.swap(*__counter); - } - __carry.swap(*__counter); - if (__counter == __fill) - ++__fill; - } - while ( !empty() ); - for (__counter = &__tmp[1]; __counter != __fill; ++__counter) - __counter->merge(*(__counter - 1), __comp); - swap(*(__fill - 1)); - } - } -} -extern void foobarit(void); -class Game -{ -public: - struct BuildProject - { - int posX; - }; - std::list<BuildProject> buildProjects; -}; -static Game game; -static std::list<std::list<Game::BuildProject>::iterator> -erasableBuildProjects; -void *buildProjectSyncStepConcurrently(int id, int localTeam) -{ - __transaction_relaxed { - std::list<std::list<Game::BuildProject>::iterator>::iterator it -= erasableBuildProjects.begin(); - foobarit(); - game.buildProjects.erase( (std::list<Game::BuildProject> -::iterator) *it); - } - return 0; -} - diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46646.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46646.C deleted file mode 100644 index 9431615b0..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46646.C +++ /dev/null @@ -1,890 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O0"} - -namespace std __attribute__ ((__visibility__ ("default"))) { - template<class _T1, class _T2> - struct pair - { - typedef _T1 first_type; - typedef _T2 second_type; - _T1 first; - _T2 second; - pair() - : first(), second() { } - pair(const _T1& __a, const _T2& __b) - : first(__a), second(__b) { } - }; -} - - -typedef long int ptrdiff_t; -typedef __SIZE_TYPE__ size_t; -namespace std __attribute__ ((__visibility__ ("default"))) { - using ::ptrdiff_t; - using ::size_t; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - struct input_iterator_tag { }; - struct output_iterator_tag { }; - struct forward_iterator_tag : public input_iterator_tag { }; - struct bidirectional_iterator_tag : public forward_iterator_tag { }; - struct random_access_iterator_tag : public bidirectional_iterator_tag { }; - template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, - typename _Pointer = _Tp*, typename _Reference = _Tp&> - struct iterator - { - typedef _Category iterator_category; - typedef _Tp value_type; - typedef _Distance difference_type; - typedef _Pointer pointer; - typedef _Reference reference; - }; - template<typename _Iterator> - struct iterator_traits - { - typedef typename _Iterator::iterator_category iterator_category; - typedef typename _Iterator::value_type value_type; - typedef typename _Iterator::difference_type difference_type; - typedef typename _Iterator::pointer pointer; - typedef typename _Iterator::reference reference; - }; - template<typename _Tp> - struct iterator_traits<_Tp*> - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef _Tp& reference; - }; - template<typename _Tp> - struct iterator_traits<const _Tp*> - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef const _Tp* pointer; - typedef const _Tp& reference; - }; - template<typename _Iter> - inline typename iterator_traits<_Iter>::iterator_category - __iterator_category(const _Iter&) - { return typename iterator_traits<_Iter>::iterator_category(); } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Iterator> - class reverse_iterator - : public iterator<typename iterator_traits<_Iterator>::iterator_category, - typename iterator_traits<_Iterator>::value_type, - typename iterator_traits<_Iterator>::difference_type, - typename iterator_traits<_Iterator>::pointer, - typename iterator_traits<_Iterator>::reference> - { - protected: - _Iterator current; - typedef iterator_traits<_Iterator> __traits_type; - public: - typedef _Iterator iterator_type; - typedef typename __traits_type::difference_type difference_type; - typedef typename __traits_type::pointer pointer; - typedef typename __traits_type::reference reference; - reverse_iterator() : current() { } - explicit - reverse_iterator(iterator_type __x) : current(__x) { } - reverse_iterator(const reverse_iterator& __x) - : current(__x.current) { } - template<typename _Iter> - reverse_iterator(const reverse_iterator<_Iter>& __x) - : current(__x.base()) { } - iterator_type - base() const - { return current; } - reference - operator*() const - { - _Iterator __tmp = current; - return *--__tmp; - } - pointer - operator->() const - { return &(operator*()); } - reverse_iterator& - operator++() - { - --current; - return *this; - } - reverse_iterator - operator++(int) - { - reverse_iterator __tmp = *this; - --current; - return __tmp; - } - reverse_iterator& - operator--() - { - ++current; - return *this; - } - reverse_iterator - operator--(int) - { - reverse_iterator __tmp = *this; - ++current; - return __tmp; - } - reverse_iterator - operator+(difference_type __n) const - { return reverse_iterator(current - __n); } - reverse_iterator& - operator+=(difference_type __n) - { - current -= __n; - return *this; - } - reverse_iterator - operator-(difference_type __n) const - { return reverse_iterator(current + __n); } - reverse_iterator& - operator-=(difference_type __n) - { - current += __n; - return *this; - } - reference - operator[](difference_type __n) const - { return *(*this + __n); } - }; -} - - - -extern "C++" { -namespace std -{ - class exception - { - public: - exception() throw() { } - virtual ~exception() throw(); - virtual const char* what() const throw(); - }; - class bad_exception : public exception - { - public: - bad_exception() throw() { } - virtual ~bad_exception() throw(); - virtual const char* what() const throw(); - }; - typedef void (*terminate_handler) (); - typedef void (*unexpected_handler) (); - terminate_handler set_terminate(terminate_handler) throw(); - void terminate() throw() __attribute__ ((__noreturn__)); - unexpected_handler set_unexpected(unexpected_handler) throw(); - void unexpected() __attribute__ ((__noreturn__)); - bool uncaught_exception() throw() __attribute__ ((__pure__)); -} -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - void __verbose_terminate_handler(); -} -} -extern "C++" { -namespace std -{ - class bad_alloc : public exception - { - public: - bad_alloc() throw() { } - virtual ~bad_alloc() throw(); - virtual const char* what() const throw(); - }; - struct nothrow_t { }; - extern const nothrow_t nothrow; - typedef void (*new_handler)(); - new_handler set_new_handler(new_handler) throw(); -} - -void* operator new(std::size_t, const std::nothrow_t&) throw(); -void* operator new[](std::size_t, const std::nothrow_t&) throw(); -void operator delete(void*, const std::nothrow_t&) throw(); -void operator delete[](void*, const std::nothrow_t&) throw(); -inline void* operator new(std::size_t, void* __p) throw() { return __p; } -inline void* operator new[](std::size_t, void* __p) throw() { return __p; } -inline void operator delete (void*, void*) throw() { } -inline void operator delete[](void*, void*) throw() { } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - void - __throw_bad_exception(void) __attribute__((__noreturn__)); - __attribute__((transaction_safe)) - void - __throw_bad_alloc(void) __attribute__((__noreturn__)); - void - __throw_bad_cast(void) __attribute__((__noreturn__)); - void - __throw_bad_typeid(void) __attribute__((__noreturn__)); - void - __throw_logic_error(const char*) __attribute__((__noreturn__)); - void - __throw_domain_error(const char*) __attribute__((__noreturn__)); - void - __throw_invalid_argument(const char*) __attribute__((__noreturn__)); - void - __throw_length_error(const char*) __attribute__((__noreturn__)); - void - __throw_out_of_range(const char*) __attribute__((__noreturn__)); - void - __throw_runtime_error(const char*) __attribute__((__noreturn__)); - void - __throw_range_error(const char*) __attribute__((__noreturn__)); - void - __throw_overflow_error(const char*) __attribute__((__noreturn__)); - void - __throw_underflow_error(const char*) __attribute__((__noreturn__)); - void - __throw_ios_failure(const char*) __attribute__((__noreturn__)); - void - __throw_system_error(int) __attribute__((__noreturn__)); - void - __throw_future_error(int) __attribute__((__noreturn__)); - void - __throw_bad_function_call() __attribute__((__noreturn__)); -} - - -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Tp> - inline void - swap(_Tp& __a, _Tp& __b) - { - - _Tp __tmp = (__a); - __a = (__b); - __b = (__tmp); - } - template<typename _Tp, size_t _Nm> - inline void - swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) - { - for (size_t __n = 0; __n < _Nm; ++__n) - swap(__a[__n], __b[__n]); - } -} -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { - using std::size_t; - using std::ptrdiff_t; - template<typename _Tp> - class new_allocator - { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - typedef _Tp value_type; - template<typename _Tp1> - struct rebind - { typedef new_allocator<_Tp1> other; }; - new_allocator() throw() { } - new_allocator(const new_allocator&) throw() { } - template<typename _Tp1> - new_allocator(const new_allocator<_Tp1>&) throw() { } - ~new_allocator() throw() { } - pointer - address(reference __x) const { return &__x; } - const_pointer - address(const_reference __x) const { return &__x; } - __attribute__((transaction_safe)) - pointer - allocate(size_type __n, const void* = 0) - { - if (__n > this->max_size()) - std::__throw_bad_alloc(); - return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); - } -__attribute__((transaction_safe)) -void - deallocate(pointer __p, size_type) - { ::operator delete(__p); } - size_type - max_size() const throw() - { return size_t(-1) / sizeof(_Tp); } - void - construct(pointer __p, const _Tp& __val) - { ::new((void *)__p) _Tp(__val); } - void - destroy(pointer __p) { __p->~_Tp(); } - }; - template<typename _Tp> - inline bool - operator==(const new_allocator<_Tp>&, const new_allocator<_Tp>&) - { return true; } - template<typename _Tp> - inline bool - operator!=(const new_allocator<_Tp>&, const new_allocator<_Tp>&) - { return false; } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Tp> - class allocator; - template<> - class allocator<void> - { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef void* pointer; - typedef const void* const_pointer; - typedef void value_type; - template<typename _Tp1> - struct rebind - { typedef allocator<_Tp1> other; }; - }; - template<typename _Tp> - class allocator: public __gnu_cxx::new_allocator<_Tp> - { - public: - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - typedef _Tp value_type; - template<typename _Tp1> - struct rebind - { typedef allocator<_Tp1> other; }; - allocator() throw() { } - allocator(const allocator& __a) throw() - : __gnu_cxx::new_allocator<_Tp>(__a) { } - template<typename _Tp1> - allocator(const allocator<_Tp1>&) throw() { } - ~allocator() throw() { } - }; - template<typename _T1, typename _T2> - inline bool - operator==(const allocator<_T1>&, const allocator<_T2>&) - { return true; } - template<typename _Tp> - inline bool - operator==(const allocator<_Tp>&, const allocator<_Tp>&) - { return true; } - template<typename _T1, typename _T2> - inline bool - operator!=(const allocator<_T1>&, const allocator<_T2>&) - { return false; } - template<typename _Tp> - inline bool - operator!=(const allocator<_Tp>&, const allocator<_Tp>&) - { return false; } - //extern template class allocator<char>; - // extern template class allocator<wchar_t>; - template<typename _Alloc, bool = __is_empty(_Alloc)> - struct __alloc_swap - { static void _S_do_it(_Alloc&, _Alloc&) { } }; - template<typename _Alloc> - struct __alloc_swap<_Alloc, false> - { - static void - _S_do_it(_Alloc& __one, _Alloc& __two) - { - if (__one != __two) - swap(__one, __two); - } - }; - template<typename _Alloc, bool = __is_empty(_Alloc)> - struct __alloc_neq - { - static bool - _S_do_it(const _Alloc&, const _Alloc&) - { return false; } - }; - template<typename _Alloc> - struct __alloc_neq<_Alloc, false> - { - static bool - _S_do_it(const _Alloc& __one, const _Alloc& __two) - { return __one != __two; } - }; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Arg, typename _Result> - struct unary_function - { - typedef _Arg argument_type; - typedef _Result result_type; - }; - template<typename _Arg1, typename _Arg2, typename _Result> - struct binary_function - { - typedef _Arg1 first_argument_type; - typedef _Arg2 second_argument_type; - typedef _Result result_type; - }; - template<typename _Tp> - struct equal_to : public binary_function<_Tp, _Tp, bool> - { - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x == __y; } - }; - template<typename _Tp> - struct not_equal_to : public binary_function<_Tp, _Tp, bool> - { - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x != __y; } - }; - template<typename _Tp> - struct greater : public binary_function<_Tp, _Tp, bool> - { - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x > __y; } - }; - template<typename _Tp> - struct less : public binary_function<_Tp, _Tp, bool> - { - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x < __y; } - }; - template<typename _Tp> - struct _Identity : public unary_function<_Tp,_Tp> - { - _Tp& - operator()(_Tp& __x) const - { return __x; } - const _Tp& - operator()(const _Tp& __x) const - { return __x; } - }; -} -namespace std __attribute__ ((__visibility__ ("default"))) { - enum _Rb_tree_color { _S_red = false, _S_black = true }; - struct _Rb_tree_node_base - { - typedef _Rb_tree_node_base* _Base_ptr; - typedef const _Rb_tree_node_base* _Const_Base_ptr; - _Rb_tree_color _M_color; - _Base_ptr _M_parent; - _Base_ptr _M_left; - _Base_ptr _M_right; - static _Base_ptr - _S_minimum(_Base_ptr __x) - { - while (__x->_M_left != 0) __x = __x->_M_left; - return __x; - } - static _Const_Base_ptr - _S_minimum(_Const_Base_ptr __x) - { - while (__x->_M_left != 0) __x = __x->_M_left; - return __x; - } - static _Base_ptr - _S_maximum(_Base_ptr __x) - { - while (__x->_M_right != 0) __x = __x->_M_right; - return __x; - } - static _Const_Base_ptr - _S_maximum(_Const_Base_ptr __x) - { - while (__x->_M_right != 0) __x = __x->_M_right; - return __x; - } - }; - template<typename _Val> - struct _Rb_tree_node : public _Rb_tree_node_base - { - typedef _Rb_tree_node<_Val>* _Link_type; - _Val _M_value_field; - }; - __attribute__ ((__pure__)) _Rb_tree_node_base* - _Rb_tree_increment(_Rb_tree_node_base* __x) throw (); - __attribute__ ((__pure__)) const _Rb_tree_node_base* - _Rb_tree_increment(const _Rb_tree_node_base* __x) throw (); - __attribute__ ((__pure__)) _Rb_tree_node_base* - _Rb_tree_decrement(_Rb_tree_node_base* __x) throw (); - __attribute__ ((__pure__)) const _Rb_tree_node_base* - _Rb_tree_decrement(const _Rb_tree_node_base* __x) throw (); - template<typename _Tp> - struct _Rb_tree_iterator - { - typedef _Tp value_type; - typedef _Tp& reference; - typedef _Tp* pointer; - typedef bidirectional_iterator_tag iterator_category; - typedef ptrdiff_t difference_type; - typedef _Rb_tree_iterator<_Tp> _Self; - typedef _Rb_tree_node_base::_Base_ptr _Base_ptr; - typedef _Rb_tree_node<_Tp>* _Link_type; - _Rb_tree_iterator() - : _M_node() { } - explicit - _Rb_tree_iterator(_Link_type __x) - : _M_node(__x) { } - reference - operator*() const - { return static_cast<_Link_type>(_M_node)->_M_value_field; } - pointer - operator->() const - { return &static_cast<_Link_type>(_M_node)->_M_value_field; } - _Self& - operator++() - { - _M_node = _Rb_tree_increment(_M_node); - return *this; - } - _Self - operator++(int) - { - _Self __tmp = *this; - _M_node = _Rb_tree_increment(_M_node); - return __tmp; - } - _Self& - operator--() - { - _M_node = _Rb_tree_decrement(_M_node); - return *this; - } - _Self - operator--(int) - { - _Self __tmp = *this; - _M_node = _Rb_tree_decrement(_M_node); - return __tmp; - } - bool - operator==(const _Self& __x) const - { return _M_node == __x._M_node; } - bool - operator!=(const _Self& __x) const - { return _M_node != __x._M_node; } - _Base_ptr _M_node; - }; - template<typename _Tp> - struct _Rb_tree_const_iterator - { - typedef _Tp value_type; - typedef const _Tp& reference; - typedef const _Tp* pointer; - typedef _Rb_tree_iterator<_Tp> iterator; - typedef bidirectional_iterator_tag iterator_category; - typedef ptrdiff_t difference_type; - typedef _Rb_tree_const_iterator<_Tp> _Self; - typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr; - typedef const _Rb_tree_node<_Tp>* _Link_type; - _Rb_tree_const_iterator() - : _M_node() { } - explicit - _Rb_tree_const_iterator(_Link_type __x) - : _M_node(__x) { } - _Rb_tree_const_iterator(const iterator& __it) - : _M_node(__it._M_node) { } - reference - operator*() const - { return static_cast<_Link_type>(_M_node)->_M_value_field; } - pointer - operator->() const - { return &static_cast<_Link_type>(_M_node)->_M_value_field; } - _Self& - operator++() - { - _M_node = _Rb_tree_increment(_M_node); - return *this; - } - _Self - operator++(int) - { - _Self __tmp = *this; - _M_node = _Rb_tree_increment(_M_node); - return __tmp; - } - _Self& - operator--() - { - _M_node = _Rb_tree_decrement(_M_node); - return *this; - } - _Self - operator--(int) - { - _Self __tmp = *this; - _M_node = _Rb_tree_decrement(_M_node); - return __tmp; - } - bool - operator==(const _Self& __x) const - { return _M_node == __x._M_node; } - bool - operator!=(const _Self& __x) const - { return _M_node != __x._M_node; } - _Base_ptr _M_node; - }; - void - _Rb_tree_insert_and_rebalance(const bool __insert_left, - _Rb_tree_node_base* __x, - _Rb_tree_node_base* __p, - _Rb_tree_node_base& __header) throw (); - _Rb_tree_node_base* - _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z, - _Rb_tree_node_base& __header) throw (); - template<typename _Key, typename _Val, typename _KeyOfValue, - typename _Compare, typename _Alloc = allocator<_Val> > - class _Rb_tree - { - typedef typename _Alloc::template rebind<_Rb_tree_node<_Val> >::other - _Node_allocator; - protected: - typedef _Rb_tree_node_base* _Base_ptr; - typedef const _Rb_tree_node_base* _Const_Base_ptr; - public: - typedef _Key key_type; - typedef _Val value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef _Rb_tree_node<_Val>* _Link_type; - typedef const _Rb_tree_node<_Val>* _Const_Link_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Alloc allocator_type; - _Node_allocator& - _M_get_Node_allocator() - { return *static_cast<_Node_allocator*>(&this->_M_impl); } - const _Node_allocator& - _M_get_Node_allocator() const - { return *static_cast<const _Node_allocator*>(&this->_M_impl); } - allocator_type - get_allocator() const - { return allocator_type(_M_get_Node_allocator()); } - protected: - _Link_type - _M_get_node() - { return _M_impl._Node_allocator::allocate(1); } - __attribute__((transaction_safe)) - void - _M_put_node(_Link_type __p) - { _M_impl._Node_allocator::deallocate(__p, 1); } - __attribute__((transaction_safe)) - _Link_type - _M_create_node(const value_type& __x) - { - _Link_type __tmp = _M_get_node(); - try - { get_allocator().construct(&__tmp->_M_value_field, __x); } - catch(...) - { - _M_put_node(__tmp); - throw; - } - return __tmp; - } - void - _M_destroy_node(_Link_type __p) - { - get_allocator().destroy(&__p->_M_value_field); - _M_put_node(__p); - } - protected: - template<typename _Key_compare, - bool _Is_pod_comparator = __is_pod(_Key_compare)> - struct _Rb_tree_impl : public _Node_allocator - { - _Key_compare _M_key_compare; - _Rb_tree_node_base _M_header; - size_type _M_node_count; - _Rb_tree_impl() - : _Node_allocator(), _M_key_compare(), _M_header(), - _M_node_count(0) - { _M_initialize(); } - _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a) - : _Node_allocator(__a), _M_key_compare(__comp), _M_header(), - _M_node_count(0) - { _M_initialize(); } - private: - void - _M_initialize() - { - this->_M_header._M_color = _S_red; - this->_M_header._M_parent = 0; - this->_M_header._M_left = &this->_M_header; - this->_M_header._M_right = &this->_M_header; - } - }; - _Rb_tree_impl<_Compare> _M_impl; - protected: - _Base_ptr& - _M_root() - { return this->_M_impl._M_header._M_parent; } - _Const_Base_ptr - _M_root() const - { return this->_M_impl._M_header._M_parent; } - _Base_ptr& - _M_leftmost() - { return this->_M_impl._M_header._M_left; } - _Const_Base_ptr - _M_leftmost() const - { return this->_M_impl._M_header._M_left; } - _Base_ptr& - _M_rightmost() - { return this->_M_impl._M_header._M_right; } - _Const_Base_ptr - _M_rightmost() const - { return this->_M_impl._M_header._M_right; } - _Link_type - _M_begin() - { return static_cast<_Link_type>(this->_M_impl._M_header._M_parent); } - _Const_Link_type - _M_begin() const - { - return static_cast<_Const_Link_type> - (this->_M_impl._M_header._M_parent); - } - _Link_type - _M_end() - { return static_cast<_Link_type>(&this->_M_impl._M_header); } - _Const_Link_type - _M_end() const - { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); } - static const_reference - _S_value(_Const_Link_type __x) - { return __x->_M_value_field; } - static const _Key& - _S_key(_Const_Link_type __x) - { return _KeyOfValue()(_S_value(__x)); } - static _Link_type - _S_left(_Base_ptr __x) - { return static_cast<_Link_type>(__x->_M_left); } - static _Const_Link_type - _S_left(_Const_Base_ptr __x) - { return static_cast<_Const_Link_type>(__x->_M_left); } - static _Link_type - _S_right(_Base_ptr __x) - { return static_cast<_Link_type>(__x->_M_right); } - static _Const_Link_type - _S_right(_Const_Base_ptr __x) - { return static_cast<_Const_Link_type>(__x->_M_right); } - static const_reference - _S_value(_Const_Base_ptr __x) - { return static_cast<_Const_Link_type>(__x)->_M_value_field; } - static const _Key& - _S_key(_Const_Base_ptr __x) - { return _KeyOfValue()(_S_value(__x)); } - public: - typedef _Rb_tree_iterator<value_type> iterator; - typedef _Rb_tree_const_iterator<value_type> const_iterator; - typedef std::reverse_iterator<iterator> reverse_iterator; - typedef std::reverse_iterator<const_iterator> const_reverse_iterator; - private: - iterator - _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __y, - const value_type& __v); - public: - _Rb_tree() { } - iterator - begin() - { - return iterator(static_cast<_Link_type> - (this->_M_impl._M_header._M_left)); - } - const_iterator - begin() const - { - return const_iterator(static_cast<_Const_Link_type> - (this->_M_impl._M_header._M_left)); - } - iterator - end() - { return iterator(static_cast<_Link_type>(&this->_M_impl._M_header)); } - const_iterator - end() const - { - return const_iterator(static_cast<_Const_Link_type> - (&this->_M_impl._M_header)); - } - pair<iterator, bool> - _M_insert_unique(const value_type& __x); - }; - template<typename _Key, typename _Val, typename _KeyOfValue, - typename _Compare, typename _Alloc> - typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator - _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: - _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __p, const _Val& __v) - { - _Link_type __z = _M_create_node(__v); - return iterator(__z); - } - template<typename _Key, typename _Val, typename _KeyOfValue, - typename _Compare, typename _Alloc> - pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, - _Compare, _Alloc>::iterator, bool> - _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: - _M_insert_unique(const _Val& __v) - { - _Link_type __x = _M_begin(); - _Link_type __y = _M_end(); - iterator __j = iterator(__y); - return pair<iterator, bool>(_M_insert_(__x, __y, __v), true); - } -} -namespace std __attribute__ ((__visibility__ ("default"))) { - template<typename _Key, typename _Compare = std::less<_Key>, - typename _Alloc = std::allocator<_Key> > - class set - { - public: - typedef _Key key_type; - typedef _Key value_type; - typedef _Compare key_compare; - typedef _Compare value_compare; - typedef _Alloc allocator_type; - private: - typedef typename _Alloc::template rebind<_Key>::other _Key_alloc_type; - typedef _Rb_tree<key_type, value_type, _Identity<value_type>, - key_compare, _Key_alloc_type> _Rep_type; - _Rep_type _M_t; - public: - typedef typename _Key_alloc_type::pointer pointer; - typedef typename _Key_alloc_type::const_pointer const_pointer; - typedef typename _Key_alloc_type::reference reference; - typedef typename _Key_alloc_type::const_reference const_reference; - typedef typename _Rep_type::const_iterator iterator; - typedef typename _Rep_type::const_iterator const_iterator; - typedef typename _Rep_type::const_reverse_iterator reverse_iterator; - typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator; - typedef typename _Rep_type::size_type size_type; - typedef typename _Rep_type::difference_type difference_type; - std::pair<iterator, bool> - insert(const value_type& __x) - { - _M_t._M_insert_unique(__x); - } - }; -} -__attribute__((transaction_pure)) -void* operator new(size_t); -__attribute__((transaction_pure)) -void operator delete(void*); -class Widget -{ -private: -}; -class Screen -{ -protected: -std::set<Widget *> widgets; -public: -void addWidget(Widget* widget); -}; -void Screen::addWidget(Widget* widget) -{ -widgets.insert(widget); -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46653.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46653.C deleted file mode 100644 index f8f3a1d31..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46653.C +++ /dev/null @@ -1,18 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O" } - -class shared_count -{ -public: - volatile int j; - shared_count() : j(0) { } -}; - -shared_count * c; -int main() -{ - __transaction_atomic { - shared_count sc; - } - return 0; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46714.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46714.C deleted file mode 100644 index 130b58cdd..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46714.C +++ /dev/null @@ -1,14 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O" } - -static int asdf __attribute__ ((__weakref__("funky"))); - -class Building -{ -public: - __attribute__((transaction_safe)) ~Building(void); -}; - -Building::~Building() -{ -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46941.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46941.C deleted file mode 100644 index eac543831..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr46941.C +++ /dev/null @@ -1,37 +0,0 @@ -// { dg-do "compile" } -// { dg-options "-fgnu-tm" } - -class Obj -{ - int dummy; -}; - -__attribute__((transaction_safe)) -Obj* allocate() -{ - return new Obj; -} - -__attribute__((transaction_safe)) -void deallocate(Obj * o) -{ - delete o; -} - -__attribute__((transaction_safe)) -Obj* allocatearray() -{ - return new Obj[2]; -} - -__attribute__((transaction_safe)) -void deallocatearray(Obj *o[]) -{ - delete [] o; -} - -/* The delete/new operators are handled by the libitm runtime. */ -/* { dg-final { scan-assembler "_ZGTtnw\[mj\]" } } */ -/* { dg-final { scan-assembler "_ZGTtna\[mj\]" } } */ -/* { dg-final { scan-assembler "_ZGTtdlPv" } } */ -/* { dg-final { scan-assembler "_ZGTtdaPv" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47340.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47340.C deleted file mode 100644 index ead3361fa..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47340.C +++ /dev/null @@ -1,11 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -void* operator new(__SIZE_TYPE__) throw (int); - -void *point; - -void funky() -{ - point = new (int); -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47530-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47530-2.C deleted file mode 100644 index bcfdbe948..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47530-2.C +++ /dev/null @@ -1,39 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O2 -fno-inline -fdump-tree-tmedge" } - -class RBTree -{ - struct RBNode - { - RBNode* next; - }; - - public: - RBNode* sentinel; - __attribute__((transaction_safe)) bool lookup(); -}; - -bool RBTree::lookup() -{ - RBNode* x = sentinel; - while (x) - x = x->next; - return false; -} - - -RBTree* SET; - -void bench_test() -{ - __transaction_atomic { - SET->lookup(); - } -} - -// There should be two calls to commitTransaction. -// The one in the uninstrumented code path is a tail call. -// The one in the instrumented code path is not. -// { dg-final { scan-tree-dump-times "ITM_commitTransaction.*tail call" 1 "tmedge" } } - -// { dg-final { cleanup-tree-dump "tmedge" } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47530.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47530.C deleted file mode 100644 index 6a9fb1b00..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47530.C +++ /dev/null @@ -1,80 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O2 -fdump-tree-optimized" } - -typedef __SIZE_TYPE__ size_t; -extern void *malloc(size_t); - -namespace bench -{ - class LLNode - { - LLNode* next; - int data; - - public: - __attribute__((transaction_safe)) - LLNode(int val, LLNode* m_next) - { - data = val; - next = m_next; - } - __attribute__((transaction_safe)) - ~LLNode(){} - __attribute__((transaction_safe)) - int get_val() {return data;} - __attribute__((transaction_safe)) - LLNode* get_next() {return next;} - __attribute__((transaction_safe)) - void set_val(int val) {data = val;} - __attribute__((transaction_safe)) - void set_next(LLNode* n) {next = n;} - __attribute__((transaction_safe)) - void *operator new(size_t size); - }; - - class LinkedList - { - LLNode* head; - public: - LinkedList(); - void insert(int val); - }; -} - -using bench::LinkedList; -using bench::LLNode; - - -__attribute__((transaction_safe)) -void* LLNode::operator new(size_t size) -{ - return malloc(size); -} - -LinkedList::LinkedList() : head(new LLNode(-1, 0)) { } - -void LinkedList::insert(int val) -{ - __transaction_atomic { - LLNode* prev = head; - LLNode* curr = head->get_next(); - - while (curr != 0) { - if (curr->get_val() >= val) - break; - prev = curr; - curr = prev->get_next(); - } - - if (!curr || (curr->get_val() > val)){ - LLNode* tmp = new LLNode(val,curr); - prev->set_next(tmp); - } - } -} - -// Make sure we don't do tail optimization on the commit, except on -// the uninstrumented code path. -// { dg-final { scan-tree-dump-times "commitTransaction...; .tail call" 1 "optimized" } } -// { dg-final { cleanup-tree-dump "optimized" } } - diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47554.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47554.C deleted file mode 100644 index 28841bb15..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47554.C +++ /dev/null @@ -1,27 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -class list -{ - public: list() - { - } - list(const list&) - { - } - const list& _M_get_Node_allocator() const - { - } - list _M_get_Tp_allocator() const - { - return list(_M_get_Node_allocator()); - } -}; -static list buildProjects; -static void build() -{ - __transaction_relaxed - { - buildProjects._M_get_Tp_allocator(); - } -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47573.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47573.C deleted file mode 100644 index 239d9222e..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47573.C +++ /dev/null @@ -1,25 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -template<typename _Tp> class allocator -{ - public: - allocator() { } -}; -extern template class allocator<char>; - -template<typename _Alloc = allocator<char> > class basic_string -{ - public: - _Alloc _M_dataplus; - - __attribute__((transaction_safe)) - basic_string() : _M_dataplus(_Alloc()) - { - } -}; - -int getStringHeight() -{ - basic_string<> tmp; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47746.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47746.C deleted file mode 100644 index 7cd9e1006..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47746.C +++ /dev/null @@ -1,27 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -class InputStream -{ - public: - virtual unsigned int readUint32 () = 0; -}; - -class Building -{ - public: - __attribute__((transaction_safe)) Building (InputStream *stream); - __attribute__((transaction_safe)) void freeGradients (); - void load (InputStream *stream); -}; - -Building::Building (InputStream *stream) -{ - load(stream); -} - -void Building::load (InputStream *stream) -{ - int j = (int)stream->readUint32 (); - freeGradients (); -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47747.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47747.C deleted file mode 100644 index 3b50904b5..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr47747.C +++ /dev/null @@ -1,21 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O" } - -class InputStream -{ - public: -// __attribute__((transaction_safe)) - virtual unsigned int readUint32 () = 0; -}; - -class Building -{ - public: - __attribute__((transaction_safe)) - Building (InputStream *stream); -}; - -Building::Building (InputStream *stream) -{ - stream->readUint32 (); /* { dg-error "InputStream::readUint32" } */ -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51212.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51212.C deleted file mode 100644 index 9d2971bbb..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51212.C +++ /dev/null @@ -1,19 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -fnon-call-exceptions" } - -struct S -{ - S () - { - } -}; - -__attribute__ ((transaction_callable)) -void foo (int *p) -{ - S s; - if (*p) - ; -} - -// { dg-message "sorry, unimplemented: transactional memory is not supported with non-call exceptions" "-fnon-call-exceptions and -fgnu-tm together" { target *-*-* } 0 } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51411-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51411-2.C deleted file mode 100644 index 4105d66ec..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51411-2.C +++ /dev/null @@ -1,49 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O0" } - -namespace std { -template<typename _CharT> struct char_traits; - -template<typename _Tp> class allocator { -}; - -template<typename _Tp> struct less { - bool operator()(const _Tp& __x, const _Tp& __y) const { - return __x < __y; - } -}; - -template <typename _Key, typename _Compare = std::less<_Key> > class map { -public: - _Compare _M_key_compare; - bool find(const _Key& __x) { - return _M_key_compare(__x, __x); - } -}; - -template<typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > class basic_string { -public: - bool compare(const basic_string& __str) const { - return 0; - } -}; - -typedef basic_string<char> string; - -template<typename _CharT, typename _Traits> -inline bool operator<(const basic_string<_CharT, _Traits>& __lhs, const basic_string<_CharT, _Traits>& __rhs) { - return __lhs.compare(__rhs); -} - -extern template class basic_string<char>; - -} - -std::map<std::string> units; - -__attribute__((transaction_callable)) -void get(const std::string &name) { - units.find(name); -} - -// { dg-final { scan-assembler "_ZGTtNKSs7compareERKSs:" } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51411.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51411.C deleted file mode 100644 index df20b87c8..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51411.C +++ /dev/null @@ -1,7 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O" } - -struct A -{ - __attribute__ ((transaction_safe)) virtual void virtfoo () { } -}; diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51516.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51516.C deleted file mode 100644 index 4e9100651..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51516.C +++ /dev/null @@ -1,21 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-fgnu-tm -fdump-tree-optimized" } */ - -struct C { - long l; - C():l(0) {} -}; - -int main() -{ - C* alloc; - __transaction_atomic { - alloc = new C; - } - alloc->l = 2; - - return 0; -} - -/* { dg-final { scan-assembler-not "_ITM_getTMCloneOrIrrevocable" } } */ -/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51928.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51928.C deleted file mode 100644 index 22dbadd4b..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr51928.C +++ /dev/null @@ -1,16 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-fgnu-tm" } */ - -struct A; // { dg-error "forward declaration of 'struct A'" } - -struct B -{ - virtual B* foo(A); -}; - -struct C : virtual B -{ - virtual C* foo(A) { return 0; } // { dg-error "'<anonymous>' has incomplete type" } -}; - -C c; diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr56419.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr56419.C deleted file mode 100644 index c9a33a813..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/pr56419.C +++ /dev/null @@ -1,13 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm" } - -int x = 0; -int inc_func(int i) { - for (int j = 0; j < i; ++j) - { - __transaction_atomic { x+=1; } - } - return 0; -} - -// { dg-final { scan-assembler "ITM_commitTransaction" } } diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/template-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/template-1.C deleted file mode 100644 index cb6bb382f..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/template-1.C +++ /dev/null @@ -1,36 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O -fdump-tree-tmmark" } - -struct TrueFalse -{ - static bool v() { return true; } -}; - -int global; - -template<typename T> int foo() -{ - __transaction_atomic { global += 2; } - return __transaction_atomic (global + 1); -} - -template<typename T> int bar() __transaction_atomic -{ - return global + 3; -} - -template<typename T> void bar2() __transaction_atomic -{ - global += 4; -} - -int f1() -{ - bar2<TrueFalse>(); - return foo<TrueFalse>() + bar<TrueFalse>(); -} - -/* 4 transactions overall, two of them write to global: */ -/* { dg-final { scan-tree-dump-times "ITM_RU4\\s*\\(&global" 4 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times "ITM_WU4\\s*\\(&global" 2 "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/template-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/template-2.C deleted file mode 100644 index 53870246a..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/template-2.C +++ /dev/null @@ -1,22 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O -std=c++0x -fdump-tree-tmmark" } - -struct TrueFalse -{ -}; - -int global; - -template<typename T> int foo() -{ - return __transaction_atomic (global + 2) - + __transaction_atomic (global + 3); -} - -int f1() -{ - return foo<TrueFalse>(); -} - -/* { dg-final { scan-tree-dump-times "ITM_RU" 2 "tmmark" } } */ -/* { dg-final { cleanup-tree-dump "tmmark" } } */ diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/tm.exp b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/tm.exp deleted file mode 100644 index 42ecf545a..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/tm.exp +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2009-2013 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING3. If not see -# <http://www.gnu.org/licenses/>. - -# GCC testsuite that uses the `dg.exp' driver. - -# Load support procs. -load_lib g++-dg.exp - -if ![check_effective_target_fgnu_tm] { - return -} - -# If a testcase doesn't have special options, use these. -global DEFAULT_CXXFLAGS -if ![info exists DEFAULT_CXXFLAGS] then { - set DEFAULT_CXXFLAGS " -pedantic-errors -Wno-long-long" -} - -# Initialize `dg'. -dg-init - -# Run the tests that are shared with C. -g++-dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/tm/*.c]] \ - $DEFAULT_CXXFLAGS -# Run the C++ only tests. -g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] \ - $DEFAULT_CXXFLAGS - -# All done. -dg-finish diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/vector-1.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/vector-1.C deleted file mode 100644 index 2c5bb39f7..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/vector-1.C +++ /dev/null @@ -1,15 +0,0 @@ -// { dg-do compile } -// { dg-options "-fgnu-tm -O3" } - -class HashTree -{ - __attribute__((transaction_safe)) void rehash(); - HashTree **Hash_table; - int Hash_function; -}; - -__attribute__((transaction_safe)) void HashTree::rehash() -{ - for (int i=0; i < Hash_function; i++) - Hash_table[i] = 0; -} diff --git a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/wrap-2.C b/gcc-4.8.1/gcc/testsuite/g++.dg/tm/wrap-2.C deleted file mode 100644 index e2948c8c5..000000000 --- a/gcc-4.8.1/gcc/testsuite/g++.dg/tm/wrap-2.C +++ /dev/null @@ -1,16 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-fgnu-tm -ftrack-macro-expansion=0" } */ - -#define W(X) __attribute__((transaction_wrap(X))) -void f1(void); -void f2(int); -int i3; -int f7(void); - -void g1(void) W(f1); -void g2(void) W(f2); /* { dg-error "is not compatible" } */ -void g3(void) W(i3); /* { dg-error "is not a function" } */ -void g4(void) W(f4); /* { dg-error "not declared in this scope\|not an identifier" } */ -void g5(void) W(1); /* { dg-error "not an identifier" } */ -void g6(void) W("f1"); /* { dg-error "not an identifier" } */ -void g7(void) W(f7); /* { dg-error "is not compatible" } */ |