annotate gcc/testsuite/g++.dg/torture/pr44357.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do compile } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 /* { dg-additional-options "-Wno-return-type" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
3
111
kono
parents:
diff changeset
4 extern "C"
kono
parents:
diff changeset
5 {
kono
parents:
diff changeset
6 typedef long unsigned int size_t;
kono
parents:
diff changeset
7 }
kono
parents:
diff changeset
8 namespace llvm
kono
parents:
diff changeset
9 {
kono
parents:
diff changeset
10 namespace dont_use
kono
parents:
diff changeset
11 {
kono
parents:
diff changeset
12 template < typename T > double is_class_helper (...);
kono
parents:
diff changeset
13 }
kono
parents:
diff changeset
14 template < typename T > struct is_class
kono
parents:
diff changeset
15 {
kono
parents:
diff changeset
16 public:enum
kono
parents:
diff changeset
17 { value = sizeof (char) == sizeof (dont_use::is_class_helper < T > (0)) };
kono
parents:
diff changeset
18 };
kono
parents:
diff changeset
19 template < typename T > struct isPodLike
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 static const bool value = !is_class < T >::value;
kono
parents:
diff changeset
22 };
kono
parents:
diff changeset
23 }
kono
parents:
diff changeset
24 namespace std __attribute__ ((__visibility__ ("default")))
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 template < typename _Iterator > struct iterator_traits
kono
parents:
diff changeset
27 {
kono
parents:
diff changeset
28 };
kono
parents:
diff changeset
29 template < typename _Tp > struct iterator_traits <_Tp * >
kono
parents:
diff changeset
30 {
kono
parents:
diff changeset
31 typedef _Tp value_type;
kono
parents:
diff changeset
32 };
kono
parents:
diff changeset
33 }
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
kono
parents:
diff changeset
36 {
kono
parents:
diff changeset
37 template < typename _Tp > class new_allocator
kono
parents:
diff changeset
38 {
kono
parents:
diff changeset
39 public:typedef size_t size_type;
kono
parents:
diff changeset
40 typedef const _Tp & const_reference;
kono
parents:
diff changeset
41 };
kono
parents:
diff changeset
42 }
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 namespace std __attribute__ ((__visibility__ ("default")))
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 template < typename _Tp > class allocator:public __gnu_cxx::new_allocator <
kono
parents:
diff changeset
47 _Tp >
kono
parents:
diff changeset
48 {
kono
parents:
diff changeset
49 public:typedef size_t size_type;
kono
parents:
diff changeset
50 template < typename _Tp1 > struct rebind
kono
parents:
diff changeset
51 {
kono
parents:
diff changeset
52 typedef allocator < _Tp1 > other;
kono
parents:
diff changeset
53 };
kono
parents:
diff changeset
54 };
kono
parents:
diff changeset
55 template < typename _Tp, typename _Alloc > struct _Vector_base
kono
parents:
diff changeset
56 {
kono
parents:
diff changeset
57 typedef typename _Alloc::template rebind < _Tp >::other _Tp_alloc_type;
kono
parents:
diff changeset
58 };
kono
parents:
diff changeset
59 template < typename _Tp, typename _Alloc = std::allocator < _Tp > >class vector:protected _Vector_base < _Tp,
kono
parents:
diff changeset
60 _Alloc
kono
parents:
diff changeset
61 >
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 typedef _Vector_base < _Tp, _Alloc > _Base;
kono
parents:
diff changeset
64 typedef typename _Base::_Tp_alloc_type _Tp_alloc_type;
kono
parents:
diff changeset
65 public:typedef _Tp value_type;
kono
parents:
diff changeset
66 typedef typename _Tp_alloc_type::const_reference const_reference;
kono
parents:
diff changeset
67 typedef size_t size_type;
kono
parents:
diff changeset
68 size_type size () const
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 } const_reference operator[] (size_type __n) const
kono
parents:
diff changeset
71 {
kono
parents:
diff changeset
72 }};
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 namespace llvm
kono
parents:
diff changeset
76 {
kono
parents:
diff changeset
77 struct LandingPadInfo;
kono
parents:
diff changeset
78 class DwarfException
kono
parents:
diff changeset
79 {
kono
parents:
diff changeset
80 static bool PadLT (const LandingPadInfo * L, const LandingPadInfo * R);
kono
parents:
diff changeset
81 struct CallSiteEntry
kono
parents:
diff changeset
82 {
kono
parents:
diff changeset
83 };
kono
parents:
diff changeset
84 void EmitExceptionTable ();
kono
parents:
diff changeset
85 };
kono
parents:
diff changeset
86 }
kono
parents:
diff changeset
87 namespace std __attribute__ ((__visibility__ ("default")))
kono
parents:
diff changeset
88 {
kono
parents:
diff changeset
89 template < typename _RandomAccessIterator,
kono
parents:
diff changeset
90 typename _Compare >
kono
parents:
diff changeset
91 void __unguarded_linear_insert (_RandomAccessIterator __last,
kono
parents:
diff changeset
92 _Compare __comp)
kono
parents:
diff changeset
93 {
kono
parents:
diff changeset
94 typename iterator_traits < _RandomAccessIterator >::value_type __val =
kono
parents:
diff changeset
95 (*__last);
kono
parents:
diff changeset
96 _RandomAccessIterator __next = __last;
kono
parents:
diff changeset
97 while (__comp (__val, *__next))
kono
parents:
diff changeset
98 {
kono
parents:
diff changeset
99 }
kono
parents:
diff changeset
100 }
kono
parents:
diff changeset
101 template < typename _RandomAccessIterator,
kono
parents:
diff changeset
102 typename _Compare > void __insertion_sort (_RandomAccessIterator __first,
kono
parents:
diff changeset
103 _RandomAccessIterator __last,
kono
parents:
diff changeset
104 _Compare __comp)
kono
parents:
diff changeset
105 {
kono
parents:
diff changeset
106 for (_RandomAccessIterator __i = __first + 1; __i != __last; ++__i)
kono
parents:
diff changeset
107 {
kono
parents:
diff changeset
108 if (__comp (*__i, *__first))
kono
parents:
diff changeset
109 {
kono
parents:
diff changeset
110 }
kono
parents:
diff changeset
111 else
kono
parents:
diff changeset
112 std::__unguarded_linear_insert (__i, __comp);
kono
parents:
diff changeset
113 }
kono
parents:
diff changeset
114 }
kono
parents:
diff changeset
115 enum
kono
parents:
diff changeset
116 { _S_threshold = 16 };
kono
parents:
diff changeset
117 template < typename _RandomAccessIterator,
kono
parents:
diff changeset
118 typename _Compare >
kono
parents:
diff changeset
119 void __final_insertion_sort (_RandomAccessIterator __first,
kono
parents:
diff changeset
120 _RandomAccessIterator __last,
kono
parents:
diff changeset
121 _Compare __comp)
kono
parents:
diff changeset
122 {
kono
parents:
diff changeset
123 if (__last - __first > int (_S_threshold))
kono
parents:
diff changeset
124 {
kono
parents:
diff changeset
125 std::__insertion_sort (__first, __first + int (_S_threshold), __comp);
kono
parents:
diff changeset
126 }
kono
parents:
diff changeset
127 }
kono
parents:
diff changeset
128 template < typename _RandomAccessIterator,
kono
parents:
diff changeset
129 typename _Compare > inline void sort (_RandomAccessIterator __first,
kono
parents:
diff changeset
130 _RandomAccessIterator __last,
kono
parents:
diff changeset
131 _Compare __comp)
kono
parents:
diff changeset
132 {
kono
parents:
diff changeset
133 if (__first != __last)
kono
parents:
diff changeset
134 {
kono
parents:
diff changeset
135 std::__final_insertion_sort (__first, __last, __comp);
kono
parents:
diff changeset
136 }
kono
parents:
diff changeset
137 }
kono
parents:
diff changeset
138 }
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 namespace llvm
kono
parents:
diff changeset
141 {
kono
parents:
diff changeset
142 class SmallVectorBase
kono
parents:
diff changeset
143 {
kono
parents:
diff changeset
144 protected:void *BeginX, *EndX, *CapacityX;
kono
parents:
diff changeset
145 struct U
kono
parents:
diff changeset
146 {
kono
parents:
diff changeset
147 } FirstEl;
kono
parents:
diff changeset
148 protected: SmallVectorBase (size_t Size):BeginX (&FirstEl), EndX (&FirstEl),
kono
parents:
diff changeset
149 CapacityX ((char *) &FirstEl + Size)
kono
parents:
diff changeset
150 {
kono
parents:
diff changeset
151 }};
kono
parents:
diff changeset
152 template < typename T > class SmallVectorTemplateCommon:public
kono
parents:
diff changeset
153 SmallVectorBase
kono
parents:
diff changeset
154 {
kono
parents:
diff changeset
155 public: SmallVectorTemplateCommon (size_t Size):SmallVectorBase (Size)
kono
parents:
diff changeset
156 {
kono
parents:
diff changeset
157 } typedef size_t size_type;
kono
parents:
diff changeset
158 typedef T *iterator;
kono
parents:
diff changeset
159 iterator begin ()
kono
parents:
diff changeset
160 {
kono
parents:
diff changeset
161 } iterator end ()
kono
parents:
diff changeset
162 {
kono
parents:
diff changeset
163 } size_type size () const
kono
parents:
diff changeset
164 {
kono
parents:
diff changeset
165 }};
kono
parents:
diff changeset
166 template < typename T, bool isPodLike > class SmallVectorTemplateBase:public SmallVectorTemplateCommon <
kono
parents:
diff changeset
167 T >
kono
parents:
diff changeset
168 {
kono
parents:
diff changeset
169 public: SmallVectorTemplateBase (size_t Size):SmallVectorTemplateCommon < T >
kono
parents:
diff changeset
170 (Size)
kono
parents:
diff changeset
171 {
kono
parents:
diff changeset
172 }};
kono
parents:
diff changeset
173 template < typename T > class SmallVectorImpl:public SmallVectorTemplateBase < T,
kono
parents:
diff changeset
174 isPodLike < T >::value >
kono
parents:
diff changeset
175 {
kono
parents:
diff changeset
176 typedef SmallVectorTemplateBase < T, isPodLike < T >::value > SuperClass;
kono
parents:
diff changeset
177 public:typedef typename SuperClass::iterator iterator;
kono
parents:
diff changeset
178 explicit SmallVectorImpl (unsigned N):SmallVectorTemplateBase < T,
kono
parents:
diff changeset
179 isPodLike < T >::value > (N * sizeof (T))
kono
parents:
diff changeset
180 {
kono
parents:
diff changeset
181 }
kono
parents:
diff changeset
182 };
kono
parents:
diff changeset
183 template < typename T,
kono
parents:
diff changeset
184 unsigned N > class SmallVector:public SmallVectorImpl < T >
kono
parents:
diff changeset
185 {
kono
parents:
diff changeset
186 typedef typename SmallVectorImpl < T >::U U;
kono
parents:
diff changeset
187 enum
kono
parents:
diff changeset
188 { MinUs =
kono
parents:
diff changeset
189 (static_cast < unsigned int >(sizeof (T)) * N + static_cast <
kono
parents:
diff changeset
190 unsigned int >(sizeof (U)) - 1) /static_cast <
kono
parents:
diff changeset
191 unsigned int >(sizeof (U)), NumInlineEltsElts =
kono
parents:
diff changeset
192 MinUs > 1 ? (MinUs - 1) : 1, NumTsAvailable =
kono
parents:
diff changeset
193 (NumInlineEltsElts + 1) * static_cast <
kono
parents:
diff changeset
194 unsigned int >(sizeof (U)) / static_cast <
kono
parents:
diff changeset
195 unsigned int >(sizeof (T)) };
kono
parents:
diff changeset
196 public: SmallVector ():SmallVectorImpl < T > (NumTsAvailable)
kono
parents:
diff changeset
197 {
kono
parents:
diff changeset
198 }
kono
parents:
diff changeset
199 };
kono
parents:
diff changeset
200 struct LandingPadInfo
kono
parents:
diff changeset
201 {
kono
parents:
diff changeset
202 std::vector < int >TypeIds;
kono
parents:
diff changeset
203 union
kono
parents:
diff changeset
204 {
kono
parents:
diff changeset
205 } Contents;
kono
parents:
diff changeset
206 };
kono
parents:
diff changeset
207 }
kono
parents:
diff changeset
208
kono
parents:
diff changeset
209 using namespace llvm;
kono
parents:
diff changeset
210 bool
kono
parents:
diff changeset
211 DwarfException::PadLT (const LandingPadInfo * L, const LandingPadInfo * R)
kono
parents:
diff changeset
212 {
kono
parents:
diff changeset
213 const std::vector < int >&LIds = L->TypeIds, &RIds = R->TypeIds;
kono
parents:
diff changeset
214 unsigned LSize = LIds.size (), RSize = RIds.size ();
kono
parents:
diff changeset
215 unsigned MinSize = LSize < RSize ? LSize : RSize;
kono
parents:
diff changeset
216 for (unsigned i = 0; i != MinSize; ++i)
kono
parents:
diff changeset
217 if (LIds[i] != RIds[i])
kono
parents:
diff changeset
218 return LIds[i] < RIds[i];
kono
parents:
diff changeset
219 }
kono
parents:
diff changeset
220
kono
parents:
diff changeset
221 void
kono
parents:
diff changeset
222 DwarfException::EmitExceptionTable ()
kono
parents:
diff changeset
223 {
kono
parents:
diff changeset
224 SmallVector < const LandingPadInfo *, 64 > LandingPads;
kono
parents:
diff changeset
225 std::sort (LandingPads.begin (), LandingPads.end (), PadLT);
kono
parents:
diff changeset
226 SmallVector < CallSiteEntry, 64 > CallSites;
kono
parents:
diff changeset
227 for (unsigned i = 0, e = CallSites.size (); i < e; ++i)
kono
parents:
diff changeset
228 {
kono
parents:
diff changeset
229 }
kono
parents:
diff changeset
230 }