1 /* This test program is part of GDB, the GNU debugger.
3 Copyright 2017 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 /* Define typedefs of different types, for testing the "whatis" and
21 /* Helper macro used to consistently define variables/typedefs using
22 the same name scheme. BASE is the shared part of the name of all
23 typedefs/variables generated. Defines a variable of the given
24 typedef type, and then a typedef of that typedef and a variable of
25 that new typedef type. The "double typedef" is useful to checking
26 that whatis only strips one typedef level. For example, if BASE is
29 int_typedef v_int_typedef; // "v_" stands for variable of typedef type
30 typedef int_typedef int_typedef2; // typedef-of-typedef
31 int_typedef2 v_int_typedef2; // var of typedef-of-typedef
34 base ## _typedef v_ ## base ## _typedef; \
36 typedef base ## _typedef base ## _typedef2; \
37 base ## _typedef2 v_ ## base ## _typedef2
41 /* (Can't have variables of void type.) */
43 typedef void void_typedef
;
44 typedef void_typedef void_typedef2
;
46 void_typedef
*v_void_typedef_ptr
;
47 void_typedef2
*v_void_typedef_ptr2
;
51 typedef int int_typedef
;
56 typedef float float_typedef
;
61 typedef enum colors
{red
, green
, blue
} colors_typedef
;
66 typedef struct t_struct
82 typedef int int_array_typedef
[3];
85 /* An array the same size of t_struct_typedef, so we can test casting. */
86 typedef unsigned char uchar_array_t_struct_typedef
[sizeof (t_struct_typedef
)];
87 DEF (uchar_array_t_struct
);
89 /* A struct and a eunion the same size as t_struct, so we can test
92 typedef struct t_struct_wrapper
95 } t_struct_wrapper_typedef
;
96 DEF (t_struct_wrapper
);
98 typedef union t_struct_union_wrapper
100 struct t_struct base
;
101 } t_struct_union_wrapper_typedef
;
102 DEF (t_struct_union_wrapper
);
104 /* Functions / function pointers. */
106 typedef void func_ftype (void);
107 func_ftype
*v_func_ftype
;
109 typedef func_ftype func_ftype2
;
110 func_ftype2
*v_func_ftype2
;
112 /* C++ methods / method pointers. */
118 struct Struct
{ void method (); };
119 void Struct::method () {}
121 typedef Struct Struct_typedef
;
124 /* Typedefs/vars in a namespace. */
125 typedef void (Struct::*method_ptr_typedef
) ();
130 /* Similar, but in the global namespace. */
131 typedef ns::Struct ns_Struct_typedef
;
134 typedef void (ns::Struct::*ns_method_ptr_typedef
) ();