1 /* This test program is part of GDB, the GNU debugger.
3 Copyright 2017-2024 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 double double_typedef
;
66 typedef long double long_double_typedef
;
71 typedef enum colors
{red
, green
, blue
} colors_typedef
;
76 typedef struct t_struct
92 typedef int int_array_typedef
[3];
95 /* An array the same size of t_struct_typedef, so we can test casting. */
96 typedef unsigned char uchar_array_t_struct_typedef
[sizeof (t_struct_typedef
)];
97 DEF (uchar_array_t_struct
);
99 /* A struct and a eunion the same size as t_struct, so we can test
102 typedef struct t_struct_wrapper
104 struct t_struct base
;
105 } t_struct_wrapper_typedef
;
106 DEF (t_struct_wrapper
);
108 typedef union t_struct_union_wrapper
110 struct t_struct base
;
111 } t_struct_union_wrapper_typedef
;
112 DEF (t_struct_union_wrapper
);
114 /* Functions / function pointers. */
116 typedef void func_ftype (void);
117 func_ftype
*v_func_ftype
;
119 typedef func_ftype func_ftype2
;
120 func_ftype2
*v_func_ftype2
;
122 /* C++ methods / method pointers. */
128 struct Struct
{ void method (); };
129 void Struct::method () {}
131 typedef Struct Struct_typedef
;
134 /* Typedefs/vars in a namespace. */
135 typedef void (Struct::*method_ptr_typedef
) ();
140 /* Similar, but in the global namespace. */
141 typedef ns::Struct ns_Struct_typedef
;
144 typedef void (ns::Struct::*ns_method_ptr_typedef
) ();