111
|
1 // I, Howard Hinnant, hereby place this code in the public domain.
|
|
2 /* { dg-additional-options "-fno-ipa-icf" } */
|
|
3
|
|
4 // Test overload resolution among reference types
|
|
5
|
|
6 // { dg-do compile { target c++11 } }
|
|
7 // { dg-additional-options "-fno-ipa-icf" }
|
|
8
|
|
9 template <bool> struct sa;
|
|
10 template <> struct sa<true> {};
|
|
11
|
|
12 struct one {char x[1];};
|
|
13 struct two {char x[2];};
|
|
14 struct three {char x[3];};
|
|
15 struct four {char x[4];};
|
|
16 struct five {char x[5];};
|
|
17 struct six {char x[6];};
|
|
18 struct seven {char x[7];};
|
|
19 struct eight {char x[8];};
|
|
20
|
|
21 struct A
|
|
22 {
|
|
23 A();
|
|
24 A(const volatile A&&);
|
|
25 };
|
|
26
|
|
27 A source();
|
|
28 const A c_source();
|
|
29 volatile A v_source();
|
|
30 const volatile A cv_source();
|
|
31
|
|
32 // 1 at a time
|
|
33
|
|
34 one sink_1_1( A&); // { dg-message "" }
|
|
35
|
|
36 int test1_1()
|
|
37 {
|
|
38 A a;
|
|
39 const A ca = a; // { dg-error "deleted" }
|
|
40 volatile A va;
|
|
41 const volatile A cva = a; // { dg-error "deleted" }
|
|
42 sink_1_1(ca); // { dg-error "" }
|
|
43 sink_1_1(va); // { dg-error "" }
|
|
44 sink_1_1(cva); // { dg-error "" }
|
|
45 sink_1_1(source()); // { dg-error "" }
|
|
46 sink_1_1(c_source()); // { dg-error "" }
|
|
47 sink_1_1(v_source()); // { dg-error "" }
|
|
48 sink_1_1(cv_source()); // { dg-error "" }
|
|
49 return 0;
|
|
50 }
|
|
51
|
|
52 two sink_1_2(const A&); // { dg-message "" }
|
|
53
|
|
54 int test1_2()
|
|
55 {
|
|
56 A a;
|
|
57 const A ca = a; // { dg-error "deleted" }
|
|
58 volatile A va;
|
|
59 const volatile A cva = a; // { dg-error "deleted" }
|
|
60 sink_1_2(va); // { dg-error "" }
|
|
61 sink_1_2(cva); // { dg-error "" }
|
|
62 sink_1_2(v_source()); // { dg-error "" }
|
|
63 sink_1_2(cv_source()); // { dg-error "" }
|
|
64 return 0;
|
|
65 }
|
|
66
|
|
67 three sink_1_3(volatile A&); // { dg-message "" }
|
|
68
|
|
69 int test1_3()
|
|
70 {
|
|
71 A a;
|
|
72 const A ca = a; // { dg-error "deleted" }
|
|
73 volatile A va;
|
|
74 const volatile A cva = a; // { dg-error "deleted" }
|
|
75 sink_1_3(ca); // { dg-error "" }
|
|
76 sink_1_3(cva); // { dg-error "" }
|
|
77 sink_1_3(source()); // { dg-error "" }
|
|
78 sink_1_3(c_source()); // { dg-error "" }
|
|
79 sink_1_3(v_source()); // { dg-error "" }
|
|
80 sink_1_3(cv_source()); // { dg-error "" }
|
|
81 return 0;
|
|
82 }
|
|
83
|
|
84 four sink_1_4(const volatile A&); // { dg-message "" }
|
|
85
|
|
86 int test1_4()
|
|
87 {
|
|
88 A a;
|
|
89 const A ca = a; // { dg-error "deleted" }
|
|
90 volatile A va;
|
|
91 const volatile A cva = a; // { dg-error "deleted" }
|
|
92 sink_1_4(source()); // { dg-error "" }
|
|
93 sink_1_4(c_source()); // { dg-error "" }
|
|
94 sink_1_4(v_source()); // { dg-error "" }
|
|
95 sink_1_4(cv_source()); // { dg-error "" }
|
|
96 return 0;
|
|
97 }
|
|
98
|
|
99 five sink_1_5( A&&); // { dg-message "" }
|
|
100
|
|
101 int test1_5()
|
|
102 {
|
|
103 A a;
|
|
104 const A ca = a; // { dg-error "deleted" }
|
|
105 volatile A va;
|
|
106 const volatile A cva = a; // { dg-error "deleted" }
|
|
107 sink_1_5(a); // { dg-error "lvalue" }
|
|
108 sink_1_5(ca); // { dg-error "" }
|
|
109 sink_1_5(va); // { dg-error "" }
|
|
110 sink_1_5(cva); // { dg-error "" }
|
|
111 sink_1_5(c_source()); // { dg-error "" }
|
|
112 sink_1_5(v_source()); // { dg-error "" }
|
|
113 sink_1_5(cv_source()); // { dg-error "" }
|
|
114 return 0;
|
|
115 }
|
|
116
|
|
117 six sink_1_6(const A&&); // { dg-message "" }
|
|
118
|
|
119 int test1_6()
|
|
120 {
|
|
121 A a;
|
|
122 const A ca = a; // { dg-error "deleted" }
|
|
123 volatile A va;
|
|
124 const volatile A cva = a; // { dg-error "deleted" }
|
|
125 sink_1_6(a); // { dg-error "lvalue" }
|
|
126 sink_1_6(ca); // { dg-error "lvalue" }
|
|
127 sink_1_6(va); // { dg-error "" }
|
|
128 sink_1_6(cva); // { dg-error "" }
|
|
129 sink_1_6(v_source()); // { dg-error "" }
|
|
130 sink_1_6(cv_source()); // { dg-error "" }
|
|
131 return 0;
|
|
132 }
|
|
133
|
|
134 seven sink_1_7(volatile A&&); // { dg-message "" }
|
|
135
|
|
136 int test1_7()
|
|
137 {
|
|
138 A a;
|
|
139 const A ca = a; // { dg-error "deleted" }
|
|
140 volatile A va;
|
|
141 const volatile A cva = a; // { dg-error "deleted" }
|
|
142 sink_1_7(a); // { dg-error "lvalue" }
|
|
143 sink_1_7(ca); // { dg-error "" }
|
|
144 sink_1_7(va); // { dg-error "lvalue" }
|
|
145 sink_1_7(cva); // { dg-error "" }
|
|
146 sink_1_7(c_source()); // { dg-error "" }
|
|
147 sink_1_7(cv_source()); // { dg-error "" }
|
|
148 return 0;
|
|
149 }
|
|
150
|
|
151 eight sink_1_8(const volatile A&&); // { dg-message "" }
|
|
152
|
|
153 int test1_8()
|
|
154 {
|
|
155 A a;
|
|
156 const A ca = a; // { dg-error "deleted" }
|
|
157 volatile A va;
|
|
158 const volatile A cva = a; // { dg-error "deleted" }
|
|
159 sink_1_8(a); // { dg-error "lvalue" }
|
|
160 sink_1_8(ca); // { dg-error "lvalue" }
|
|
161 sink_1_8(va); // { dg-error "lvalue" }
|
|
162 sink_1_8(cva); // { dg-error "lvalue" }
|
|
163 return 0;
|
|
164 }
|
|
165
|
|
166 int main()
|
|
167 {
|
|
168 return test1_1() + test1_2() + test1_3() + test1_5() +
|
|
169 test1_6() + test1_7();
|
|
170 }
|