1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
|
// I, Howard Hinnant, hereby place this code in the public domain.
// Test overload resolution among reference types
// { dg-do compile { target c++11 } }
// { dg-skip-if "packed attribute missing for struct one/three/five/seven" { "epiphany-*-*" } }
template <bool> struct sa;
template <> struct sa<true> {};
struct one {long x[1];};
struct two {long x[2];};
struct three {long x[3];};
struct four {long x[4];};
struct five {long x[5];};
struct six {long x[6];};
struct seven {long x[7];};
struct eight {long x[8];};
struct A
{
A();
A(const volatile A&&);
};
A source();
const A c_source();
volatile A v_source();
const volatile A cv_source();
// 7 at a time
one sink_7_1234567( A&);
two sink_7_1234567(const A&);
three sink_7_1234567(volatile A&);
four sink_7_1234567(const volatile A&);
five sink_7_1234567( A&&);
six sink_7_1234567(const A&&);
seven sink_7_1234567(volatile A&&);
int test7_1234567()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1234567(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1234567(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_1234567(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_1234567(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_1234567(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_1234567(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_1234567(v_source())) == 7 * sizeof(long)> t7;
return 0;
}
one sink_7_1234568( A&);
two sink_7_1234568(const A&);
three sink_7_1234568(volatile A&);
four sink_7_1234568(const volatile A&);
five sink_7_1234568( A&&);
six sink_7_1234568(const A&&);
eight sink_7_1234568(const volatile A&&);
int test7_1234568()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1234568(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1234568(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_1234568(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_1234568(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_1234568(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_1234568(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_1234568(v_source())) == 8 * sizeof(long)> t7;
sa<sizeof(sink_7_1234568(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
one sink_7_1234578( A&);
two sink_7_1234578(const A&);
three sink_7_1234578(volatile A&);
four sink_7_1234578(const volatile A&);
five sink_7_1234578( A&&);
seven sink_7_1234578(volatile A&&);
eight sink_7_1234578(const volatile A&&);
int test7_1234578()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1234578(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1234578(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_1234578(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_1234578(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_1234578(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_1234578(c_source())) == 8 * sizeof(long)> t6;
sa<sizeof(sink_7_1234578(v_source())) == 7 * sizeof(long)> t7;
sa<sizeof(sink_7_1234578(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
one sink_7_1234678( A&);
two sink_7_1234678(const A&);
three sink_7_1234678(volatile A&);
four sink_7_1234678(const volatile A&);
six sink_7_1234678(const A&&);
seven sink_7_1234678(volatile A&&);
eight sink_7_1234678(const volatile A&&);
int test7_1234678()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1234678(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1234678(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_1234678(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_1234678(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_1234678(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_1234678(v_source())) == 7 * sizeof(long)> t7;
sa<sizeof(sink_7_1234678(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
one sink_7_1235678( A&);
two sink_7_1235678(const A&);
three sink_7_1235678(volatile A&);
five sink_7_1235678( A&&);
six sink_7_1235678(const A&&);
seven sink_7_1235678(volatile A&&);
eight sink_7_1235678(const volatile A&&);
int test7_1235678()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1235678(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1235678(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_1235678(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_1235678(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_1235678(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_1235678(v_source())) == 7 * sizeof(long)> t7;
sa<sizeof(sink_7_1235678(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
one sink_7_1245678( A&);
two sink_7_1245678(const A&);
four sink_7_1245678(const volatile A&);
five sink_7_1245678( A&&);
six sink_7_1245678(const A&&);
seven sink_7_1245678(volatile A&&);
eight sink_7_1245678(const volatile A&&);
int test7_1245678()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1245678(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1245678(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_1245678(va)) == 4 * sizeof(long)> t3;
sa<sizeof(sink_7_1245678(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_1245678(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_1245678(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_1245678(v_source())) == 7 * sizeof(long)> t7;
sa<sizeof(sink_7_1245678(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
one sink_7_1345678( A&);
three sink_7_1345678(volatile A&);
four sink_7_1345678(const volatile A&);
five sink_7_1345678( A&&);
six sink_7_1345678(const A&&);
seven sink_7_1345678(volatile A&&);
eight sink_7_1345678(const volatile A&&);
int test7_1345678()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_1345678(a)) == 1 * sizeof(long)> t1;
sa<sizeof(sink_7_1345678(ca)) == 4 * sizeof(long)> t2;
sa<sizeof(sink_7_1345678(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_1345678(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_1345678(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_1345678(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_1345678(v_source())) == 7 * sizeof(long)> t7;
sa<sizeof(sink_7_1345678(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
two sink_7_2345678(const A&);
three sink_7_2345678(volatile A&);
four sink_7_2345678(const volatile A&);
five sink_7_2345678( A&&);
six sink_7_2345678(const A&&);
seven sink_7_2345678(volatile A&&);
eight sink_7_2345678(const volatile A&&);
int test7_2345678()
{
A a;
const A ca;
volatile A va;
const volatile A cva;
sa<sizeof(sink_7_2345678(ca)) == 2 * sizeof(long)> t2;
sa<sizeof(sink_7_2345678(va)) == 3 * sizeof(long)> t3;
sa<sizeof(sink_7_2345678(cva)) == 4 * sizeof(long)> t4;
sa<sizeof(sink_7_2345678(source())) == 5 * sizeof(long)> t5;
sa<sizeof(sink_7_2345678(c_source())) == 6 * sizeof(long)> t6;
sa<sizeof(sink_7_2345678(v_source())) == 7 * sizeof(long)> t7;
sa<sizeof(sink_7_2345678(cv_source())) == 8 * sizeof(long)> t8;
return 0;
}
int main()
{
return test7_1234567() + test7_1234568() + test7_1234578() + test7_1234678() +
test7_1235678() + test7_1245678() + test7_1345678() + test7_2345678();
}
|