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 234 235 236 237 238 239
|
#include <stddef.h>
class foo {
public:
foo (int);
foo (int, const char *);
foo (foo&);
~foo ();
void foofunc (int);
void foofunc (int, signed char *);
int ifoo;
const char *ccpfoo;
int overload1arg (void);
int overload1arg (char);
int overload1arg (signed char);
int overload1arg (unsigned char);
int overload1arg (short);
int overload1arg (unsigned short);
int overload1arg (int);
int overload1arg (unsigned int);
int overload1arg (long);
int overload1arg (unsigned long);
int overload1arg (float);
int overload1arg (double);
int overload1arg (int*);
int overload1arg (void*);
int overloadfnarg (void);
int overloadfnarg (int);
int overloadfnarg (int, int (*) (int));
int overloadargs (int a1);
int overloadargs (int a1, int a2);
int overloadargs (int a1, int a2, int a3);
int overloadargs (int a1, int a2, int a3, int a4);
int overloadargs (int a1, int a2, int a3, int a4, int a5);
int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6);
int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7);
int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8);
int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9);
int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8, int a9, int a10);
int overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8, int a9, int a10, int a11);
};
struct K {
static int staticoverload ();
static int staticoverload (int);
static int staticoverload (int, int);
};
namespace N {
int nsoverload () { return 1; }
int nsoverload (int x) { return x; }
int nsoverload (int x, int y) { return x + y; }
};
int intToChar (char c) { return 297; }
void marker1()
{}
// Now test how overloading and namespaces interact.
class dummyClass {};
dummyClass dummyInstance;
int overloadNamespace(int i)
{
return 1;
}
int overloadNamespace(dummyClass d)
{
return 2;
}
namespace XXX {
int overloadNamespace (char c)
{
return 3;
}
void marker2() {}
}
class A {};
class B: public A {};
class C: public B {};
class D: C {};
int bar (A) { return 11; }
int bar (B) { return 22; }
int intintfunc (int x) { return x; }
int main ()
{
char arg2 = 2;
signed char arg3 =3;
unsigned char arg4 =4;
short arg5 =5;
unsigned short arg6 =6;
int arg7 =7;
unsigned int arg8 =8;
long arg9 =9;
unsigned long arg10 =10;
float arg11 =100.0;
double arg12 = 200.0;
int arg13 = 200;
char arg14 = 'a';
A a;
B b;
C c;
D d;
bar (a);
bar (b);
bar (c);
char *str = (char *) "A";
foo foo_instance1(111);
foo foo_instance2(222, str);
foo foo_instance3(foo_instance2);
// Some calls to ensure all the functions are emitted.
K::staticoverload();
K::staticoverload(2);
K::staticoverload(2, 3);
N::nsoverload();
N::nsoverload(2);
N::nsoverload(2, 3);
overloadNamespace (1);
overloadNamespace (dummyInstance);
XXX::overloadNamespace ('a');
// Verify that intToChar should work:
intToChar(1);
marker1(); // marker1-returns-here
XXX::marker2(); // marker1-returns-here
return 0;
}
foo::foo (int i) { ifoo = i; ccpfoo = NULL; }
foo::foo (int i, const char *ccp) { ifoo = i; ccpfoo = ccp; }
foo::foo (foo& afoo) { ifoo = afoo.ifoo; ccpfoo = afoo.ccpfoo;}
foo::~foo () {}
/* Some functions to test overloading by varying one argument type. */
int foo::overload1arg (void) { return 1; }
int foo::overload1arg (char arg) { arg = 0; return 2;}
int foo::overload1arg (signed char arg) { arg = 0; return 3;}
int foo::overload1arg (unsigned char arg) { arg = 0; return 4;}
int foo::overload1arg (short arg) { arg = 0; return 5;}
int foo::overload1arg (unsigned short arg) { arg = 0; return 6;}
int foo::overload1arg (int arg) { arg = 0; return 7;}
int foo::overload1arg (unsigned int arg) { arg = 0; return 8;}
int foo::overload1arg (long arg) { arg = 0; return 9;}
int foo::overload1arg (unsigned long arg) { arg = 0; return 10;}
int foo::overload1arg (float arg) { arg = 0; return 11;}
int foo::overload1arg (double arg) { arg = 0; return 12;}
int foo::overload1arg (int* arg) { arg = 0; return 13;}
int foo::overload1arg (void* arg) { arg = 0; return 14;}
/* Test to see that we can explicitly request overloaded functions
with function pointers in the prototype. */
int foo::overloadfnarg (void) { return ifoo * 20; }
int foo::overloadfnarg (int arg) { arg = 0; return 13;}
int foo::overloadfnarg (int arg, int (*foo) (int)) { return foo(arg); }
/* Some functions to test overloading by varying argument count. */
int foo::overloadargs (int a1)
{ a1 = 0;
return 1;}
int foo::overloadargs (int a1, int a2)
{ a1 = a2 = 0;
return 2;}
int foo::overloadargs (int a1, int a2, int a3)
{ a1 = a2 = a3 = 0;
return 3;}
int foo::overloadargs (int a1, int a2, int a3, int a4)
{ a1 = a2 = a3 = a4 = 0;
return 4;}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5)
{ a1 = a2 = a3 = a4 = a5 = 0;
return 5;}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6)
{ a1 = a2 = a3 = a4 = a5 = a6 = 0;
return 6;}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7)
{ a1 = a2 = a3 = a4 = a5 = a6 = a7 = 0;
return 7;}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8)
{ a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = 0;
return 8;}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8, int a9)
{
a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = 0;
return 9;
}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8, int a9, int a10)
{ a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
a10 = 0; return 10;}
int foo::overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
int a8, int a9, int a10, int a11)
{ a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
a10 = a11 = 0; return 11;}
int K::staticoverload () { return 1; }
int K::staticoverload (int x) { return x; }
int K::staticoverload (int x, int y) { return x + y; }
|