// { dg-do compile } // { dg-require-effective-target fpic } // { dg-require-visibility "" } // { dg-options "-fPIC" } typedef __SIZE_TYPE__ size_t; extern "C" void * malloc (size_t __size) throw () __attribute__ ((__malloc__)); namespace std __attribute__ ((__visibility__ ("default"))) { using::size_t; } inline void *operator new (std::size_t, void *__p) throw () { return __p; } template < class _T1, class _T2 > struct pair { _T1 first; _T2 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 pair < _T1, _T2 > make_pair (_T1 __x, _T2 __y) { return pair < _T1, _T2 > (__x, __y); } template < typename _Tp > inline const _Tp & max (const _Tp & __a, const _Tp & __b) { } typedef unsigned short int uint16_t; typedef unsigned long int uintptr_t; typedef uint16_t UChar; namespace std __attribute__ ((__visibility__ ("default"))) { struct __numeric_limits_base { }; template < typename _Tp > struct numeric_limits:public __numeric_limits_base { static _Tp max () throw () { } }; } template < typename T > class VectorBufferBase { public: void allocateBuffer (size_t newCapacity) { if (newCapacity > std::numeric_limits < size_t >::max () / sizeof (T)) *(int *) (uintptr_t) 0xbbadbeef = 0; } }; template < typename T, size_t inlineCapacity > class VectorBuffer; template < typename T > class VectorBuffer < T, 0 >:private VectorBufferBase < T > { public: typedef VectorBufferBase < T > Base; using Base::allocateBuffer; }; template < typename T, size_t inlineCapacity = 0 > class Vector { typedef VectorBuffer < T, inlineCapacity > Impl; public: typedef T *iterator; size_t size () const { return m_size; } size_t capacity () const { } iterator begin () { } iterator end () { return begin () + m_size; } void shrink (size_t size); void reserveCapacity (size_t newCapacity); void clear () { shrink (0); } template < typename U > void append (const U &); void expandCapacity (size_t newMinCapacity); template < typename U > U * expandCapacity (size_t newMinCapacity, U *); size_t m_size; Impl m_impl; }; template < typename T, size_t inlineCapacity > void Vector < T, inlineCapacity >::expandCapacity (size_t newMinCapacity) { reserveCapacity (max (newMinCapacity, max (static_cast < size_t > (16), capacity () + capacity () / 4 + 1))); } template < typename T, size_t inlineCapacity > template < typename U > inline U * Vector < T, inlineCapacity >::expandCapacity (size_t newMinCapacity, U * ptr) { expandCapacity (newMinCapacity); } template < typename T, size_t inlineCapacity > void Vector < T, inlineCapacity >::reserveCapacity (size_t newCapacity) { m_impl.allocateBuffer (newCapacity); } template < typename T, size_t inlineCapacity > template < typename U > inline void Vector < T, inlineCapacity >::append (const U & val) { const U *ptr = &val; if (size () == capacity ()) ptr = expandCapacity (size () + 1, ptr); new (end ())T (*ptr); } class Range; class TextIterator { public: explicit TextIterator (const Range *, bool emitCharactersBetweenAllVisiblePositions = false); bool atEnd () const { } void advance (); int length () const { } }; UChar * plainTextToMallocAllocatedBuffer (const Range * r, unsigned &bufferLength) { static const unsigned cMaxSegmentSize = 1 << 16; typedef pair < UChar *, unsigned >TextSegment; Vector < TextSegment > *textSegments = 0; Vector < UChar > textBuffer; for (TextIterator it (r); !it.atEnd (); it.advance ()) { if (textBuffer.size () && textBuffer.size () + it.length () > cMaxSegmentSize) { UChar *newSegmentBuffer = static_cast < UChar * >(malloc (textBuffer.size () * sizeof (UChar))); if (!textSegments) textSegments = new Vector < TextSegment >; textSegments-> append (make_pair (newSegmentBuffer, textBuffer.size ())); textBuffer.clear (); } } }