1 /* Ltrace Test : demangle.cpp
2 Objectives : Verify that ltrace can demangle C++ symbols.
3
4 This file was written by Yao Qi <qiyao@cn.ibm.com>. */
5
6 #include<stddef.h>
7 #include"demangle.h"
8
9 /* Number of arguments */
10 extern int Fi_i(int);
11 extern int Fi_s (short);
12 extern int Fii_i(int , int);
13 extern int Fiii_i(int, int, int);
14 extern int Fie_i(int bar, ...);
15
16 /* Return types */
17 extern void Fv_v(void);
18 extern char Fv_c(void);
19 extern signed char Fv_Sc(void);
20 extern unsigned char Fv_Uc(void);
21 extern short Fv_s(void);
22 extern unsigned short Fv_Us(void);
23 extern int Fv_i(void);
24 extern const int Fv_Ci(void);
25 extern unsigned int Fv_Ui(void);
26 extern volatile int Fv_Vi(void);
27 extern long Fv_l(void);
28 extern unsigned long Fv_Ul(void);
29 extern float Fv_f(void) ;
30 extern double Fv_g(void);
31 extern long double Fv_Lg(void);
32
33
34 /* Pointers */
35 extern void * Fv_Pv(void);
36 extern void ** Fv_PPv(void);
37
38 /* References */
39 extern int& Fv_Ri(void);
40
41 /* Argument types */
42 extern int FPi_i(int *a);
43 extern int FA10_i_i(int a[10]) ;
44 extern int Fc_i(char bar);
45 extern int Ff_i(float bar);
46 extern int Fg_i(double bar);
47
48 /* Function pointers */
49 typedef int (*x)(int);
50 typedef int (*y)(short);
51
52 extern int Fx_i(x);
53 extern int Fxx_i(x fnptr, x fnptr2);
54 extern int Fxxx_i(x fnptr, x fnptr2, x fnptr3);
55 extern int Fxxi_i(x fnptr, x fnptr2, x fnptr3, int i);
56 extern int Fxix_i(x fnptr, int i, x fnptr3);
57 extern int Fxyxy_i(x fnptr, y fnptr2, x fnptr3, y fnptr4);
58
59
60 extern void Fmyclass_v(myclass m);
61 extern void Fmxmx_v(myclass arg1, x arg2, myclass arg3, x arg4);
62
main()63 int main ()
64 {
65 int i;
66
67 i = Fi_i (0);
68 i = Fii_i (0,0);
69 i = Fiii_i (0,0,0);
70 i = Fie_i (0);
71
72 Fv_v ();
73 Fv_c ();
74 Fv_Sc ();
75 Fv_Uc ();
76 Fv_s ();
77 Fv_Us ();
78 Fv_i ();
79 Fv_Ci ();
80 Fv_Ui ();
81 Fv_Vi ();
82 Fv_l ();
83 Fv_Ul ();
84 Fv_f ();
85 Fv_g ();
86 Fv_Lg ();
87
88 Fv_Pv ();
89 Fv_PPv ();
90
91 Fv_Ri ();
92
93 FPi_i (&i);
94 FA10_i_i (&i);
95 Fc_i ('a');
96 Ff_i (1.1f);
97 Fg_i (1.1);
98
99 Fx_i (Fi_i);
100 Fxx_i (Fi_i, Fi_i);
101 Fxxx_i (Fi_i, Fi_i, Fi_i);
102 Fxxi_i (Fi_i, Fi_i, Fi_i, 0);
103 Fxyxy_i (Fi_i, Fi_s, Fi_i, Fi_s);
104
105 myclass a,c;
106 myclass* b;
107
108 a.Fi_i (0);
109 a.Fis_i (0);
110 a++;
111 c = a + 2;
112
113 nested n;
114 n.Fi_i (0);
115
116 b = (myclass*) new myclass(0);
117 delete (b);
118 Fmyclass_v (a);
119
120 return 0;
121 }
122