]>
Commit | Line | Data |
---|---|---|
8af2fec4 RY |
1 | // I, Howard Hinnant, hereby place this code in the public domain. |
2 | ||
e7f1930f | 3 | // Test overload resolution among reference types |
8af2fec4 | 4 | |
4b2e63de | 5 | // { dg-do compile { target c++11 } } |
4f4b0ab8 | 6 | // { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } } |
c74459ea | 7 | // { dg-additional-options "-fno-ipa-icf" } |
8af2fec4 RY |
8 | |
9 | template <bool> struct sa; | |
10 | template <> struct sa<true> {}; | |
11 | ||
41f3efb5 UB |
12 | struct one {long x[1];}; |
13 | struct two {long x[2];}; | |
14 | struct three {long x[3];}; | |
15 | struct four {long x[4];}; | |
16 | struct five {long x[5];}; | |
17 | struct six {long x[6];}; | |
18 | struct seven {long x[7];}; | |
19 | struct eight {long x[8];}; | |
8af2fec4 RY |
20 | |
21 | struct A | |
22 | { | |
23 | A(); | |
24 | A(const volatile A&&); | |
25 | }; | |
26 | ||
27 | A source(); | |
28 | const A c_source(); | |
8a902edb MP |
29 | volatile A v_source(); // { dg-warning "deprecated" "" { target c++2a } } |
30 | const volatile A cv_source(); // { dg-warning "deprecated" "" { target c++2a } } | |
8af2fec4 RY |
31 | |
32 | // 1 at a time | |
33 | ||
34 | one sink_1_1( A&); | |
35 | ||
36 | int test1_1() | |
37 | { | |
38 | A a; | |
d758e847 | 39 | const A ca; |
8af2fec4 | 40 | volatile A va; |
d758e847 | 41 | const volatile A cva; |
41f3efb5 | 42 | sa<sizeof(sink_1_1(a)) == 1 * sizeof(long)> t1; |
8af2fec4 RY |
43 | return 0; |
44 | } | |
45 | ||
46 | two sink_1_2(const A&); | |
47 | ||
48 | int test1_2() | |
49 | { | |
50 | A a; | |
d758e847 | 51 | const A ca; |
8af2fec4 | 52 | volatile A va; |
d758e847 | 53 | const volatile A cva; |
41f3efb5 UB |
54 | sa<sizeof(sink_1_2(a)) == 2 * sizeof(long)> t1; |
55 | sa<sizeof(sink_1_2(ca)) == 2 * sizeof(long)> t2; | |
56 | sa<sizeof(sink_1_2(source())) == 2 * sizeof(long)> t5; | |
57 | sa<sizeof(sink_1_2(c_source())) == 2 * sizeof(long)> t6; | |
8af2fec4 RY |
58 | return 0; |
59 | } | |
60 | ||
61 | three sink_1_3(volatile A&); | |
62 | ||
63 | int test1_3() | |
64 | { | |
65 | A a; | |
d758e847 | 66 | const A ca; |
8af2fec4 | 67 | volatile A va; |
d758e847 | 68 | const volatile A cva; |
41f3efb5 UB |
69 | sa<sizeof(sink_1_3(a)) == 3 * sizeof(long)> t1; |
70 | sa<sizeof(sink_1_3(va)) == 3 * sizeof(long)> t3; | |
8af2fec4 RY |
71 | return 0; |
72 | } | |
73 | ||
74 | four sink_1_4(const volatile A&); | |
75 | ||
76 | int test1_4() | |
77 | { | |
78 | A a; | |
d758e847 | 79 | const A ca; |
8af2fec4 | 80 | volatile A va; |
d758e847 | 81 | const volatile A cva; |
41f3efb5 UB |
82 | sa<sizeof(sink_1_4(a)) == 4 * sizeof(long)> t1; |
83 | sa<sizeof(sink_1_4(ca)) == 4 * sizeof(long)> t2; | |
84 | sa<sizeof(sink_1_4(va)) == 4 * sizeof(long)> t3; | |
85 | sa<sizeof(sink_1_4(cva)) == 4 * sizeof(long)> t4; | |
8af2fec4 RY |
86 | return 0; |
87 | } | |
88 | ||
89 | five sink_1_5( A&&); | |
90 | ||
91 | int test1_5() | |
92 | { | |
93 | A a; | |
d758e847 | 94 | const A ca; |
8af2fec4 | 95 | volatile A va; |
d758e847 | 96 | const volatile A cva; |
41f3efb5 | 97 | sa<sizeof(sink_1_5(source())) == 5 * sizeof(long)> t5; |
8af2fec4 RY |
98 | return 0; |
99 | } | |
100 | ||
101 | six sink_1_6(const A&&); | |
102 | ||
103 | int test1_6() | |
104 | { | |
105 | A a; | |
d758e847 | 106 | const A ca; |
8af2fec4 | 107 | volatile A va; |
d758e847 | 108 | const volatile A cva; |
41f3efb5 UB |
109 | sa<sizeof(sink_1_6(source())) == 6 * sizeof(long)> t5; |
110 | sa<sizeof(sink_1_6(c_source())) == 6 * sizeof(long)> t6; | |
8af2fec4 RY |
111 | return 0; |
112 | } | |
113 | ||
114 | seven sink_1_7(volatile A&&); | |
115 | ||
116 | int test1_7() | |
117 | { | |
118 | A a; | |
d758e847 | 119 | const A ca; |
8af2fec4 | 120 | volatile A va; |
d758e847 | 121 | const volatile A cva; |
41f3efb5 UB |
122 | sa<sizeof(sink_1_7(source())) == 7 * sizeof(long)> t5; |
123 | sa<sizeof(sink_1_7(v_source())) == 7 * sizeof(long)> t7; | |
8af2fec4 RY |
124 | return 0; |
125 | } | |
126 | ||
127 | eight sink_1_8(const volatile A&&); | |
128 | ||
129 | int test1_8() | |
130 | { | |
131 | A a; | |
d758e847 | 132 | const A ca; |
8af2fec4 | 133 | volatile A va; |
d758e847 | 134 | const volatile A cva; |
41f3efb5 UB |
135 | sa<sizeof(sink_1_8(source())) == 8 * sizeof(long)> t5; |
136 | sa<sizeof(sink_1_8(c_source())) == 8 * sizeof(long)> t6; | |
137 | sa<sizeof(sink_1_8(v_source())) == 8 * sizeof(long)> t7; | |
138 | sa<sizeof(sink_1_8(cv_source())) == 8 * sizeof(long)> t8; | |
8af2fec4 RY |
139 | return 0; |
140 | } | |
141 | ||
142 | int main() | |
143 | { | |
144 | return test1_1() + test1_2() + test1_3() + test1_4() + | |
145 | test1_5() + test1_6() + test1_7() + test1_8(); | |
146 | } |