annotate gcc/testsuite/g++.dg/opt/pr65554.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 // PR middle-end/65554
kono
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
kono
parents:
diff changeset
3 // { dg-options "-O" }
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 namespace std
kono
parents:
diff changeset
6 {
kono
parents:
diff changeset
7 struct B { enum { __value }; };
kono
parents:
diff changeset
8 template <typename _Iterator> struct C
kono
parents:
diff changeset
9 {
kono
parents:
diff changeset
10 static _Iterator _S_base (_Iterator p1) { return p1; }
kono
parents:
diff changeset
11 };
kono
parents:
diff changeset
12 template <typename> using _RequireInputIter = int;
kono
parents:
diff changeset
13 template <typename _Iterator> _Iterator __niter_base (_Iterator p1)
kono
parents:
diff changeset
14 {
kono
parents:
diff changeset
15 return std::C <_Iterator>::_S_base (p1);
kono
parents:
diff changeset
16 }
kono
parents:
diff changeset
17 template <typename _Iterator> _Iterator __miter_base (_Iterator p1)
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 return std::C <_Iterator>::_S_base (p1);
kono
parents:
diff changeset
20 }
kono
parents:
diff changeset
21 struct D
kono
parents:
diff changeset
22 {
kono
parents:
diff changeset
23 template <typename _Tp> static _Tp *__copy_m (_Tp * p1, _Tp * p2, _Tp *)
kono
parents:
diff changeset
24 {
kono
parents:
diff changeset
25 int _Num = p2 - p1;
kono
parents:
diff changeset
26 __builtin_memmove (0, p1, sizeof (_Tp) * _Num);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
27 return 0;
111
kono
parents:
diff changeset
28 }
kono
parents:
diff changeset
29 };
kono
parents:
diff changeset
30 template <int, typename _II, typename _OI> void __copy_move_a (_II p1, _II p2, _OI p3)
kono
parents:
diff changeset
31 {
kono
parents:
diff changeset
32 D::__copy_m (p1, p2, p3);
kono
parents:
diff changeset
33 }
kono
parents:
diff changeset
34 template <int, typename _II, typename _OI> void __copy_move_a2 (_II p1, _II p2, _OI p3)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 __copy_move_a <0> (std::__niter_base (p1), std::__niter_base (p2), std::__niter_base (p3));
kono
parents:
diff changeset
37 }
kono
parents:
diff changeset
38 template <typename _II, typename _OI> void copy (_II p1, _II p2, _OI p3)
kono
parents:
diff changeset
39 {
kono
parents:
diff changeset
40 __copy_move_a2 <B::__value> (std::__miter_base (p1), std::__miter_base (p2), p3);
kono
parents:
diff changeset
41 }
kono
parents:
diff changeset
42 }
kono
parents:
diff changeset
43 template <typename _Tp> struct F { typedef _Tp *pointer; };
kono
parents:
diff changeset
44 namespace std
kono
parents:
diff changeset
45 {
kono
parents:
diff changeset
46 template <typename _Tp> using __allocator_base = F <_Tp>;
kono
parents:
diff changeset
47 template <typename _Tp> struct allocator:__allocator_base <_Tp> {};
kono
parents:
diff changeset
48 template <class _E> struct initializer_list
kono
parents:
diff changeset
49 {
kono
parents:
diff changeset
50 typedef _E *const_iterator;
kono
parents:
diff changeset
51 _E *_M_array;
kono
parents:
diff changeset
52 __SIZE_TYPE__ _M_len;
kono
parents:
diff changeset
53 const_iterator begin () { return _M_array; }
kono
parents:
diff changeset
54 const_iterator end () { return begin () + 1; }
kono
parents:
diff changeset
55 };
kono
parents:
diff changeset
56 template <typename _Alloc> struct allocator_traits
kono
parents:
diff changeset
57 {
kono
parents:
diff changeset
58 template <typename _Tp> static typename _Tp::pointer _S_pointer_helper (_Tp *);
kono
parents:
diff changeset
59 typedef decltype (_S_pointer_helper ((_Alloc *) 0)) __pointer;
kono
parents:
diff changeset
60 typedef __pointer pointer;
kono
parents:
diff changeset
61 };
kono
parents:
diff changeset
62 }
kono
parents:
diff changeset
63 template <typename> struct __alloc_traits:
kono
parents:
diff changeset
64 std::allocator_traits <std::allocator <const char *>> {};
kono
parents:
diff changeset
65 namespace std
kono
parents:
diff changeset
66 {
kono
parents:
diff changeset
67 struct G
kono
parents:
diff changeset
68 {
kono
parents:
diff changeset
69 template <typename _InputIterator, typename _ForwardIterator> static _ForwardIterator __uninit_copy (_InputIterator p1, _InputIterator p2, _ForwardIterator p3)
kono
parents:
diff changeset
70 {
kono
parents:
diff changeset
71 copy (p1, p2, p3);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
72 return _ForwardIterator();
111
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74 };
kono
parents:
diff changeset
75 template <typename _InputIterator, typename _ForwardIterator> void
kono
parents:
diff changeset
76 uninitialized_copy (_InputIterator p1, _InputIterator p2, _ForwardIterator p3)
kono
parents:
diff changeset
77 {
kono
parents:
diff changeset
78 G::__uninit_copy (p1, p2, p3);
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80 template <typename _InputIterator, typename _ForwardIterator, typename _Tp> void __uninitialized_copy_a (_InputIterator p1, _InputIterator p2, _ForwardIterator p3, allocator <_Tp> &)
kono
parents:
diff changeset
81 {
kono
parents:
diff changeset
82 uninitialized_copy (p1, p2, p3);
kono
parents:
diff changeset
83 }
kono
parents:
diff changeset
84 struct H
kono
parents:
diff changeset
85 {
kono
parents:
diff changeset
86 typedef std::allocator <int *> _Tp_alloc_type;
kono
parents:
diff changeset
87 typedef __alloc_traits <_Tp_alloc_type>::pointer pointer;
kono
parents:
diff changeset
88 _Tp_alloc_type & _M_get_Tp_allocator ();
kono
parents:
diff changeset
89 };
kono
parents:
diff changeset
90 template <typename _Tp, typename = std::allocator <_Tp>> struct J: H
kono
parents:
diff changeset
91 {
kono
parents:
diff changeset
92 void operator= (initializer_list <_Tp> p1)
kono
parents:
diff changeset
93 {
kono
parents:
diff changeset
94 this->assign (p1.begin (), p1.end ());
kono
parents:
diff changeset
95 }
kono
parents:
diff changeset
96 template <typename _InputIterator, typename = std::_RequireInputIter <_InputIterator>> void assign (_InputIterator p1, _InputIterator p2)
kono
parents:
diff changeset
97 {
kono
parents:
diff changeset
98 _M_assign_dispatch (p1, p2, 0);
kono
parents:
diff changeset
99 }
kono
parents:
diff changeset
100 pointer _M_allocate_and_copy___result;
kono
parents:
diff changeset
101 template <typename _ForwardIterator> void _M_allocate_and_copy (int, _ForwardIterator p2, _ForwardIterator p3)
kono
parents:
diff changeset
102 {
kono
parents:
diff changeset
103 __uninitialized_copy_a (p2, p3, _M_allocate_and_copy___result, _M_get_Tp_allocator ());
kono
parents:
diff changeset
104 }
kono
parents:
diff changeset
105 template <typename _InputIterator> void _M_assign_dispatch (_InputIterator p1, _InputIterator p2, int)
kono
parents:
diff changeset
106 {
kono
parents:
diff changeset
107 _M_assign_aux (p1, p2, 0);
kono
parents:
diff changeset
108 }
kono
parents:
diff changeset
109 template <typename _ForwardIterator> void _M_assign_aux (_ForwardIterator, _ForwardIterator, int);
kono
parents:
diff changeset
110 };
kono
parents:
diff changeset
111 template <typename _Tp, typename _Alloc>
kono
parents:
diff changeset
112 template <typename _ForwardIterator> void J <_Tp, _Alloc>::_M_assign_aux (_ForwardIterator p1, _ForwardIterator p2, int)
kono
parents:
diff changeset
113 {
kono
parents:
diff changeset
114 _M_allocate_and_copy (0, p1, p2);
kono
parents:
diff changeset
115 }
kono
parents:
diff changeset
116 class I
kono
parents:
diff changeset
117 {
kono
parents:
diff changeset
118 void tabCompletion (std::J <int>&) const;
kono
parents:
diff changeset
119 };
kono
parents:
diff changeset
120 void
kono
parents:
diff changeset
121 I::tabCompletion (J <int>&) const
kono
parents:
diff changeset
122 {
kono
parents:
diff changeset
123 J <const char *> extra;
kono
parents:
diff changeset
124 extra = { "foo" };
kono
parents:
diff changeset
125 }
kono
parents:
diff changeset
126 }