gdb: fix printing of flag enums with multi-bit enumerators
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / printcmds.c
1 /* This table is used as a source for every ascii character.
2 It is explicitly unsigned to avoid differences due to native characters
3 being either signed or unsigned. */
4 #include <stdlib.h>
5 unsigned char ctable1[256] = {
6 0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007,
7 0010, 0011, 0012, 0013, 0014, 0015, 0016, 0017,
8 0020, 0021, 0022, 0023, 0024, 0025, 0026, 0027,
9 0030, 0031, 0032, 0033, 0034, 0035, 0036, 0037,
10 0040, 0041, 0042, 0043, 0044, 0045, 0046, 0047,
11 0050, 0051, 0052, 0053, 0054, 0055, 0056, 0057,
12 0060, 0061, 0062, 0063, 0064, 0065, 0066, 0067,
13 0070, 0071, 0072, 0073, 0074, 0075, 0076, 0077,
14 0100, 0101, 0102, 0103, 0104, 0105, 0106, 0107,
15 0110, 0111, 0112, 0113, 0114, 0115, 0116, 0117,
16 0120, 0121, 0122, 0123, 0124, 0125, 0126, 0127,
17 0130, 0131, 0132, 0133, 0134, 0135, 0136, 0137,
18 0140, 0141, 0142, 0143, 0144, 0145, 0146, 0147,
19 0150, 0151, 0152, 0153, 0154, 0155, 0156, 0157,
20 0160, 0161, 0162, 0163, 0164, 0165, 0166, 0167,
21 0170, 0171, 0172, 0173, 0174, 0175, 0176, 0177,
22 0200, 0201, 0202, 0203, 0204, 0205, 0206, 0207,
23 0210, 0211, 0212, 0213, 0214, 0215, 0216, 0217,
24 0220, 0221, 0222, 0223, 0224, 0225, 0226, 0227,
25 0230, 0231, 0232, 0233, 0234, 0235, 0236, 0237,
26 0240, 0241, 0242, 0243, 0244, 0245, 0246, 0247,
27 0250, 0251, 0252, 0253, 0254, 0255, 0256, 0257,
28 0260, 0261, 0262, 0263, 0264, 0265, 0266, 0267,
29 0270, 0271, 0272, 0273, 0274, 0275, 0276, 0277,
30 0300, 0301, 0302, 0303, 0304, 0305, 0306, 0307,
31 0310, 0311, 0312, 0313, 0314, 0315, 0316, 0317,
32 0320, 0321, 0322, 0323, 0324, 0325, 0326, 0327,
33 0330, 0331, 0332, 0333, 0334, 0335, 0336, 0337,
34 0340, 0341, 0342, 0343, 0344, 0345, 0346, 0347,
35 0350, 0351, 0352, 0353, 0354, 0355, 0356, 0357,
36 0360, 0361, 0362, 0363, 0364, 0365, 0366, 0367,
37 0370, 0371, 0372, 0373, 0374, 0375, 0376, 0377
38 };
39
40 unsigned char ctable2[] = {
41 'a','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
42 'a','a','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
43 'a','a','a','X','X','X','X','X','X','X','X','X','X','X','X','X',
44 'a','a','a','a','X','X','X','X','X','X','X','X','X','X','X','X',
45 'a','a','a','a','a','X','X','X','X','X','X','X','X','X','X','X',
46 'a','a','a','a','a','a','X','X','X','X','X','X','X','X','X','X',
47 'a','a','a','a','a','a','a','X','X','X','X','X','X','X','X','X',
48 'a','a','a','a','a','a','a','a','X','X','X','X','X','X','X','X',
49 'a','a','a','a','a','a','a','a','a','X','X','X','X','X','X','X',
50 'a','a','a','a','a','a','a','a','a','a','X','X','X','X','X','X',
51 'a','a','a','a','a','a','a','a','a','a','a','X','X','X','X','X',
52 'a','a','a','a','a','a','a','a','a','a','a','a','X','X','X','X',
53 'a','a','a','a','a','a','a','a','a','a','a','a','a','X','X','X',
54 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','X','X',
55 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','X',
56 'a','a','a','a','a','a','a','a','a','a','a','a','a','a','a','a', 0
57 };
58
59 /* Single and multidimensional arrays to test access and printing of array
60 members. */
61
62 typedef int ArrayInt [10];
63 ArrayInt a1 = {2,4,6,8,10,12,14,16,18,20};
64
65 typedef char ArrayChar [5];
66 ArrayChar a2 = {'a','b','c','d','\0'};
67
68 int int1dim[12] = {0,1,2,3,4,5,6,7,8,9,10,11};
69 int int2dim[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
70 int int3dim[2][3][2] = {{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}};
71 int int4dim[1][2][3][2] = {{{{0,1},{2,3},{4,5}},{{6,7},{8,9},{10,11}}}};
72
73 char *teststring = (char*)"teststring contents";
74
75 /* Test printing of a struct containing character arrays. */
76
77 struct some_arrays {
78 unsigned char array1[4];
79 unsigned char array2[1];
80 unsigned char array3[1];
81 unsigned char array4[2];
82 unsigned char array5[4];
83 } arrays = {
84 {'a', 'b', 'c', '\0'},
85 {'d'},
86 {'e'},
87 {'f', 'g' },
88 {'h', 'i', 'j', '\0'}
89 };
90
91 struct some_arrays *parrays = &arrays;
92
93 enum some_volatile_enum { enumvolval1, enumvolval2 };
94
95 /* A volatile enum variable whose name is the same as the enumeration
96 name. See PR11827. */
97 volatile enum some_volatile_enum some_volatile_enum = enumvolval1;
98
99 /* An enum considered as a "flag enum". */
100 enum flag_enum
101 {
102 FE_NONE = 0x00,
103 FE_ONE = 0x01,
104 FE_TWO = 0x02,
105 };
106
107 enum flag_enum three = FE_ONE | FE_TWO;
108
109 /* Another enum considered as a "flag enum", but with no enumerator with value
110 0. */
111 enum flag_enum_without_zero
112 {
113 FEWZ_ONE = 0x01,
114 FEWZ_TWO = 0x02,
115 };
116
117 enum flag_enum_without_zero flag_enum_without_zero = 0;
118
119 /* Not a flag enum, an enumerator value has multiple bits sets. */
120 enum not_flag_enum
121 {
122 NFE_ONE = 0x01,
123 NFE_TWO = 0x02,
124 NFE_F0 = 0xf0,
125 };
126
127 enum not_flag_enum three_not_flag = NFE_ONE | NFE_TWO;
128
129 /* A structure with an embedded array at an offset > 0. The array has
130 all elements with the same repeating value, which must not be the
131 same as the value of the preceding fields in the structure for the
132 test to be effective. This tests whether GDB uses the correct
133 element content offsets (relative to the complete `some_struct'
134 value) when counting value repetitions. */
135 struct some_struct
136 {
137 int a;
138 int b;
139 unsigned char array[20];
140 } some_struct = {
141 0x12345678,
142 0x87654321,
143 {
144 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
145 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
146 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
147 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
148 }
149 };
150
151 /* The following variables are used for testing byte repeat sequences.
152 The variable names are encoded: invalid_XYZ where:
153 X = start
154 Y = invalid
155 Z = end
156
157 Each of X and Z can be "E" (empty), "S" (single), "L" (long single),
158 or "R" (repeat).
159
160 Y can be either any of the above except "E" (otherwise there is nothing
161 to test). */
162 char invalid_ESE[] = "\240";
163 char invalid_SSE[] = "a\240";
164 char invalid_LSE[] = "abaabbaaabbb\240";
165 char invalid_RSE[] = "aaaaaaaaaaaaaaaaaaaa\240";
166 char invalid_ESS[] = "\240c";
167 char invalid_SSS[] = "a\240c";
168 char invalid_LSS[] = "abaabbaaabbb\240c";
169 char invalid_RSS[] = "aaaaaaaaaaaaaaaaaaaa\240c";
170 char invalid_ESL[] = "\240cdccddcccddd";
171 char invalid_SSL[] = "a\240cdccddcccddd";
172 char invalid_LSL[] = "abaabbaaabbb\240cdccddcccddd";
173 char invalid_RSL[] = "aaaaaaaaaaaaaaaaaaaa\240cdccddcccddd";
174 char invalid_ESR[] = "\240cccccccccccccccccccc";
175 char invalid_SSR[] = "a\240cccccccccccccccccccc";
176 char invalid_LSR[] = "abaabbaaabbb\240cccccccccccccccccccc";
177 char invalid_RSR[] = "aaaaaaaaaaaaaaaaaaaa\240cccccccccccccccccccc";
178 char invalid_ELE[] = "\240\240\240\240";
179 char invalid_SLE[] = "a\240\240\240\240";
180 char invalid_LLE[] = "abaabbaaabbb\240\240\240\240";
181 char invalid_RLE[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240";
182 char invalid_ELS[] = "\240\240\240\240c";
183 char invalid_SLS[] = "a\240\240\240\240c";
184 char invalid_LLS[] = "abaabbaaabbb\240\240\240\240c";
185 char invalid_RLS[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240c";
186 char invalid_ELL[] = "\240\240\240\240cdccddcccddd";
187 char invalid_SLL[] = "a\240\240\240\240cdccddcccddd";
188 char invalid_LLL[] = "abaabbaaabbb\240\240\240\240cdccddcccddd";
189 char invalid_RLL[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cdccddcccddd";
190 char invalid_ELR[] = "\240\240\240\240cccccccccccccccccccc";
191 char invalid_SLR[] = "a\240\240\240\240cccccccccccccccccccc";
192 char invalid_LLR[] = "abaabbaaabbb\240\240\240\240cccccccccccccccccccc";
193 char invalid_RLR[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cccccccccccccccccccc";
194 char invalid_ERE[] = ""
195 "\240\240\240\240\240\240\240\240\240\240"
196 "\240\240\240\240\240\240\240\240\240\240";
197 char invalid_LRE[] = "abaabbaaabbb"
198 "\240\240\240\240\240\240\240\240\240\240"
199 "\240\240\240\240\240\240\240\240\240\240";
200 char invalid_RRE[] = "aaaaaaaaaaaaaaaaaaaa"
201 "\240\240\240\240\240\240\240\240\240\240"
202 "\240\240\240\240\240\240\240\240\240\240";
203 char invalid_ERS[] = ""
204 "\240\240\240\240\240\240\240\240\240\240"
205 "\240\240\240\240\240\240\240\240\240\240c";
206 char invalid_ERL[] = ""
207 "\240\240\240\240\240\240\240\240\240\240"
208 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
209 char invalid_ERR[] = ""
210 "\240\240\240\240\240\240\240\240\240\240"
211 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
212 char invalid_SRE[] = "a"
213 "\240\240\240\240\240\240\240\240\240\240"
214 "\240\240\240\240\240\240\240\240\240\240";
215 char invalid_SRS[] = "a"
216 "\240\240\240\240\240\240\240\240\240\240"
217 "\240\240\240\240\240\240\240\240\240\240c";
218 char invalid_SRL[] = "a"
219 "\240\240\240\240\240\240\240\240\240\240"
220 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
221 char invalid_SRR[] = "a"
222 "\240\240\240\240\240\240\240\240\240\240"
223 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
224 char invalid_LRS[] = "abaabbaaabbb"
225 "\240\240\240\240\240\240\240\240\240\240"
226 "\240\240\240\240\240\240\240\240\240\240c";
227 char invalid_LRL[] = "abaabbaaabbb"
228 "\240\240\240\240\240\240\240\240\240\240"
229 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
230 char invalid_LRR[] = "abaabbaaabbb"
231 "\240\240\240\240\240\240\240\240\240\240"
232 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
233 char invalid_RRS[] = "aaaaaaaaaaaaaaaaaaaa"
234 "\240\240\240\240\240\240\240\240\240\240"
235 "\240\240\240\240\240\240\240\240\240\240c";
236 char invalid_RRL[] = "aaaaaaaaaaaaaaaaaaaa"
237 "\240\240\240\240\240\240\240\240\240\240"
238 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
239 char invalid_RRR[] = "aaaaaaaaaaaaaaaaaaaa"
240 "\240\240\240\240\240\240\240\240\240\240"
241 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
242
243 /* -- */
244
245 int main ()
246 {
247 void *p = malloc (1);
248
249 /* Prevent AIX linker from removing variables. */
250 return ctable1[0] + ctable2[0] + int1dim[0] + int2dim[0][0]
251 + int3dim[0][0][0] + int4dim[0][0][0][0] + teststring[0] +
252 *parrays -> array1 + a1[0] + a2[0];
253 free (p);
254 }
This page took 0.037298 seconds and 4 git commands to generate.