re PR middle-end/71387 (ICE in emit_move_insn, at expr.c:3418 with -Og)
[platform/upstream/gcc.git] / gcc / testsuite / g++.dg / cpp0x / rv3n.C
1 // I, Howard Hinnant, hereby place this code in the public domain.
2
3 // Test overload resolution among reference types
4
5 // { dg-do compile { target c++11 } }
6 // { dg-options "-fno-ipa-icf" }
7
8 template <bool> struct sa;
9 template <> struct sa<true> {};
10
11 struct one   {char x[1];};
12 struct two   {char x[2];};
13 struct three {char x[3];};
14 struct four  {char x[4];};
15 struct five  {char x[5];};
16 struct six   {char x[6];};
17 struct seven {char x[7];};
18 struct eight {char x[8];};
19
20 struct A
21 {
22     A();
23     A(const volatile A&&);
24 };
25
26                A    source();
27 const          A  c_source();
28       volatile A  v_source();
29 const volatile A cv_source();
30
31 // 3 at a time
32
33 one   sink_3_123(               A&);
34 two   sink_3_123(const          A&);
35 three sink_3_123(volatile       A&);
36
37 int test3_123()
38 {
39                    A a;
40     const          A ca = a; // { dg-error "deleted" }
41           volatile A va;
42     const volatile A cva = a; // { dg-error "deleted" }
43     sink_3_123(cva);          // { dg-error "" }
44     sink_3_123(v_source());   // { dg-error "" }
45     sink_3_123(cv_source());  // { dg-error "" }
46     return 0;
47 }
48
49 one   sink_3_125(               A&);
50 two   sink_3_125(const          A&);
51 five  sink_3_125(               A&&);
52
53 one   sink_3_124(               A&);
54 two   sink_3_124(const          A&);
55 four  sink_3_124(const volatile A&);
56
57 int test3_124()
58 {
59                    A a;
60     const          A ca = a; // { dg-error "deleted" }
61           volatile A va;
62     const volatile A cva = a; // { dg-error "deleted" }
63     sink_3_124(v_source());   // { dg-error "" }
64     sink_3_124(cv_source());  // { dg-error "" }
65     return 0;
66 }
67
68 int test3_125()
69 {
70                    A a;
71     const          A ca = a; // { dg-error "deleted" }
72           volatile A va;
73     const volatile A cva = a; // { dg-error "deleted" }
74     sink_3_125(va);           // { dg-error "" }
75     sink_3_125(cva);          // { dg-error "" }
76     sink_3_125(v_source());   // { dg-error "" }
77     sink_3_125(cv_source());  // { dg-error "" }
78     return 0;
79 }
80
81 one   sink_3_126(               A&);
82 two   sink_3_126(const          A&);
83 six   sink_3_126(const          A&&);
84
85 int test3_126()
86 {
87                    A a;
88     const          A ca = a; // { dg-error "deleted" }
89           volatile A va;
90     const volatile A cva = a; // { dg-error "deleted" }
91     sink_3_126(va);           // { dg-error "" }
92     sink_3_126(cva);          // { dg-error "" }
93     sink_3_126(v_source());   // { dg-error "" }
94     sink_3_126(cv_source());  // { dg-error "" }
95     return 0;
96 }
97
98 one   sink_3_127(               A&);
99 two   sink_3_127(const          A&);
100 seven sink_3_127(volatile       A&&);
101
102 int test3_127()
103 {
104                    A a;
105     const          A ca = a; // { dg-error "deleted" }
106           volatile A va;
107     const volatile A cva = a; // { dg-error "deleted" }
108     sink_3_127(va);             // { dg-error "" }
109     sink_3_127(cva);          // { dg-error "" }
110     sink_3_127(cv_source());  // { dg-error "" }
111     return 0;
112 }
113
114 one   sink_3_128(               A&);
115 two   sink_3_128(const          A&);
116 eight sink_3_128(const volatile A&&);
117
118 int test3_128()
119 {
120                    A a;
121     const          A ca = a; // { dg-error "deleted" }
122           volatile A va;
123     const volatile A cva = a; // { dg-error "deleted" }
124
125     sink_3_128(va);             // { dg-error "" }
126     sink_3_128(cva);            // { dg-error "" }
127 }
128
129 one   sink_3_134(               A&);
130 three sink_3_134(volatile       A&);
131 four  sink_3_134(const volatile A&);
132
133 int test3_134()
134 {
135                    A a;
136     const          A ca = a; // { dg-error "deleted" }
137           volatile A va;
138     const volatile A cva = a; // { dg-error "deleted" }
139     sink_3_134(source());     // { dg-error "" }
140     sink_3_134(c_source());   // { dg-error "" }
141     sink_3_134(v_source());   // { dg-error "" }
142     sink_3_134(cv_source());  // { dg-error "" }
143     return 0;
144 }
145
146 one   sink_3_135(               A&);
147 three sink_3_135(volatile       A&);
148 five  sink_3_135(               A&&);
149
150 int test3_135()
151 {
152                    A a;
153     const          A ca = a; // { dg-error "deleted" }
154           volatile A va;
155     const volatile A cva = a; // { dg-error "deleted" }
156     sink_3_135(ca);           // { dg-error "" }
157     sink_3_135(cva);          // { dg-error "" }
158     sink_3_135(c_source());   // { dg-error "" }
159     sink_3_135(v_source());   // { dg-error "" }
160     sink_3_135(cv_source());  // { dg-error "" }
161     return 0;
162 }
163
164 one   sink_3_136(               A&);
165 three sink_3_136(volatile       A&);
166 six   sink_3_136(const          A&&);
167
168 int test3_136()
169 {
170                    A a;
171     const          A ca = a; // { dg-error "deleted" }
172           volatile A va;
173     const volatile A cva = a; // { dg-error "deleted" }
174     sink_3_136(ca);             // { dg-error "" }
175     sink_3_136(cva);          // { dg-error "" }
176     sink_3_136(v_source());   // { dg-error "" }
177     sink_3_136(cv_source());  // { dg-error "" }
178     return 0;
179 }
180
181 one   sink_3_137(               A&);
182 three sink_3_137(volatile       A&);
183 seven sink_3_137(volatile       A&&);
184
185 int test3_137()
186 {
187                    A a;
188     const          A ca = a; // { dg-error "deleted" }
189           volatile A va;
190     const volatile A cva = a; // { dg-error "deleted" }
191     sink_3_137(ca);           // { dg-error "" }
192     sink_3_137(cva);          // { dg-error "" }
193     sink_3_137(c_source());   // { dg-error "" }
194     sink_3_137(cv_source());  // { dg-error "" }
195     return 0;
196 }
197
198 one   sink_3_138(               A&);
199 three sink_3_138(volatile       A&);
200 eight sink_3_138(const volatile A&&);
201
202 int test3_138()
203 {
204                    A a;
205     const          A ca = a; // { dg-error "deleted" }
206           volatile A va;
207     const volatile A cva = a; // { dg-error "deleted" }
208     sink_3_138(ca);             // { dg-error "" }
209     sink_3_138(cva);            // { dg-error "" }
210     return 0;
211 }
212
213 one   sink_3_145(               A&);
214 four  sink_3_145(const volatile A&);
215 five  sink_3_145(               A&&);
216
217 int test3_145()
218 {
219                    A a;
220     const          A ca = a; // { dg-error "deleted" }
221           volatile A va;
222     const volatile A cva = a; // { dg-error "deleted" }
223     sink_3_145(c_source());   // { dg-error "" }
224     sink_3_145(v_source());   // { dg-error "" }
225     sink_3_145(cv_source());  // { dg-error "" }
226     return 0;
227 }
228
229 one   sink_3_146(               A&);
230 four  sink_3_146(const volatile A&);
231 six   sink_3_146(const          A&&);
232
233 int test3_146()
234 {
235                    A a;
236     const          A ca = a; // { dg-error "deleted" }
237           volatile A va;
238     const volatile A cva = a; // { dg-error "deleted" }
239     sink_3_146(v_source());   // { dg-error "" }
240     sink_3_146(cv_source());  // { dg-error "" }
241     return 0;
242 }
243
244 one   sink_3_147(               A&);
245 four  sink_3_147(const volatile A&);
246 seven sink_3_147(volatile       A&&);
247
248 int test3_147()
249 {
250                    A a;
251     const          A ca = a; // { dg-error "deleted" }
252           volatile A va;
253     const volatile A cva = a; // { dg-error "deleted" }
254     sink_3_147(c_source());   // { dg-error "" }
255     sink_3_147(cv_source());  // { dg-error "" }
256     return 0;
257 }
258
259 one   sink_3_156(               A&);
260 five  sink_3_156(               A&&);
261 six   sink_3_156(const          A&&);
262
263 int test3_156()
264 {
265                    A a;
266     const          A ca = a; // { dg-error "deleted" }
267           volatile A va;
268     const volatile A cva = a; // { dg-error "deleted" }
269     sink_3_156(ca);             // { dg-error "" }
270     sink_3_156(va);           // { dg-error "" }
271     sink_3_156(cva);          // { dg-error "" }
272     sink_3_156(v_source());   // { dg-error "" }
273     sink_3_156(cv_source());  // { dg-error "" }
274     return 0;
275 }
276
277 one   sink_3_157(               A&);
278 five  sink_3_157(               A&&);
279 seven sink_3_157(volatile       A&&);
280
281 int test3_157()
282 {
283                    A a;
284     const          A ca = a; // { dg-error "deleted" }
285           volatile A va;
286     const volatile A cva = a; // { dg-error "deleted" }
287     sink_3_157(ca);           // { dg-error "" }
288     sink_3_157(va);           // { dg-error "" }
289     sink_3_157(cva);          // { dg-error "" }
290     sink_3_157(c_source());   // { dg-error "" }
291     sink_3_157(cv_source());  // { dg-error "" }
292     return 0;
293 }
294
295 one   sink_3_158(               A&);
296 five  sink_3_158(               A&&);
297 eight sink_3_158(const volatile A&&);
298
299 int test3_158()
300 {
301                    A a;
302     const          A ca = a; // { dg-error "deleted" }
303           volatile A va;
304     const volatile A cva = a; // { dg-error "deleted" }
305     sink_3_158(ca);             // { dg-error "" }
306     sink_3_158(va);             // { dg-error "" }
307     sink_3_158(cva);            // { dg-error "" }
308     return 0;
309 }
310
311 one   sink_3_167(               A&);
312 six   sink_3_167(const          A&&);
313 seven sink_3_167(volatile       A&&);
314
315 int test3_167()
316 {
317                    A a;
318     const          A ca = a; // { dg-error "deleted" }
319           volatile A va;
320     const volatile A cva = a; // { dg-error "deleted" }
321     sink_3_167(ca);             // { dg-error "" }
322     sink_3_167(va);             // { dg-error "" }
323     sink_3_167(cva);          // { dg-error "" }
324     sink_3_167(source());     // { dg-error "" }
325     sink_3_167(cv_source());  // { dg-error "" }
326     return 0;
327 }
328
329 one   sink_3_168(               A&);
330 six   sink_3_168(const          A&&);
331 eight sink_3_168(const volatile A&&);
332
333 int test3_168()
334 {
335                    A a;
336     const          A ca = a; // { dg-error "deleted" }
337           volatile A va;
338     const volatile A cva = a; // { dg-error "deleted" }
339     sink_3_168(ca);             // { dg-error "" }
340     sink_3_168(va);             // { dg-error "" }
341     sink_3_168(cva);            // { dg-error "" }
342     return 0;
343 }
344
345 one   sink_3_178(               A&);
346 seven sink_3_178(volatile       A&&);
347 eight sink_3_178(const volatile A&&);
348
349 int test3_178()
350 {
351                    A a;
352     const          A ca = a; // { dg-error "deleted" }
353           volatile A va;
354     const volatile A cva = a; // { dg-error "deleted" }
355     sink_3_178(ca);             // { dg-error "" }
356     sink_3_178(va);             // { dg-error "" }
357     sink_3_178(cva);            // { dg-error "" }
358     return 0;
359 }
360
361 two   sink_3_234(const          A&);
362 three sink_3_234(volatile       A&);
363 four  sink_3_234(const volatile A&);
364
365 int test3_234()
366 {
367                    A a;
368     const          A ca = a; // { dg-error "deleted" }
369           volatile A va;
370     const volatile A cva = a; // { dg-error "deleted" }
371     sink_3_234(a);            // { dg-error "" }
372     sink_3_234(v_source());   // { dg-error "" }
373     sink_3_234(cv_source());  // { dg-error "" }
374     return 0;
375 }
376
377 two   sink_3_235(const          A&);
378 three sink_3_235(volatile       A&);
379 five  sink_3_235(               A&&);
380
381 int test3_235()
382 {
383                    A a;
384     const          A ca = a; // { dg-error "deleted" }
385           volatile A va;
386     const volatile A cva = a; // { dg-error "deleted" }
387     sink_3_235(a);            // { dg-error "" }
388     sink_3_235(cva);          // { dg-error "" }
389     sink_3_235(v_source());   // { dg-error "" }
390     sink_3_235(cv_source());  // { dg-error "" }
391     return 0;
392 }
393
394 two   sink_3_236(const          A&);
395 three sink_3_236(volatile       A&);
396 six   sink_3_236(const          A&&);
397
398 int test3_236()
399 {
400                    A a;
401     const          A ca = a; // { dg-error "deleted" }
402           volatile A va;
403     const volatile A cva = a; // { dg-error "deleted" }
404     sink_3_236(a);            // { dg-error "" }
405     sink_3_236(cva);          // { dg-error "" }
406     sink_3_236(v_source());   // { dg-error "" }
407     sink_3_236(cv_source());  // { dg-error "" }
408     return 0;
409 }
410
411 two   sink_3_237(const          A&);
412 three sink_3_237(volatile       A&);
413 seven sink_3_237(volatile       A&&);
414
415 int test3_237()
416 {
417                    A a;
418     const          A ca = a; // { dg-error "deleted" }
419           volatile A va;
420     const volatile A cva = a; // { dg-error "deleted" }
421     sink_3_237(a);            // { dg-error "" }
422     sink_3_237(cva);          // { dg-error "" }
423     sink_3_237(cv_source());  // { dg-error "" }
424     return 0;
425 }
426
427 two   sink_3_238(const          A&);
428 three sink_3_238(volatile       A&);
429 eight sink_3_238(const volatile A&&);
430
431 int test3_238()
432 {
433                    A a;
434     const          A ca = a; // { dg-error "deleted" }
435           volatile A va;
436     const volatile A cva = a; // { dg-error "deleted" }
437     sink_3_238(a);  // { dg-error "" }
438     sink_3_238(cva); // { dg-error "" }
439     return 0;
440 }
441
442 two   sink_3_245(const          A&);
443 four  sink_3_245(const volatile A&);
444 five  sink_3_245(               A&&);
445
446 int test3_245()
447 {
448                    A a;
449     const          A ca = a; // { dg-error "deleted" }
450           volatile A va;
451     const volatile A cva = a; // { dg-error "deleted" }
452     sink_3_245(v_source());   // { dg-error "" }
453     sink_3_245(cv_source());  // { dg-error "" }
454     return 0;
455 }
456
457 two   sink_3_246(const          A&);
458 four  sink_3_246(const volatile A&);
459 six   sink_3_246(const          A&&);
460
461 int test3_246()
462 {
463                    A a;
464     const          A ca = a; // { dg-error "deleted" }
465           volatile A va;
466     const volatile A cva = a; // { dg-error "deleted" }
467     sink_3_246(v_source());   // { dg-error "" }
468     sink_3_246(cv_source());  // { dg-error "" }
469     return 0;
470 }
471
472 two   sink_3_247(const          A&);
473 four  sink_3_247(const volatile A&);
474 seven sink_3_247(volatile       A&&);
475
476 int test3_247()
477 {
478                    A a;
479     const          A ca = a; // { dg-error "deleted" }
480           volatile A va;
481     const volatile A cva = a; // { dg-error "deleted" }
482     sink_3_247(cv_source());  // { dg-error "" }
483     return 0;
484 }
485
486 two   sink_3_256(const          A&);
487 five  sink_3_256(               A&&);
488 six   sink_3_256(const          A&&);
489
490 int test3_256()
491 {
492                    A a;
493     const          A ca = a; // { dg-error "deleted" }
494           volatile A va;
495     const volatile A cva = a; // { dg-error "deleted" }
496     sink_3_256(va);           // { dg-error "" }
497     sink_3_256(cva);          // { dg-error "" }
498     sink_3_256(v_source());   // { dg-error "" }
499     sink_3_256(cv_source());  // { dg-error "" }
500     return 0;
501 }
502
503 two   sink_3_257(const          A&);
504 five  sink_3_257(               A&&);
505 seven sink_3_257(volatile       A&&);
506
507 int test3_257()
508 {
509                    A a;
510     const          A ca = a; // { dg-error "deleted" }
511           volatile A va;
512     const volatile A cva = a; // { dg-error "deleted" }
513     sink_3_257(va);             // { dg-error "" }
514     sink_3_257(cva);          // { dg-error "" }
515     sink_3_257(cv_source());  // { dg-error "" }
516     return 0;
517 }
518
519 two   sink_3_258(const          A&);
520 five  sink_3_258(               A&&);
521 eight sink_3_258(const volatile A&&);
522
523 int test3_258()
524 {
525                    A a;
526     const          A ca = a; // { dg-error "deleted" }
527           volatile A va;
528     const volatile A cva = a; // { dg-error "deleted" }
529     sink_3_258(va);             // { dg-error "" }
530     sink_3_258(cva);            // { dg-error "" }
531     return 0;
532 }
533
534 two   sink_3_267(const          A&);
535 six   sink_3_267(const          A&&);
536 seven sink_3_267(volatile       A&&);
537
538 int test3_267()
539 {
540                    A a;
541     const          A ca = a; // { dg-error "deleted" }
542           volatile A va;
543     const volatile A cva = a; // { dg-error "deleted" }
544     sink_3_267(va);             // { dg-error "" }
545     sink_3_267(cva);          // { dg-error "" }
546     sink_3_267(source());     // { dg-error "" }
547     sink_3_267(cv_source());  // { dg-error "" }
548     return 0;
549 }
550
551 two   sink_3_268(const          A&);
552 six   sink_3_268(const          A&&);
553 eight sink_3_268(const volatile A&&);
554
555 int test3_268()
556 {
557                    A a;
558     const          A ca = a; // { dg-error "deleted" }
559           volatile A va;
560     const volatile A cva = a; // { dg-error "deleted" }
561     sink_3_268(va);             // { dg-error "" }
562     sink_3_268(cva);            // { dg-error "" }
563     return 0;
564 }
565
566 two   sink_3_278(const          A&);
567 seven sink_3_278(volatile       A&&);
568 eight sink_3_278(const volatile A&&);
569
570 int test3_278()
571 {
572                    A a;
573     const          A ca = a; // { dg-error "deleted" }
574           volatile A va;
575     const volatile A cva = a; // { dg-error "deleted" }
576     sink_3_278(va);             // { dg-error "" }
577     sink_3_278(cva);            // { dg-error "" }
578     return 0;
579 }
580
581 three sink_3_345(volatile       A&);
582 four  sink_3_345(const volatile A&);
583 five  sink_3_345(               A&&);
584
585 int test3_345()
586 {
587                    A a;
588     const          A ca = a; // { dg-error "deleted" }
589           volatile A va;
590     const volatile A cva = a; // { dg-error "deleted" }
591     sink_3_345(c_source());   // { dg-error "" }
592     sink_3_345(v_source());   // { dg-error "" }
593     sink_3_345(cv_source());  // { dg-error "" }
594     return 0;
595 }
596
597 three sink_3_346(volatile       A&);
598 four  sink_3_346(const volatile A&);
599 six   sink_3_346(const          A&&);
600
601 int test3_346()
602 {
603                    A a;
604     const          A ca = a; // { dg-error "deleted" }
605           volatile A va;
606     const volatile A cva = a; // { dg-error "deleted" }
607     sink_3_346(v_source());   // { dg-error "" }
608     sink_3_346(cv_source());  // { dg-error "" }
609     return 0;
610 }
611
612 three sink_3_347(volatile       A&);
613 four  sink_3_347(const volatile A&);
614 seven sink_3_347(volatile       A&&);
615
616 int test3_347()
617 {
618                    A a;
619     const          A ca = a; // { dg-error "deleted" }
620           volatile A va;
621     const volatile A cva = a; // { dg-error "deleted" }
622     sink_3_347(c_source());   // { dg-error "" }
623     sink_3_347(cv_source());  // { dg-error "" }
624     return 0;
625 }
626
627 three sink_3_356(volatile       A&);
628 five  sink_3_356(               A&&);
629 six   sink_3_356(const          A&&);
630
631 int test3_356()
632 {
633                    A a;
634     const          A ca = a; // { dg-error "deleted" }
635           volatile A va;
636     const volatile A cva = a; // { dg-error "deleted" }
637     sink_3_356(ca);             // { dg-error "" }
638     sink_3_356(cva);          // { dg-error "" }
639     sink_3_356(v_source());   // { dg-error "" }
640     sink_3_356(cv_source());  // { dg-error "" }
641     return 0;
642 }
643
644 three sink_3_357(volatile       A&);
645 five  sink_3_357(               A&&);
646 seven sink_3_357(volatile       A&&);
647
648 int test3_357()
649 {
650                    A a;
651     const          A ca = a; // { dg-error "deleted" }
652           volatile A va;
653     const volatile A cva = a; // { dg-error "deleted" }
654     sink_3_357(ca);           // { dg-error "" }
655     sink_3_357(cva);          // { dg-error "" }
656     sink_3_357(c_source());   // { dg-error "" }
657     sink_3_357(cv_source());  // { dg-error "" }
658     return 0;
659 }
660
661 three sink_3_358(volatile       A&);
662 five  sink_3_358(               A&&);
663 eight sink_3_358(const volatile A&&);
664
665 int test3_358()
666 {
667                    A a;
668     const          A ca = a; // { dg-error "deleted" }
669           volatile A va;
670     const volatile A cva = a; // { dg-error "deleted" }
671     sink_3_358(ca);             // { dg-error "" }
672     sink_3_358(cva);            // { dg-error "" }
673     return 0;
674 }
675
676 three sink_3_367(volatile       A&);
677 six   sink_3_367(const          A&&);
678 seven sink_3_367(volatile       A&&);
679
680 int test3_367()
681 {
682                    A a;
683     const          A ca = a; // { dg-error "deleted" }
684           volatile A va;
685     const volatile A cva = a; // { dg-error "deleted" }
686     sink_3_367(ca);             // { dg-error "" }
687     sink_3_367(cva);          // { dg-error "" }
688     sink_3_367(source());     // { dg-error "" }
689     sink_3_367(cv_source());  // { dg-error "" }
690     return 0;
691 }
692
693 three sink_3_368(volatile       A&);
694 six   sink_3_368(const          A&&);
695 eight sink_3_368(const volatile A&&);
696
697 int test3_368()
698 {
699                    A a;
700     const          A ca = a; // { dg-error "deleted" }
701           volatile A va;
702     const volatile A cva = a; // { dg-error "deleted" }
703     sink_3_368(ca);             // { dg-error "" }
704     sink_3_368(cva);            // { dg-error "" }
705     return 0;
706 }
707
708 three sink_3_378(volatile       A&);
709 seven sink_3_378(volatile       A&&);
710 eight sink_3_378(const volatile A&&);
711
712 int test3_378()
713 {
714                    A a;
715     const          A ca = a; // { dg-error "deleted" }
716           volatile A va;
717     const volatile A cva = a; // { dg-error "deleted" }
718     sink_3_378(ca);             // { dg-error "" }
719     sink_3_378(cva);            // { dg-error "" }
720     return 0;
721 }
722
723 four  sink_3_456(const volatile A&);
724 five  sink_3_456(               A&&);
725 six   sink_3_456(const          A&&);
726
727 int test3_456()
728 {
729                    A a;
730     const          A ca = a; // { dg-error "deleted" }
731           volatile A va;
732     const volatile A cva = a; // { dg-error "deleted" }
733     sink_3_456(v_source());   // { dg-error "" }
734     sink_3_456(cv_source());  // { dg-error "" }
735     return 0;
736 }
737
738 four  sink_3_457(const volatile A&);
739 five  sink_3_457(               A&&);
740 seven sink_3_457(volatile       A&&);
741
742 int test3_457()
743 {
744                    A a;
745     const          A ca = a; // { dg-error "deleted" }
746           volatile A va;
747     const volatile A cva = a; // { dg-error "deleted" }
748     sink_3_457(c_source());   // { dg-error "" }
749     sink_3_457(cv_source());  // { dg-error "" }
750     return 0;
751 }
752
753 four  sink_3_467(const volatile A&);
754 six   sink_3_467(const          A&&);
755 seven sink_3_467(volatile       A&&);
756
757 int test3_467()
758 {
759                    A a;
760     const          A ca = a; // { dg-error "deleted" }
761           volatile A va;
762     const volatile A cva = a; // { dg-error "deleted" }
763     sink_3_467(source());     // { dg-error "" }
764     sink_3_467(cv_source());  // { dg-error "" }
765     return 0;
766 }
767
768 five  sink_3_567(               A&&);
769 six   sink_3_567(const          A&&);
770 seven sink_3_567(volatile       A&&);
771
772 int test3_567()
773 {
774                    A a;
775     const          A ca = a; // { dg-error "deleted" }
776           volatile A va;
777     const volatile A cva = a; // { dg-error "deleted" }
778     sink_3_567(a);              // { dg-error "" }
779     sink_3_567(ca);             // { dg-error "" }
780     sink_3_567(va);             // { dg-error "" }
781     sink_3_567(cva);          // { dg-error "" }
782     sink_3_567(cv_source());  // { dg-error "" }
783     return 0;
784 }
785
786 five  sink_3_568(               A&&);
787 six   sink_3_568(const          A&&);
788 eight sink_3_568(const volatile A&&);
789
790 int test3_568()
791 {
792                    A a;
793     const          A ca = a; // { dg-error "deleted" }
794           volatile A va;
795     const volatile A cva = a; // { dg-error "deleted" }
796     sink_3_568(a);              // { dg-error "" }
797     sink_3_568(ca);             // { dg-error "" }
798     sink_3_568(va);             // { dg-error "" }
799     sink_3_568(cva);            // { dg-error "" }
800     return 0;
801 }
802
803 five  sink_3_578(               A&&);
804 seven sink_3_578(volatile       A&&);
805 eight sink_3_578(const volatile A&&);
806
807 int test3_578()
808 {
809                    A a;
810     const          A ca = a; // { dg-error "deleted" }
811           volatile A va;
812     const volatile A cva = a; // { dg-error "deleted" }
813     sink_3_578(a);              // { dg-error "" }
814     sink_3_578(ca);             // { dg-error "" }
815     sink_3_578(va);             // { dg-error "" }
816     sink_3_578(cva);            // { dg-error "" }
817     return 0;
818 }
819
820 six   sink_3_678(const          A&&);
821 seven sink_3_678(volatile       A&&);
822 eight sink_3_678(const volatile A&&);
823
824 int test3_678()
825 {
826                    A a;
827     const          A ca = a; // { dg-error "deleted" }
828           volatile A va;
829     const volatile A cva = a; // { dg-error "deleted" }
830     sink_3_678(a);          // { dg-error "" }
831     sink_3_678(ca);         // { dg-error "" }
832     sink_3_678(va);         // { dg-error "" }
833     sink_3_678(cva);        // { dg-error "" }
834     sink_3_678(source());   // { dg-error "" }
835     return 0;
836 }
837
838 int main()
839 {
840     return test3_123() + test3_125() + test3_126() + test3_127() +
841            test3_135() + test3_136() + test3_137() + test3_156() +
842            test3_157() + test3_167() + test3_234() + test3_235() +
843            test3_236() + test3_237() + test3_238() + test3_256() +
844            test3_257() + test3_267() + test3_356() + test3_357() +
845            test3_367() + test3_467() + test3_567() + test3_678();
846 }