annotate gcc/testsuite/g++.dg/torture/pr80171.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" }
111
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 template <typename> struct remove_reference;
kono
parents:
diff changeset
5 template <typename _Tp> struct remove_reference<_Tp &> { typedef _Tp type; };
kono
parents:
diff changeset
6 template <typename _Tp> typename remove_reference<_Tp>::type move(_Tp &&p1) {
kono
parents:
diff changeset
7 return static_cast<typename remove_reference<_Tp>::type &&>(p1);
kono
parents:
diff changeset
8 }
kono
parents:
diff changeset
9 void *operator new(__SIZE_TYPE__, void *p2) { return p2; }
kono
parents:
diff changeset
10 struct Trans_NS__v1_GenericTlv {
kono
parents:
diff changeset
11 virtual int getMinimumValueLength();
kono
parents:
diff changeset
12 virtual unsigned long getValueLength() const;
kono
parents:
diff changeset
13 };
kono
parents:
diff changeset
14 struct IPv4NeighborAddressSubTlv;
kono
parents:
diff changeset
15 struct Trans_NS__v1_GenericTlvBase : Trans_NS__v1_GenericTlv {
kono
parents:
diff changeset
16 virtual bool operator==(const IPv4NeighborAddressSubTlv &) const;
kono
parents:
diff changeset
17 };
kono
parents:
diff changeset
18 struct Trans_NS__v1_GenericUnsupportedTlv;
kono
parents:
diff changeset
19 template <typename> struct backup_holder {
kono
parents:
diff changeset
20 Trans_NS__v1_GenericUnsupportedTlv *backup_;
kono
parents:
diff changeset
21 Trans_NS__v1_GenericUnsupportedTlv &get() { return *backup_; }
kono
parents:
diff changeset
22 };
kono
parents:
diff changeset
23 template <typename> struct make_reference_content {
kono
parents:
diff changeset
24 typedef IPv4NeighborAddressSubTlv type;
kono
parents:
diff changeset
25 };
kono
parents:
diff changeset
26 template <typename> struct unwrap_recursive {
kono
parents:
diff changeset
27 typedef IPv4NeighborAddressSubTlv type;
kono
parents:
diff changeset
28 };
kono
parents:
diff changeset
29 template <typename> struct begin_impl;
kono
parents:
diff changeset
30 template <typename Sequence> struct begin {
kono
parents:
diff changeset
31 typedef typename Sequence::tag tag_;
kono
parents:
diff changeset
32 typedef typename begin_impl<tag_>::template apply<Sequence>::type type;
kono
parents:
diff changeset
33 };
kono
parents:
diff changeset
34 struct long_ {
kono
parents:
diff changeset
35 static const int value = 0;
kono
parents:
diff changeset
36 };
kono
parents:
diff changeset
37 template <typename> struct O1_size_impl;
kono
parents:
diff changeset
38 template <typename Sequence>
kono
parents:
diff changeset
39 struct O1_size
kono
parents:
diff changeset
40 : O1_size_impl<typename Sequence::tag>::template apply<Sequence> {};
kono
parents:
diff changeset
41 template <typename F, typename T2>
kono
parents:
diff changeset
42 struct apply_wrap2 : F::template apply<int, T2> {};
kono
parents:
diff changeset
43 template <int, typename, typename> struct iter_fold_impl;
kono
parents:
diff changeset
44 template <typename First, typename ForwardOp>
kono
parents:
diff changeset
45 struct iter_fold_impl<0, First, ForwardOp> {
kono
parents:
diff changeset
46 typedef typename apply_wrap2<ForwardOp, First>::type state;
kono
parents:
diff changeset
47 };
kono
parents:
diff changeset
48 template <typename Sequence, typename ForwardOp> struct iter_fold {
kono
parents:
diff changeset
49 typedef
kono
parents:
diff changeset
50 typename iter_fold_impl<O1_size<Sequence>::value,
kono
parents:
diff changeset
51 typename begin<Sequence>::type, ForwardOp>::state
kono
parents:
diff changeset
52 type;
kono
parents:
diff changeset
53 };
kono
parents:
diff changeset
54 template <typename> struct deref;
kono
parents:
diff changeset
55 template <typename T1> struct pair { typedef T1 first; };
kono
parents:
diff changeset
56 struct make_initializer_node {
kono
parents:
diff changeset
57 template <typename, typename Iterator> struct apply {
kono
parents:
diff changeset
58 struct initializer_node {
kono
parents:
diff changeset
59 typedef typename deref<Iterator>::type recursive_enabled_T;
kono
parents:
diff changeset
60 static int
kono
parents:
diff changeset
61 initialize(void *p1,
kono
parents:
diff changeset
62 typename unwrap_recursive<recursive_enabled_T>::type) {
kono
parents:
diff changeset
63 new (p1) typename make_reference_content<recursive_enabled_T>::type;
kono
parents:
diff changeset
64 }
kono
parents:
diff changeset
65 };
kono
parents:
diff changeset
66 typedef pair<initializer_node> type;
kono
parents:
diff changeset
67 };
kono
parents:
diff changeset
68 };
kono
parents:
diff changeset
69 struct l_item {
kono
parents:
diff changeset
70 typedef int tag;
kono
parents:
diff changeset
71 typedef l_item type;
kono
parents:
diff changeset
72 typedef long_ size;
kono
parents:
diff changeset
73 typedef int item;
kono
parents:
diff changeset
74 };
kono
parents:
diff changeset
75 template <> struct O1_size_impl<int> {
kono
parents:
diff changeset
76 template <typename List> struct apply : List::size {};
kono
parents:
diff changeset
77 };
kono
parents:
diff changeset
78 template <typename> struct l_iter;
kono
parents:
diff changeset
79 template <typename Node> struct deref<l_iter<Node>> {
kono
parents:
diff changeset
80 typedef typename Node::item type;
kono
parents:
diff changeset
81 };
kono
parents:
diff changeset
82 template <> struct begin_impl<int> {
kono
parents:
diff changeset
83 template <typename List> struct apply {
kono
parents:
diff changeset
84 typedef l_iter<typename List::type> type;
kono
parents:
diff changeset
85 };
kono
parents:
diff changeset
86 };
kono
parents:
diff changeset
87 template <typename, typename, typename, typename, typename, typename, typename>
kono
parents:
diff changeset
88 struct list : l_item {};
kono
parents:
diff changeset
89 template <typename... T> struct make_variant_list { typedef list<T...> type; };
kono
parents:
diff changeset
90 template <typename T> T cast_storage(void *p1) { return *static_cast<T *>(p1); }
kono
parents:
diff changeset
91 struct visitation_impl_step {
kono
parents:
diff changeset
92 typedef Trans_NS__v1_GenericUnsupportedTlv type;
kono
parents:
diff changeset
93 };
kono
parents:
diff changeset
94 template <typename Visitor, typename VoidPtrCV, typename T>
kono
parents:
diff changeset
95 void visitation_impl_invoke_impl(Visitor p1, VoidPtrCV p2, T *) {
kono
parents:
diff changeset
96 backup_holder<Trans_NS__v1_GenericUnsupportedTlv> __trans_tmp_8 =
kono
parents:
diff changeset
97 cast_storage<backup_holder<T>>(p2);
kono
parents:
diff changeset
98 p1.internal_visit(__trans_tmp_8, 0);
kono
parents:
diff changeset
99 }
kono
parents:
diff changeset
100 template <typename Visitor, typename VoidPtrCV, typename T,
kono
parents:
diff changeset
101 typename NoBackupFlag>
kono
parents:
diff changeset
102 void visitation_impl_invoke(Visitor p1, VoidPtrCV p2, T p3, NoBackupFlag) {
kono
parents:
diff changeset
103 visitation_impl_invoke_impl(p1, p2, p3);
kono
parents:
diff changeset
104 }
kono
parents:
diff changeset
105 template <typename Which, typename step0, typename Visitor, typename VoidPtrCV,
kono
parents:
diff changeset
106 typename NoBackupFlag>
kono
parents:
diff changeset
107 void visitation_impl(Visitor p1, VoidPtrCV p2, NoBackupFlag, Which, step0 *) {
kono
parents:
diff changeset
108 visitation_impl_invoke(p1, p2, static_cast<typename step0::type *>(0), 0);
kono
parents:
diff changeset
109 }
kono
parents:
diff changeset
110 struct move_into {
kono
parents:
diff changeset
111 move_into(void *);
kono
parents:
diff changeset
112 template <typename T> void internal_visit(backup_holder<T> p1, int) {
kono
parents:
diff changeset
113 T __trans_tmp_2 = p1.get();
kono
parents:
diff changeset
114 new (0) T(__trans_tmp_2);
kono
parents:
diff changeset
115 }
kono
parents:
diff changeset
116 };
kono
parents:
diff changeset
117 template <typename, typename... TN> struct variant {
kono
parents:
diff changeset
118 struct initializer : iter_fold<typename make_variant_list<int, TN...>::type,
kono
parents:
diff changeset
119 make_initializer_node>::type::first {};
kono
parents:
diff changeset
120 template <typename T> void convert_construct(T p1, int) {
kono
parents:
diff changeset
121 void *__trans_tmp_9 = this;
kono
parents:
diff changeset
122 initializer::initialize(__trans_tmp_9, p1);
kono
parents:
diff changeset
123 }
kono
parents:
diff changeset
124 template <typename T> variant(T p1) { convert_construct(p1, 0); }
kono
parents:
diff changeset
125 variant(variant &&p1) {
kono
parents:
diff changeset
126 move_into visitor(0);
kono
parents:
diff changeset
127 p1.internal_apply_visitor(visitor);
kono
parents:
diff changeset
128 }
kono
parents:
diff changeset
129 template <typename Visitor> void internal_apply_visitor(Visitor p1) {
kono
parents:
diff changeset
130 void *__trans_tmp_10 = this;
kono
parents:
diff changeset
131 visitation_impl(p1, __trans_tmp_10, 0, 0,
kono
parents:
diff changeset
132 static_cast<visitation_impl_step *>(0));
kono
parents:
diff changeset
133 }
kono
parents:
diff changeset
134 };
kono
parents:
diff changeset
135 template <class...> struct generic_element_tlvs;
kono
parents:
diff changeset
136 template <typename TlvConfig, class UnsupportedTlvClass, class TlvF,
kono
parents:
diff changeset
137 class... TlvR>
kono
parents:
diff changeset
138 struct generic_element_tlvs<TlvConfig, UnsupportedTlvClass, TlvF, TlvR...> {
kono
parents:
diff changeset
139 typedef variant<UnsupportedTlvClass, TlvF, TlvR...> variant_type;
kono
parents:
diff changeset
140 };
kono
parents:
diff changeset
141 template <typename, typename> struct Trans_NS__v1_GenericTlvContainer {
kono
parents:
diff changeset
142 template <class TlvClass> void addTlv(const TlvClass &);
kono
parents:
diff changeset
143 };
kono
parents:
diff changeset
144 template <typename TlvConfig, typename ElementTlvs>
kono
parents:
diff changeset
145 template <class TlvClass>
kono
parents:
diff changeset
146 void Trans_NS__v1_GenericTlvContainer<TlvConfig, ElementTlvs>::addTlv(
kono
parents:
diff changeset
147 const TlvClass &p1) {
kono
parents:
diff changeset
148 typename ElementTlvs::variant_type wrap(p1);
kono
parents:
diff changeset
149 move(wrap);
kono
parents:
diff changeset
150 }
kono
parents:
diff changeset
151 template <typename ElementTlvs>
kono
parents:
diff changeset
152 struct Trans_NS__v1_GenericContainerEntryBase
kono
parents:
diff changeset
153 : Trans_NS__v1_GenericTlvContainer<int, ElementTlvs> {};
kono
parents:
diff changeset
154 template <class>
kono
parents:
diff changeset
155 struct Trans_NS__v1_GenericFixedLengthTlvBase : Trans_NS__v1_GenericTlvBase {
kono
parents:
diff changeset
156 unsigned long getValueLength() const;
kono
parents:
diff changeset
157 };
kono
parents:
diff changeset
158 struct Trans_NS__v1_GenericUnsupportedTlv : Trans_NS__v1_GenericTlv {
kono
parents:
diff changeset
159 long getHeaderLengthconst;
kono
parents:
diff changeset
160 };
kono
parents:
diff changeset
161 using isis_tlv_config = int;
kono
parents:
diff changeset
162 template <class... TlvClasses>
kono
parents:
diff changeset
163 using isis_element_tlvs =
kono
parents:
diff changeset
164 generic_element_tlvs<isis_tlv_config, Trans_NS__v1_GenericUnsupportedTlv,
kono
parents:
diff changeset
165 TlvClasses...>;
kono
parents:
diff changeset
166 template <int, class, typename ElementTlvs>
kono
parents:
diff changeset
167 using ContainerEntryBase = Trans_NS__v1_GenericContainerEntryBase<ElementTlvs>;
kono
parents:
diff changeset
168 template <int, class ImplClass, int>
kono
parents:
diff changeset
169 using FixedLengthTlvBase = Trans_NS__v1_GenericFixedLengthTlvBase<ImplClass>;
kono
parents:
diff changeset
170 struct IPv4NeighborAddressSubTlv
kono
parents:
diff changeset
171 : FixedLengthTlvBase<0, IPv4NeighborAddressSubTlv, 0> {
kono
parents:
diff changeset
172 bool operator==(const IPv4NeighborAddressSubTlv &) const;
kono
parents:
diff changeset
173 };
kono
parents:
diff changeset
174 void test() {
kono
parents:
diff changeset
175 ContainerEntryBase<
kono
parents:
diff changeset
176 0, int,
kono
parents:
diff changeset
177 isis_element_tlvs<
kono
parents:
diff changeset
178 FixedLengthTlvBase<0, int, 0>, FixedLengthTlvBase<0, int, 0>,
kono
parents:
diff changeset
179 IPv4NeighborAddressSubTlv, FixedLengthTlvBase<0, int, 0>,
kono
parents:
diff changeset
180 FixedLengthTlvBase<0, int, 0>, FixedLengthTlvBase<0, int, 0>>>
kono
parents:
diff changeset
181 isEntry;
kono
parents:
diff changeset
182 IPv4NeighborAddressSubTlv nbAddressSubTlv;
kono
parents:
diff changeset
183 isEntry.addTlv(nbAddressSubTlv);
kono
parents:
diff changeset
184 }