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 new[]  (size_t) throw ();
50   void  operator delete (void *);
51   void  operator delete[] (void *);
52   /**/  operator int    ();
53   /**/  operator char*  ();
54 
55   int foofunc (int); // forced to have int return type, which is required
56   int foofunc (int, signed char *); // forced to have int return type, which is required
57   int ifoo;
58   const char *ccpfoo;
59 };
60 
main()61 int main () {
62    int z=3;
63 
64    return 0;
65 }
66 
foo(int i)67 foo::foo  (int i)                  { ifoo = i;}
foo(int i,const char * ccp)68 foo::foo  (int i, const char *ccp) { ifoo = i; ccpfoo = ccp; }
foo(foo & afoo)69 foo::foo  (foo& afoo)              { afoo.ifoo = 0; }
~foo()70 foo::~foo ()                       {}
71 
operator *(foo & afoo)72 void  foo::operator *      (foo& afoo) { afoo.ifoo = 0; }
operator %(foo & afoo)73 void  foo::operator %      (foo& afoo) { afoo.ifoo = 0; }
operator -(foo & afoo)74 void  foo::operator -      (foo& afoo) { afoo.ifoo = 0; }
operator >>(foo & afoo)75 void  foo::operator >>     (foo& afoo) { afoo.ifoo = 0; }
operator !=(foo & afoo)76 void  foo::operator !=     (foo& afoo) { afoo.ifoo = 0; }
operator >(foo & afoo)77 void  foo::operator >      (foo& afoo) { afoo.ifoo = 0; }
operator >=(foo & afoo)78 void  foo::operator >=     (foo& afoo) { afoo.ifoo = 0; }
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 !(void)81 void  foo::operator !      (void) {}
operator ++(int ival)82 void  foo::operator ++     (int ival) { ival = 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 |=(foo & afoo)88 void  foo::operator |=     (foo& afoo) { afoo.ifoo = 0; }
operator ,(foo & afoo)89 void  foo::operator ,      (foo& afoo) { afoo.ifoo = 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 ~(void)99 void  foo::operator ~      (void) {}
operator --(int ival)100 void  foo::operator --     (int ival) { ival = 0; }
operator ->(void)101 foo*  foo::operator ->     (void) {return this;}
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 ^=(foo & afoo)106 void  foo::operator ^=     (foo& afoo) { afoo.ifoo = 0; }
operator ->*(foo & afoo)107 void  foo::operator ->*    (foo& afoo) { afoo.ifoo = 0; }
operator [](foo & afoo)108 void  foo::operator []     (foo& afoo) { afoo.ifoo = 0; }
operator ()(foo & afoo)109 void  foo::operator ()     (foo& afoo) { afoo.ifoo = 0; }
operator new(size_t ival)110 void* foo::operator new    (size_t ival) throw () { ival = 0; return 0; }
operator new[](size_t ival)111 void* foo::operator new[]    (size_t ival) throw () { ival = 0; return 0; }
operator delete(void * ptr)112 void  foo::operator delete (void *ptr) { ptr = 0; }
operator delete[](void * ptr)113 void  foo::operator delete[] (void *ptr) { ptr = 0; }
operator int()114 /**/  foo::operator int    () { return 0; }
operator char*()115 /**/  foo::operator char*  () { return 0; }
116 
117 /* Some functions to test overloading by varying one argument type. */
118 
overload1arg(void)119 void overload1arg (void)		{          }
overload1arg(char arg)120 void overload1arg (char arg)		{ arg = 0; }
overload1arg(signed char arg)121 void overload1arg (signed char arg)	{ arg = 0; }
overload1arg(unsigned char arg)122 void overload1arg (unsigned char arg)	{ arg = 0; }
overload1arg(short arg)123 void overload1arg (short arg)		{ arg = 0; }
overload1arg(unsigned short arg)124 void overload1arg (unsigned short arg)	{ arg = 0; }
overload1arg(int arg)125 void overload1arg (int arg)		{ arg = 0; }
overload1arg(unsigned int arg)126 void overload1arg (unsigned int arg)	{ arg = 0; }
overload1arg(long arg)127 void overload1arg (long arg)		{ arg = 0; }
overload1arg(unsigned long arg)128 void overload1arg (unsigned long arg)	{ arg = 0; }
overload1arg(float arg)129 void overload1arg (float arg)		{ arg = 0; }
overload1arg(double arg)130 void overload1arg (double arg)		{ arg = 0; }
131 
132 /* Some functions to test overloading by varying argument count. */
133 
overloadargs(int a1)134 void overloadargs (int a1)				{ a1 = 0; }
overloadargs(int a1,int a2)135 void overloadargs (int a1, int a2)			{ a1 = a2 = 0; }
overloadargs(int a1,int a2,int a3)136 void overloadargs (int a1, int a2, int a3)		{ a1 = a2 = a3 = 0; }
overloadargs(int a1,int a2,int a3,int a4)137 void overloadargs (int a1, int a2, int a3, int a4)
138 			{ a1 = a2 = a3 = a4 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5)139 void overloadargs (int a1, int a2, int a3, int a4, int a5)
140 			{ a1 = a2 = a3 = a4 = a5 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6)141 void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6)
142 			{ a1 = a2 = a3 = a4 = a5 = a6 = 0; }
overloadargs(int a1,int a2,int a3,int a4,int a5,int a6,int a7)143 void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7)
144 			{ 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)145 void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
146 		   int a8)
147 			{ 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)148 void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
149 		   int a8, int a9)
150 			{ 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)151 void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
152 		   int a8, int a9, int a10)
153 			{ a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
154 			  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)155 void overloadargs (int a1, int a2, int a3, int a4, int a5, int a6, int a7,
156 		   int a8, int a9, int a10, int a11)
157 			{ a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 =
158 			  a10 = a11 == 0; }
159 
160 /* Some hairy function definitions.
161    Use typedefs to help maintain sanity. */
162 
163 typedef int   (*PFPc_i)(char *);
164 typedef short (*PFPl_s)(long *);
165 typedef short (*PFPc_s)(char *);
166 typedef int   (*PFl_i)(long);
167 typedef PFl_i (*PFPc_PFl_i)(char *);
168 typedef PFl_i (*PFPi_PFl_i)(int *);
169 typedef PFl_i (*PFPFPc_i_PFl_i)(PFPc_i);
170 typedef PFl_i (*PFs_PFl_i)(short);
171 typedef int   (*PFPFPl_s_i)(PFPl_s);
172 typedef int   (*PFPFPc_s_i)(PFPc_s);
173 
hairyfunc1(int arg)174 PFs_PFl_i hairyfunc1 (int arg)			{ arg = 0; return 0; }
hairyfunc2(PFPc_i arg)175 int       hairyfunc2 (PFPc_i arg)		{ arg = 0; return 0; }
hairyfunc3(PFPFPl_s_i arg)176 int	  hairyfunc3 (PFPFPl_s_i arg)		{ arg = 0; return 0; }
hairyfunc4(PFPFPc_s_i arg)177 int	  hairyfunc4 (PFPFPc_s_i arg)		{ arg = 0; return 0; }
hairyfunc5(PFPc_PFl_i arg)178 int	  hairyfunc5 (PFPc_PFl_i arg)		{ arg = 0; return 0; }
hairyfunc6(PFPi_PFl_i arg)179 int	  hairyfunc6 (PFPi_PFl_i arg)		{ arg = 0; return 0; }
hairyfunc7(PFPFPc_i_PFl_i arg)180 int	  hairyfunc7 (PFPFPc_i_PFl_i arg)	{ arg = 0; return 0; }
181 
182 /* gdb has two demanglers (one for g++ 2.95, one for g++ 3).
183    These marker functions help me figure out which demangler is in use. */
184 
dm_type_char_star(char * p)185 char *	dm_type_char_star (char * p)		{ return p; }
dm_type_foo_ref(foo & foo)186 int	dm_type_foo_ref (foo & foo)		{ return foo.ifoo; }
dm_type_int_star(int * p)187 int *	dm_type_int_star (int * p)		{ return p; }
dm_type_long_star(long * p)188 long *	dm_type_long_star (long * p)		{ return p; }
dm_type_short(short i)189 int	dm_type_short (short i)			{ return i; }
dm_type_long(long i)190 int	dm_type_long (long i)			{ return i; }
dm_type_unsigned_int(unsigned int i)191 int	dm_type_unsigned_int (unsigned int i)	{ return i; }
dm_type_unsigned_short(unsigned short i)192 int	dm_type_unsigned_short (unsigned short i)	{ return i; }
dm_type_unsigned_long(unsigned long i)193 int	dm_type_unsigned_long (unsigned long i)	{ return i; }
dm_type_void(void)194 int	dm_type_void (void)			{ return 0; }
dm_type_void_star(void * p)195 void *	dm_type_void_star (void * p)		{ return p; }
196 typedef int myint;
dm_type_typedef(myint i)197 int	dm_type_typedef (myint i)		{ return i; }
198