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