annotate gcc/testsuite/g++.dg/pr64688.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 { target i?86-*-* x86_64-*-* } }
kono
parents:
diff changeset
2 // { dg-options "-std=c++11 -O3 -march=westmere" }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 template <typename T> struct A { typedef typename T::next type; };
kono
parents:
diff changeset
5 template <typename> struct B;
kono
parents:
diff changeset
6 template <typename T> struct N : T {};
kono
parents:
diff changeset
7 template <int N> struct C {
kono
parents:
diff changeset
8 static const int value = N;
kono
parents:
diff changeset
9 typedef C<N + 1> next;
kono
parents:
diff changeset
10 };
kono
parents:
diff changeset
11 template <typename Sequence>
kono
parents:
diff changeset
12 struct R : N<typename B<typename Sequence::tag>::template P<Sequence>> {};
kono
parents:
diff changeset
13 template <typename Base> struct O : Base {
kono
parents:
diff changeset
14 typedef typename A<typename Base::size>::type size;
kono
parents:
diff changeset
15 };
kono
parents:
diff changeset
16 template <typename = int> struct D {
kono
parents:
diff changeset
17 typedef int tag;
kono
parents:
diff changeset
18 typedef C<0> size;
kono
parents:
diff changeset
19 };
kono
parents:
diff changeset
20 template <> struct B<int> {
kono
parents:
diff changeset
21 template <typename> struct P : O<O<O<D<>>>>::size {};
kono
parents:
diff changeset
22 };
kono
parents:
diff changeset
23 template <typename> struct F;
kono
parents:
diff changeset
24 template <typename> struct G;
kono
parents:
diff changeset
25 template <typename, typename, int> struct H;
kono
parents:
diff changeset
26 template <typename Element, typename Layout> struct H<Element, Layout, 3> {};
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
27 template <int, typename E, typename L, int N> unsigned char at_c(H<E, L, N>)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
29 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
30 }
111
kono
parents:
diff changeset
31 template <typename> class I;
kono
parents:
diff changeset
32 template <typename> class J;
kono
parents:
diff changeset
33 template <typename> class K;
kono
parents:
diff changeset
34 template <typename, typename> struct Q;
kono
parents:
diff changeset
35 struct L {
kono
parents:
diff changeset
36 typedef Q<unsigned char, F<O<O<O<D<>>>>>> *type;
kono
parents:
diff changeset
37 };
kono
parents:
diff changeset
38 template <typename XIterator> struct M { typedef K<J<I<XIterator>>> view_t; };
kono
parents:
diff changeset
39 template <typename, typename>
kono
parents:
diff changeset
40 struct Q : H<unsigned, F<int>, R<O<O<O<D<>>>>>::value> {};
kono
parents:
diff changeset
41 template <typename Iterator> struct G<I<Iterator>> { typedef Iterator type; };
kono
parents:
diff changeset
42 template <typename> class J {
kono
parents:
diff changeset
43 public:
kono
parents:
diff changeset
44 typedef G<I<Q<unsigned, int> *>>::type x_iterator;
kono
parents:
diff changeset
45 };
kono
parents:
diff changeset
46 template <typename> class K {
kono
parents:
diff changeset
47 public:
kono
parents:
diff changeset
48 J<int>::x_iterator row_begin(int);
kono
parents:
diff changeset
49 };
kono
parents:
diff changeset
50 template <typename Op> void measure_time(Op p1) { p1(); }
kono
parents:
diff changeset
51 template <typename, typename> struct fill_nongil_t;
kono
parents:
diff changeset
52 template <typename T, typename P>
kono
parents:
diff changeset
53 struct fill_nongil_t<K<J<I<Q<T, F<O<O<O<D<>>>>>> *>>>, P> {
kono
parents:
diff changeset
54 typedef K<J<I<Q<T, F<O<O<O<D<>>>>>> *>>> View;
kono
parents:
diff changeset
55 View _v;
kono
parents:
diff changeset
56 P _p;
kono
parents:
diff changeset
57 fill_nongil_t(View, P);
kono
parents:
diff changeset
58 void operator()() {
kono
parents:
diff changeset
59 T *first = (T *)_v.row_begin(0);
kono
parents:
diff changeset
60 T last;
kono
parents:
diff changeset
61 while (first != &last) {
kono
parents:
diff changeset
62 first[0] = first[1] = at_c<1>(_p);
kono
parents:
diff changeset
63 first[2] = at_c<2>(_p);
kono
parents:
diff changeset
64 first += 3;
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66 }
kono
parents:
diff changeset
67 };
kono
parents:
diff changeset
68 template <typename, typename> void test_fill(int) {
kono
parents:
diff changeset
69 M<L::type>::view_t __trans_tmp_1;
kono
parents:
diff changeset
70 measure_time(fill_nongil_t<K<J<I<Q<unsigned char, F<O<O<O<D<>>>>>> *>>>,
kono
parents:
diff changeset
71 Q<unsigned char, F<O<O<O<D<>>>>>>>(
kono
parents:
diff changeset
72 __trans_tmp_1, Q<unsigned char, F<O<O<O<D<>>>>>>()));
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74 void performance_testtest_method() { test_fill<K<int>, Q<unsigned, int>>(0); }