| /* { dg-do compile } */ |
| /* { dg-additional-options "-Wno-return-type" } */ |
| |
| extern "C" |
| { |
| typedef long unsigned int size_t; |
| } |
| namespace llvm |
| { |
| namespace dont_use |
| { |
| template < typename T > double is_class_helper (...); |
| } |
| template < typename T > struct is_class |
| { |
| public:enum |
| { value = sizeof (char) == sizeof (dont_use::is_class_helper < T > (0)) }; |
| }; |
| template < typename T > struct isPodLike |
| { |
| static const bool value = !is_class < T >::value; |
| }; |
| } |
| namespace std __attribute__ ((__visibility__ ("default"))) |
| { |
| template < typename _Iterator > struct iterator_traits |
| { |
| }; |
| template < typename _Tp > struct iterator_traits <_Tp * > |
| { |
| typedef _Tp value_type; |
| }; |
| } |
| |
| namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) |
| { |
| template < typename _Tp > class new_allocator |
| { |
| public:typedef size_t size_type; |
| typedef const _Tp & const_reference; |
| }; |
| } |
| |
| namespace std __attribute__ ((__visibility__ ("default"))) |
| { |
| template < typename _Tp > class allocator:public __gnu_cxx::new_allocator < |
| _Tp > |
| { |
| public:typedef size_t size_type; |
| template < typename _Tp1 > struct rebind |
| { |
| typedef allocator < _Tp1 > other; |
| }; |
| }; |
| template < typename _Tp, typename _Alloc > struct _Vector_base |
| { |
| typedef typename _Alloc::template rebind < _Tp >::other _Tp_alloc_type; |
| }; |
| template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector:protected _Vector_base < _Tp, |
| _Alloc |
| > |
| { |
| typedef _Vector_base < _Tp, _Alloc > _Base; |
| typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; |
| public:typedef _Tp value_type; |
| typedef typename _Tp_alloc_type::const_reference const_reference; |
| typedef size_t size_type; |
| size_type size () const |
| { |
| } const_reference operator[] (size_type __n) const |
| { |
| }}; |
| } |
| |
| namespace llvm |
| { |
| struct LandingPadInfo; |
| class DwarfException |
| { |
| static bool PadLT (const LandingPadInfo * L, const LandingPadInfo * R); |
| struct CallSiteEntry |
| { |
| }; |
| void EmitExceptionTable (); |
| }; |
| } |
| namespace std __attribute__ ((__visibility__ ("default"))) |
| { |
| template < typename _RandomAccessIterator, |
| typename _Compare > |
| void __unguarded_linear_insert (_RandomAccessIterator __last, |
| _Compare __comp) |
| { |
| typename iterator_traits < _RandomAccessIterator >::value_type __val = |
| (*__last); |
| _RandomAccessIterator __next = __last; |
| while (__comp (__val, *__next)) |
| { |
| } |
| } |
| template < typename _RandomAccessIterator, |
| typename _Compare > void __insertion_sort (_RandomAccessIterator __first, |
| _RandomAccessIterator __last, |
| _Compare __comp) |
| { |
| for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i) |
| { |
| if (__comp (*__i, *__first)) |
| { |
| } |
| else |
| std::__unguarded_linear_insert (__i, __comp); |
| } |
| } |
| enum |
| { _S_threshold = 16 }; |
| template < typename _RandomAccessIterator, |
| typename _Compare > |
| void __final_insertion_sort (_RandomAccessIterator __first, |
| _RandomAccessIterator __last, |
| _Compare __comp) |
| { |
| if (__last - __first > int (_S_threshold)) |
| { |
| std::__insertion_sort (__first, __first + int (_S_threshold), __comp); |
| } |
| } |
| template < typename _RandomAccessIterator, |
| typename _Compare > inline void sort (_RandomAccessIterator __first, |
| _RandomAccessIterator __last, |
| _Compare __comp) |
| { |
| if (__first != __last) |
| { |
| std::__final_insertion_sort (__first, __last, __comp); |
| } |
| } |
| } |
| |
| namespace llvm |
| { |
| class SmallVectorBase |
| { |
| protected:void *BeginX, *EndX, *CapacityX; |
| struct U |
| { |
| } FirstEl; |
| protected: SmallVectorBase (size_t Size):BeginX (&FirstEl), EndX (&FirstEl), |
| CapacityX ((char *) &FirstEl + Size) |
| { |
| }}; |
| template < typename T > class SmallVectorTemplateCommon:public |
| SmallVectorBase |
| { |
| public: SmallVectorTemplateCommon (size_t Size):SmallVectorBase (Size) |
| { |
| } typedef size_t size_type; |
| typedef T *iterator; |
| iterator begin () |
| { |
| } iterator end () |
| { |
| } size_type size () const |
| { |
| }}; |
| template < typename T, bool isPodLike > class SmallVectorTemplateBase:public SmallVectorTemplateCommon < |
| T > |
| { |
| public: SmallVectorTemplateBase (size_t Size):SmallVectorTemplateCommon < T > |
| (Size) |
| { |
| }}; |
| template < typename T > class SmallVectorImpl:public SmallVectorTemplateBase < T, |
| isPodLike < T >::value > |
| { |
| typedef SmallVectorTemplateBase < T, isPodLike < T >::value > SuperClass; |
| public:typedef typename SuperClass::iterator iterator; |
| explicit SmallVectorImpl (unsigned N):SmallVectorTemplateBase < T, |
| isPodLike < T >::value > (N * sizeof (T)) |
| { |
| } |
| }; |
| template < typename T, |
| unsigned N > class SmallVector:public SmallVectorImpl < T > |
| { |
| typedef typename SmallVectorImpl < T >::U U; |
| enum |
| { MinUs = |
| (static_cast < unsigned int >(sizeof (T)) * N + static_cast < |
| unsigned int >(sizeof (U)) - 1) /static_cast < |
| unsigned int >(sizeof (U)), NumInlineEltsElts = |
| MinUs > 1 ? (MinUs - 1) : 1, NumTsAvailable = |
| (NumInlineEltsElts + 1) * static_cast < |
| unsigned int >(sizeof (U)) / static_cast < |
| unsigned int >(sizeof (T)) }; |
| public: SmallVector ():SmallVectorImpl < T > (NumTsAvailable) |
| { |
| } |
| }; |
| struct LandingPadInfo |
| { |
| std::vector < int >TypeIds; |
| union |
| { |
| } Contents; |
| }; |
| } |
| |
| using namespace llvm; |
| bool |
| DwarfException::PadLT (const LandingPadInfo * L, const LandingPadInfo * R) |
| { |
| const std::vector < int >&LIds = L->TypeIds, &RIds = R->TypeIds; |
| unsigned LSize = LIds.size (), RSize = RIds.size (); |
| unsigned MinSize = LSize < RSize ? LSize : RSize; |
| for (unsigned i = 0; i != MinSize; ++i) |
| if (LIds[i] != RIds[i]) |
| return LIds[i] < RIds[i]; |
| } |
| |
| void |
| DwarfException::EmitExceptionTable () |
| { |
| SmallVector < const LandingPadInfo *, 64 > LandingPads; |
| std::sort (LandingPads.begin (), LandingPads.end (), PadLT); |
| SmallVector < CallSiteEntry, 64 > CallSites; |
| for (unsigned i = 0, e = CallSites.size (); i < e; ++i) |
| { |
| } |
| } |