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 */
10extern int Fi_i(int);
11extern int Fi_s (short);
12extern int Fii_i(int , int);
13extern int Fiii_i(int, int, int);
14extern int Fie_i(int bar, ...);
15
16/* Return types */
17extern void Fv_v(void);
18extern char Fv_c(void);
19extern signed char Fv_Sc(void);
20extern unsigned char Fv_Uc(void);
21extern short Fv_s(void);
22extern unsigned short Fv_Us(void);
23extern int Fv_i(void);
24extern const int Fv_Ci(void);
25extern unsigned int Fv_Ui(void);
26extern volatile int Fv_Vi(void);
27extern long Fv_l(void);
28extern unsigned long Fv_Ul(void);
29extern float Fv_f(void) ;
30extern double Fv_g(void);
31extern long double Fv_Lg(void);
32
33
34/* Pointers */
35extern void * Fv_Pv(void);
36extern void ** Fv_PPv(void);
37
38/* References */
39extern int& Fv_Ri(void);
40
41/* Argument types */
42extern int FPi_i(int *a);
43extern int FA10_i_i(int a[10]) ;
44extern int Fc_i(char bar);
45extern int Ff_i(float bar);
46extern int Fg_i(double bar);
47
48/* Function pointers */
49typedef int (*x)(int);
50typedef int (*y)(short);
51
52extern int Fx_i(x);
53extern int Fxx_i(x fnptr, x fnptr2);
54extern int Fxxx_i(x fnptr, x fnptr2, x fnptr3);
55extern int Fxxi_i(x fnptr, x fnptr2, x fnptr3, int i);
56extern int Fxix_i(x fnptr, int i, x fnptr3);
57extern int Fxyxy_i(x fnptr, y fnptr2, x fnptr3, y fnptr4);
58
59
60extern void Fmyclass_v(myclass m);
61extern void Fmxmx_v(myclass arg1, x arg2, myclass arg3, x arg4);
62
63int 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