1*b725ae77Skettenis #include <stddef.h>
2*b725ae77Skettenis
3*b725ae77Skettenis class foo {
4*b725ae77Skettenis public:
5*b725ae77Skettenis foo (int);
6*b725ae77Skettenis foo (int, const char *);
7*b725ae77Skettenis foo (foo&);
8*b725ae77Skettenis ~foo ();
9*b725ae77Skettenis
10*b725ae77Skettenis void operator * (foo&);
11*b725ae77Skettenis void operator % (foo&);
12*b725ae77Skettenis void operator - (foo&);
13*b725ae77Skettenis void operator >> (foo&);
14*b725ae77Skettenis void operator != (foo&);
15*b725ae77Skettenis void operator > (foo&);
16*b725ae77Skettenis void operator >= (foo&);
17*b725ae77Skettenis void operator | (foo&);
18*b725ae77Skettenis void operator && (foo&);
19*b725ae77Skettenis void operator ! (void);
20*b725ae77Skettenis void operator ++ (int);
21*b725ae77Skettenis void operator = (foo&);
22*b725ae77Skettenis void operator += (foo&);
23*b725ae77Skettenis void operator *= (foo&);
24*b725ae77Skettenis void operator %= (foo&);
25*b725ae77Skettenis void operator >>= (foo&);
26*b725ae77Skettenis void operator |= (foo&);
27*b725ae77Skettenis void operator , (foo&);
28*b725ae77Skettenis void operator / (foo&);
29*b725ae77Skettenis void operator + (foo&);
30*b725ae77Skettenis void operator << (foo&);
31*b725ae77Skettenis void operator == (foo&);
32*b725ae77Skettenis void operator < (foo&);
33*b725ae77Skettenis void operator <= (foo&);
34*b725ae77Skettenis void operator & (foo&);
35*b725ae77Skettenis void operator ^ (foo&);
36*b725ae77Skettenis void operator || (foo&);
37*b725ae77Skettenis void operator ~ (void);
38*b725ae77Skettenis void operator -- (int);
39*b725ae77Skettenis foo* operator -> (void);
40*b725ae77Skettenis void operator -= (foo&);
41*b725ae77Skettenis void operator /= (foo&);
42*b725ae77Skettenis void operator <<= (foo&);
43*b725ae77Skettenis void operator &= (foo&);
44*b725ae77Skettenis void operator ^= (foo&);
45*b725ae77Skettenis void operator ->* (foo&);
46*b725ae77Skettenis void operator [] (foo&);
47*b725ae77Skettenis void operator () (foo&);
48*b725ae77Skettenis void* operator new (size_t) throw ();
49*b725ae77Skettenis void operator delete (void *);
50*b725ae77Skettenis /**/ operator int ();
51*b725ae77Skettenis /**/ operator char* ();
52*b725ae77Skettenis
53*b725ae77Skettenis int foofunc (int); // forced to have int return type, which is required
54*b725ae77Skettenis int foofunc (int, signed char *); // forced to have int return type, which is required
55*b725ae77Skettenis int ifoo;
56*b725ae77Skettenis const char *ccpfoo;
57*b725ae77Skettenis };
58*b725ae77Skettenis
59*b725ae77Skettenis #ifdef usestubs
60*b725ae77Skettenis extern "C" {
61*b725ae77Skettenis void set_debug_traps();
62*b725ae77Skettenis void breakpoint();
63*b725ae77Skettenis };
64*b725ae77Skettenis #endif
65*b725ae77Skettenis
main()66*b725ae77Skettenis int main () {
67*b725ae77Skettenis #ifdef usestubs
68*b725ae77Skettenis set_debug_traps();
69*b725ae77Skettenis breakpoint();
70*b725ae77Skettenis #endif
71*b725ae77Skettenis int z=3;
72*b725ae77Skettenis }
73*b725ae77Skettenis
foo(int i)74*b725ae77Skettenis foo::foo (int i) { ifoo = i;}
foo(int i,const char * ccp)75*b725ae77Skettenis foo::foo (int i, const char *ccp) { ifoo = i; ccpfoo = ccp; }
foo(foo & afoo)76*b725ae77Skettenis foo::foo (foo& afoo) { afoo.ifoo = 0; }
~foo()77*b725ae77Skettenis foo::~foo () {}
78*b725ae77Skettenis
operator *(foo & afoo)79*b725ae77Skettenis void foo::operator * (foo& afoo) { afoo.ifoo = 0; }
operator %(foo & afoo)80*b725ae77Skettenis void foo::operator % (foo& afoo) { afoo.ifoo = 0; }
operator -(foo & afoo)81*b725ae77Skettenis void foo::operator - (foo& afoo) { afoo.ifoo = 0; }
operator >>(foo & afoo)82*b725ae77Skettenis void foo::operator >> (foo& afoo) { afoo.ifoo = 0; }
operator !=(foo & afoo)83*b725ae77Skettenis void foo::operator != (foo& afoo) { afoo.ifoo = 0; }
operator >(foo & afoo)84*b725ae77Skettenis void foo::operator > (foo& afoo) { afoo.ifoo = 0; }
operator >=(foo & afoo)85*b725ae77Skettenis void foo::operator >= (foo& afoo) { afoo.ifoo = 0; }
operator |(foo & afoo)86*b725ae77Skettenis void foo::operator | (foo& afoo) { afoo.ifoo = 0; }
operator &&(foo & afoo)87*b725ae77Skettenis void foo::operator && (foo& afoo) { afoo.ifoo = 0; }
operator !(void)88*b725ae77Skettenis void foo::operator ! (void) {}
operator ++(int ival)89*b725ae77Skettenis void foo::operator ++ (int ival) { ival = 0; }
operator =(foo & afoo)90*b725ae77Skettenis void foo::operator = (foo& afoo) { afoo.ifoo = 0; }
operator +=(foo & afoo)91*b725ae77Skettenis void foo::operator += (foo& afoo) { afoo.ifoo = 0; }
operator *=(foo & afoo)92*b725ae77Skettenis void foo::operator *= (foo& afoo) { afoo.ifoo = 0; }
operator %=(foo & afoo)93*b725ae77Skettenis void foo::operator %= (foo& afoo) { afoo.ifoo = 0; }
operator >>=(foo & afoo)94*b725ae77Skettenis void foo::operator >>= (foo& afoo) { afoo.ifoo = 0; }
operator |=(foo & afoo)95*b725ae77Skettenis void foo::operator |= (foo& afoo) { afoo.ifoo = 0; }
operator ,(foo & afoo)96*b725ae77Skettenis void foo::operator , (foo& afoo) { afoo.ifoo = 0; }
operator /(foo & afoo)97*b725ae77Skettenis void foo::operator / (foo& afoo) { afoo.ifoo = 0; }
operator +(foo & afoo)98*b725ae77Skettenis void foo::operator + (foo& afoo) { afoo.ifoo = 0; }
operator <<(foo & afoo)99*b725ae77Skettenis void foo::operator << (foo& afoo) { afoo.ifoo = 0; }
operator ==(foo & afoo)100*b725ae77Skettenis void foo::operator == (foo& afoo) { afoo.ifoo = 0; }
operator <(foo & afoo)101*b725ae77Skettenis void foo::operator < (foo& afoo) { afoo.ifoo = 0; }
operator <=(foo & afoo)102*b725ae77Skettenis void foo::operator <= (foo& afoo) { afoo.ifoo = 0; }
operator &(foo & afoo)103*b725ae77Skettenis void foo::operator & (foo& afoo) { afoo.ifoo = 0; }
operator ^(foo & afoo)104*b725ae77Skettenis void foo::operator ^ (foo& afoo) { afoo.ifoo = 0; }
operator ||(foo & afoo)105*b725ae77Skettenis void foo::operator || (foo& afoo) { afoo.ifoo = 0; }
operator ~(void)106*b725ae77Skettenis void foo::operator ~ (void) {}
operator --(int ival)107*b725ae77Skettenis void foo::operator -- (int ival) { ival = 0; }
operator ->(void)108*b725ae77Skettenis foo* foo::operator -> (void) {return this;}
operator -=(foo & afoo)109*b725ae77Skettenis void foo::operator -= (foo& afoo) { afoo.ifoo = 0; }
operator /=(foo & afoo)110*b725ae77Skettenis void foo::operator /= (foo& afoo) { afoo.ifoo = 0; }
operator <<=(foo & afoo)111*b725ae77Skettenis void foo::operator <<= (foo& afoo) { afoo.ifoo = 0; }
operator &=(foo & afoo)112*b725ae77Skettenis void foo::operator &= (foo& afoo) { afoo.ifoo = 0; }
operator ^=(foo & afoo)113*b725ae77Skettenis void foo::operator ^= (foo& afoo) { afoo.ifoo = 0; }
operator ->*(foo & afoo)114*b725ae77Skettenis void foo::operator ->* (foo& afoo) { afoo.ifoo = 0; }
operator [](foo & afoo)115*b725ae77Skettenis void foo::operator [] (foo& afoo) { afoo.ifoo = 0; }
operator ()(foo & afoo)116*b725ae77Skettenis void foo::operator () (foo& afoo) { afoo.ifoo = 0; }
operator new(size_t ival)117*b725ae77Skettenis void* foo::operator new (size_t ival) throw () { ival = 0; return 0; }
operator delete(void * ptr)118*b725ae77Skettenis void foo::operator delete (void *ptr) { ptr = 0; }
operator int()119*b725ae77Skettenis /**/ foo::operator int () { return 0; }
operator char*()120*b725ae77Skettenis /**/ foo::operator char* () { return 0; }
121*b725ae77Skettenis
122*b725ae77Skettenis /* Some functions to test overloading by varying one argument type. */
123*b725ae77Skettenis
overload1arg(void)124*b725ae77Skettenis void overload1arg (void) { }
overload1arg(char arg)125*b725ae77Skettenis void overload1arg (char arg) { arg = 0; }
overload1arg(signed char arg)126*b725ae77Skettenis void overload1arg (signed char arg) { arg = 0; }
overload1arg(unsigned char arg)127*b725ae77Skettenis void overload1arg (unsigned char arg) { arg = 0; }
overload1arg(short arg)128*b725ae77Skettenis void overload1arg (short arg) { arg = 0; }
overload1arg(unsigned short arg)129*b725ae77Skettenis void overload1arg (unsigned short arg) { arg = 0; }
overload1arg(int arg)130*b725ae77Skettenis void overload1arg (int arg) { arg = 0; }
overload1arg(unsigned int arg)131*b725ae77Skettenis void overload1arg (unsigned int arg) { arg = 0; }
overload1arg(long arg)132*b725ae77Skettenis void overload1arg (long arg) { arg = 0; }
overload1arg(unsigned long arg)133*b725ae77Skettenis void overload1arg (unsigned long arg) { arg = 0; }
overload1arg(float arg)134*b725ae77Skettenis void overload1arg (float arg) { arg = 0; }
overload1arg(double arg)135*b725ae77Skettenis void overload1arg (double arg) { arg = 0; }
136*b725ae77Skettenis
137*b725ae77Skettenis /* Some functions to test overloading by varying argument count. */
138*b725ae77Skettenis
overloadargs(int a1)139*b725ae77Skettenis void overloadargs (int a1) { a1 = 0; }
overloadargs(int a1,int a2)140*b725ae77Skettenis void overloadargs (int a1, int a2) { a1 = a2 = 0; }
overloadargs(int a1,int a2,int a3)141*b725ae77Skettenis void overloadargs (int a1, int a2, int a3) { a1 = a2 = a3 = 0; }
overloadargs(int a1,int a2,int a3,int a4)142*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4)
143*b725ae77Skettenis { a1 = a2 = a3 = a4 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5)144*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5)
145*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6)146*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6)
147*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = a6 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6,int a7)148*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7)
149*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = a6 = a7 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8)150*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
151*b725ae77Skettenis int a8)
152*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9)153*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
154*b725ae77Skettenis int a8, int a9)
155*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10)156*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
157*b725ae77Skettenis int a8, int a9, int a10)
158*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
159*b725ae77Skettenis a10 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9,int a10,int a11)160*b725ae77Skettenis void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
161*b725ae77Skettenis int a8, int a9, int a10, int a11)
162*b725ae77Skettenis { a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
163*b725ae77Skettenis a10 = a11 == 0; }
164*b725ae77Skettenis
165*b725ae77Skettenis /* Some hairy function definitions.
166*b725ae77Skettenis Use typedefs to help maintain sanity. */
167*b725ae77Skettenis
168*b725ae77Skettenis typedef int (*PFPc_i)(char *);
169*b725ae77Skettenis typedef short (*PFPl_s)(long *);
170*b725ae77Skettenis typedef short (*PFPc_s)(char *);
171*b725ae77Skettenis typedef int (*PFl_i)(long);
172*b725ae77Skettenis typedef PFl_i (*PFPc_PFl_i)(char *);
173*b725ae77Skettenis typedef PFl_i (*PFPi_PFl_i)(int *);
174*b725ae77Skettenis typedef PFl_i (*PFPFPc_i_PFl_i)(PFPc_i);
175*b725ae77Skettenis typedef PFl_i (*PFs_PFl_i)(short);
176*b725ae77Skettenis typedef int (*PFPFPl_s_i)(PFPl_s);
177*b725ae77Skettenis typedef int (*PFPFPc_s_i)(PFPc_s);
178*b725ae77Skettenis
hairyfunc1(int arg)179*b725ae77Skettenis PFs_PFl_i hairyfunc1 (int arg) { arg = 0; return 0; }
hairyfunc2(PFPc_i arg)180*b725ae77Skettenis int hairyfunc2 (PFPc_i arg) { arg = 0; return 0; }
hairyfunc3(PFPFPl_s_i arg)181*b725ae77Skettenis int hairyfunc3 (PFPFPl_s_i arg) { arg = 0; return 0; }
hairyfunc4(PFPFPc_s_i arg)182*b725ae77Skettenis int hairyfunc4 (PFPFPc_s_i arg) { arg = 0; return 0; }
hairyfunc5(PFPc_PFl_i arg)183*b725ae77Skettenis int hairyfunc5 (PFPc_PFl_i arg) { arg = 0; return 0; }
hairyfunc6(PFPi_PFl_i arg)184*b725ae77Skettenis int hairyfunc6 (PFPi_PFl_i arg) { arg = 0; return 0; }
hairyfunc7(PFPFPc_i_PFl_i arg)185*b725ae77Skettenis int hairyfunc7 (PFPFPc_i_PFl_i arg) { arg = 0; return 0; }
186*b725ae77Skettenis
187*b725ae77Skettenis /* gdb has two demanglers (one for g++ 2.95, one for g++ 3).
188*b725ae77Skettenis These marker functions help me figure out which demangler is in use. */
189*b725ae77Skettenis
dm_type_char_star(char * p)190*b725ae77Skettenis char * dm_type_char_star (char * p) { return p; }
dm_type_foo_ref(foo & foo)191*b725ae77Skettenis int dm_type_foo_ref (foo & foo) { return foo.ifoo; }
dm_type_int_star(int * p)192*b725ae77Skettenis int * dm_type_int_star (int * p) { return p; }
dm_type_long_star(long * p)193*b725ae77Skettenis long * dm_type_long_star (long * p) { return p; }
dm_type_unsigned_int(unsigned int i)194*b725ae77Skettenis int dm_type_unsigned_int (unsigned int i) { return i; }
dm_type_void(void)195*b725ae77Skettenis int dm_type_void (void) { return 0; }
dm_type_void_star(void * p)196*b725ae77Skettenis void * dm_type_void_star (void * p) { return p; }
197