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