annotate gcc/testsuite/g++.dg/torture/pr64312.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 }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 template <typename C> struct A
kono
parents:
diff changeset
4 {
kono
parents:
diff changeset
5 typedef typename C::iterator type;
kono
parents:
diff changeset
6 };
kono
parents:
diff changeset
7 template <typename T2> struct B
kono
parents:
diff changeset
8 {
kono
parents:
diff changeset
9 typedef T2 type;
kono
parents:
diff changeset
10 };
kono
parents:
diff changeset
11 template <typename F2> struct L
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 typedef typename B<F2>::type::type type;
kono
parents:
diff changeset
14 };
kono
parents:
diff changeset
15 template <typename C> struct M
kono
parents:
diff changeset
16 {
kono
parents:
diff changeset
17 typedef typename L<A<C> >::type type;
kono
parents:
diff changeset
18 };
kono
parents:
diff changeset
19 class C
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 public:
kono
parents:
diff changeset
22 typedef int iterator;
kono
parents:
diff changeset
23 };
kono
parents:
diff changeset
24 template <class IteratorT> class D
kono
parents:
diff changeset
25 {
kono
parents:
diff changeset
26 public:
kono
parents:
diff changeset
27 typedef IteratorT iterator;
kono
parents:
diff changeset
28 template <class Iterator> D (Iterator p1, Iterator) : m_Begin (p1), m_End (0)
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 }
kono
parents:
diff changeset
31 IteratorT m_Begin;
kono
parents:
diff changeset
32 IteratorT m_End;
kono
parents:
diff changeset
33 };
kono
parents:
diff changeset
34 template <class IteratorT> class I : public D<IteratorT>
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 protected:
kono
parents:
diff changeset
37 template <class Iterator>
kono
parents:
diff changeset
38 I (Iterator p1, Iterator p2)
kono
parents:
diff changeset
39 : D<IteratorT> (p1, p2)
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 }
kono
parents:
diff changeset
42 };
kono
parents:
diff changeset
43 class F
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 public:
kono
parents:
diff changeset
46 int nelems;
kono
parents:
diff changeset
47 int elems[]; // { dg-error "not at end" }
kono
parents:
diff changeset
48 int *
kono
parents:
diff changeset
49 m_fn1 ()
kono
parents:
diff changeset
50 {
kono
parents:
diff changeset
51 return elems;
kono
parents:
diff changeset
52 }
kono
parents:
diff changeset
53 };
kono
parents:
diff changeset
54 class G
kono
parents:
diff changeset
55 {
kono
parents:
diff changeset
56 public:
kono
parents:
diff changeset
57 void *
kono
parents:
diff changeset
58 m_fn2 (int)
kono
parents:
diff changeset
59 {
kono
parents:
diff changeset
60 return m_buffer.m_fn1 ();
kono
parents:
diff changeset
61 }
kono
parents:
diff changeset
62 F m_buffer;
kono
parents:
diff changeset
63 };
kono
parents:
diff changeset
64 struct any_incrementable_iterator_interface
kono
parents:
diff changeset
65 {
kono
parents:
diff changeset
66 virtual ~any_incrementable_iterator_interface () {}
kono
parents:
diff changeset
67 };
kono
parents:
diff changeset
68 class J : public any_incrementable_iterator_interface
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 public:
kono
parents:
diff changeset
71 J (int) : m_it () {}
kono
parents:
diff changeset
72 int m_it;
kono
parents:
diff changeset
73 };
kono
parents:
diff changeset
74 void *operator new(__SIZE_TYPE__, void *p2) { return p2; }
kono
parents:
diff changeset
75 template <class T> typename M<T>::type begin (T) { return 0; }
kono
parents:
diff changeset
76 template <class T> typename M<T>::type end (T) {}
kono
parents:
diff changeset
77 template <class> class any_iterator
kono
parents:
diff changeset
78 {
kono
parents:
diff changeset
79 public:
kono
parents:
diff changeset
80 template <class WrappedIterator> any_iterator (WrappedIterator)
kono
parents:
diff changeset
81 {
kono
parents:
diff changeset
82 void *ptr = m_buffer.m_fn2 (0);
kono
parents:
diff changeset
83 m_impl = new (ptr) J (0);
kono
parents:
diff changeset
84 }
kono
parents:
diff changeset
85 ~any_iterator ()
kono
parents:
diff changeset
86 {
kono
parents:
diff changeset
87 if (m_impl)
kono
parents:
diff changeset
88 m_impl->~any_incrementable_iterator_interface ();
kono
parents:
diff changeset
89 }
kono
parents:
diff changeset
90 G m_buffer;
kono
parents:
diff changeset
91 any_incrementable_iterator_interface *m_impl; // { dg-message "next member" }
kono
parents:
diff changeset
92 };
kono
parents:
diff changeset
93 template <class Reference> class K : public I<any_iterator<Reference> >
kono
parents:
diff changeset
94 {
kono
parents:
diff changeset
95 public:
kono
parents:
diff changeset
96 template <class WrappedRange>
kono
parents:
diff changeset
97 K (WrappedRange p1)
kono
parents:
diff changeset
98 : I<any_iterator<Reference> > (begin (p1), end (p1))
kono
parents:
diff changeset
99 {
kono
parents:
diff changeset
100 }
kono
parents:
diff changeset
101 };
kono
parents:
diff changeset
102 template <class Reference> struct H
kono
parents:
diff changeset
103 {
kono
parents:
diff changeset
104 typedef K<Reference> type;
kono
parents:
diff changeset
105 };
kono
parents:
diff changeset
106 template <class, class, class, class, class, class TargetReference>
kono
parents:
diff changeset
107 void
kono
parents:
diff changeset
108 mix_values_impl ()
kono
parents:
diff changeset
109 {
kono
parents:
diff changeset
110 C test_data;
kono
parents:
diff changeset
111 H<int>::type source_data (test_data);
kono
parents:
diff changeset
112 typename H<TargetReference>::type t2 = source_data;
kono
parents:
diff changeset
113 }
kono
parents:
diff changeset
114 template <class>
kono
parents:
diff changeset
115 void
kono
parents:
diff changeset
116 mix_values_driver ()
kono
parents:
diff changeset
117 {
kono
parents:
diff changeset
118 mix_values_impl<int, int, int, int, int, int &> ();
kono
parents:
diff changeset
119 }
kono
parents:
diff changeset
120 void
kono
parents:
diff changeset
121 mix_values ()
kono
parents:
diff changeset
122 {
kono
parents:
diff changeset
123 mix_values_driver<int> ();
kono
parents:
diff changeset
124 }