annotate gcc/testsuite/g++.dg/cpp0x/ref-qual19.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 // PR c++/87109
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-do run { target c++11 } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 #include <utility>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 struct C { int i; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 struct D { int i; };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 struct A {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 int j;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 operator C() & { return { 1 }; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 operator C() && { return { 2 }; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 struct B : public A {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 operator D() & { return { 3 }; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 operator D() && { return { 4 }; }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 f (A a)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 return a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 f2 (A a)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 return std::move (a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 f3 ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 A a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 return a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 f4 ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 A a;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 return std::move (a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 C
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 f5 ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 return A();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 f6 (B b)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 return b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 f7 (B b)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 return std::move (b);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 f8 ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 B b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 return b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 f9 ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 B b;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 return std::move (b);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 D
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 f10 ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 return B();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 main ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 C c1 = f (A());
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 if (c1.i != 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 C c2 = f2 (A());
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 if (c2.i != 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 C c3 = f3 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 if (c3.i != 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 C c4 = f4 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 if (c4.i != 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 C c5 = f5 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 if (c5.i != 2)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 D c6 = f6 (B());
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 if (c6.i != 4)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 D c7 = f7 (B());
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 if (c7.i != 4)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 D c8 = f8 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 if (c8.i != 4)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 D c9 = f9 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
112 if (c9.i != 4)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
113 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
114 D c10 = f10 ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
115 if (c10.i != 4)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
116 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
117 }