gdb: allow duplicate enumerators in flag enums
[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 FE_TWO_LEGACY = 0x02,
106 };
107
108 enum flag_enum three = FE_ONE | FE_TWO;
109
110 /* Another enum considered as a "flag enum", but with no enumerator with value
111 0. */
112 enum flag_enum_without_zero
113 {
114 FEWZ_ONE = 0x01,
115 FEWZ_TWO = 0x02,
116 };
117
118 enum flag_enum_without_zero flag_enum_without_zero = 0;
119
120 /* Not a flag enum, an enumerator value has multiple bits sets. */
121 enum not_flag_enum
122 {
123 NFE_ONE = 0x01,
124 NFE_TWO = 0x02,
125 NFE_F0 = 0xf0,
126 };
127
128 enum not_flag_enum three_not_flag = NFE_ONE | NFE_TWO;
129
130 /* A structure with an embedded array at an offset > 0. The array has
131 all elements with the same repeating value, which must not be the
132 same as the value of the preceding fields in the structure for the
133 test to be effective. This tests whether GDB uses the correct
134 element content offsets (relative to the complete `some_struct'
135 value) when counting value repetitions. */
136 struct some_struct
137 {
138 int a;
139 int b;
140 unsigned char array[20];
141 } some_struct = {
142 0x12345678,
143 0x87654321,
144 {
145 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
146 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
147 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
148 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
149 }
150 };
151
152 /* The following variables are used for testing byte repeat sequences.
153 The variable names are encoded: invalid_XYZ where:
154 X = start
155 Y = invalid
156 Z = end
157
158 Each of X and Z can be "E" (empty), "S" (single), "L" (long single),
159 or "R" (repeat).
160
161 Y can be either any of the above except "E" (otherwise there is nothing
162 to test). */
163 char invalid_ESE[] = "\240";
164 char invalid_SSE[] = "a\240";
165 char invalid_LSE[] = "abaabbaaabbb\240";
166 char invalid_RSE[] = "aaaaaaaaaaaaaaaaaaaa\240";
167 char invalid_ESS[] = "\240c";
168 char invalid_SSS[] = "a\240c";
169 char invalid_LSS[] = "abaabbaaabbb\240c";
170 char invalid_RSS[] = "aaaaaaaaaaaaaaaaaaaa\240c";
171 char invalid_ESL[] = "\240cdccddcccddd";
172 char invalid_SSL[] = "a\240cdccddcccddd";
173 char invalid_LSL[] = "abaabbaaabbb\240cdccddcccddd";
174 char invalid_RSL[] = "aaaaaaaaaaaaaaaaaaaa\240cdccddcccddd";
175 char invalid_ESR[] = "\240cccccccccccccccccccc";
176 char invalid_SSR[] = "a\240cccccccccccccccccccc";
177 char invalid_LSR[] = "abaabbaaabbb\240cccccccccccccccccccc";
178 char invalid_RSR[] = "aaaaaaaaaaaaaaaaaaaa\240cccccccccccccccccccc";
179 char invalid_ELE[] = "\240\240\240\240";
180 char invalid_SLE[] = "a\240\240\240\240";
181 char invalid_LLE[] = "abaabbaaabbb\240\240\240\240";
182 char invalid_RLE[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240";
183 char invalid_ELS[] = "\240\240\240\240c";
184 char invalid_SLS[] = "a\240\240\240\240c";
185 char invalid_LLS[] = "abaabbaaabbb\240\240\240\240c";
186 char invalid_RLS[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240c";
187 char invalid_ELL[] = "\240\240\240\240cdccddcccddd";
188 char invalid_SLL[] = "a\240\240\240\240cdccddcccddd";
189 char invalid_LLL[] = "abaabbaaabbb\240\240\240\240cdccddcccddd";
190 char invalid_RLL[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cdccddcccddd";
191 char invalid_ELR[] = "\240\240\240\240cccccccccccccccccccc";
192 char invalid_SLR[] = "a\240\240\240\240cccccccccccccccccccc";
193 char invalid_LLR[] = "abaabbaaabbb\240\240\240\240cccccccccccccccccccc";
194 char invalid_RLR[] = "aaaaaaaaaaaaaaaaaaaa\240\240\240\240cccccccccccccccccccc";
195 char invalid_ERE[] = ""
196 "\240\240\240\240\240\240\240\240\240\240"
197 "\240\240\240\240\240\240\240\240\240\240";
198 char invalid_LRE[] = "abaabbaaabbb"
199 "\240\240\240\240\240\240\240\240\240\240"
200 "\240\240\240\240\240\240\240\240\240\240";
201 char invalid_RRE[] = "aaaaaaaaaaaaaaaaaaaa"
202 "\240\240\240\240\240\240\240\240\240\240"
203 "\240\240\240\240\240\240\240\240\240\240";
204 char invalid_ERS[] = ""
205 "\240\240\240\240\240\240\240\240\240\240"
206 "\240\240\240\240\240\240\240\240\240\240c";
207 char invalid_ERL[] = ""
208 "\240\240\240\240\240\240\240\240\240\240"
209 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
210 char invalid_ERR[] = ""
211 "\240\240\240\240\240\240\240\240\240\240"
212 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
213 char invalid_SRE[] = "a"
214 "\240\240\240\240\240\240\240\240\240\240"
215 "\240\240\240\240\240\240\240\240\240\240";
216 char invalid_SRS[] = "a"
217 "\240\240\240\240\240\240\240\240\240\240"
218 "\240\240\240\240\240\240\240\240\240\240c";
219 char invalid_SRL[] = "a"
220 "\240\240\240\240\240\240\240\240\240\240"
221 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
222 char invalid_SRR[] = "a"
223 "\240\240\240\240\240\240\240\240\240\240"
224 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
225 char invalid_LRS[] = "abaabbaaabbb"
226 "\240\240\240\240\240\240\240\240\240\240"
227 "\240\240\240\240\240\240\240\240\240\240c";
228 char invalid_LRL[] = "abaabbaaabbb"
229 "\240\240\240\240\240\240\240\240\240\240"
230 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
231 char invalid_LRR[] = "abaabbaaabbb"
232 "\240\240\240\240\240\240\240\240\240\240"
233 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
234 char invalid_RRS[] = "aaaaaaaaaaaaaaaaaaaa"
235 "\240\240\240\240\240\240\240\240\240\240"
236 "\240\240\240\240\240\240\240\240\240\240c";
237 char invalid_RRL[] = "aaaaaaaaaaaaaaaaaaaa"
238 "\240\240\240\240\240\240\240\240\240\240"
239 "\240\240\240\240\240\240\240\240\240\240cdccddcccddd";
240 char invalid_RRR[] = "aaaaaaaaaaaaaaaaaaaa"
241 "\240\240\240\240\240\240\240\240\240\240"
242 "\240\240\240\240\240\240\240\240\240\240cccccccccccccccccccc";
243
244 /* -- */
245
246 int main ()
247 {
248 void *p = malloc (1);
249
250 /* Prevent AIX linker from removing variables. */
251 return ctable1[0] + ctable2[0] + int1dim[0] + int2dim[0][0]
252 + int3dim[0][0][0] + int4dim[0][0][0][0] + teststring[0] +
253 *parrays -> array1 + a1[0] + a2[0];
254 free (p);
255 }
This page took 0.037207 seconds and 4 git commands to generate.