Fix: Null pointer dereference in ldlex.l
[binutils-gdb.git] / gdb / testsuite / gdb.base / bitfields2.c
blobedb3b9fadadf9e869f6698ca2edb55b45a7d62d8
1 /* Test program to test bit field operations on bit fields of large
2 integer types. */
4 /* This file is expected to fail to compile if the type long long int
5 is not supported, but in that case it is irrelevant. */
7 #include <stdlib.h>
8 #include <string.h>
10 #if !defined(__STDC__) && !defined(__cplusplus)
11 #define signed /**/
12 #endif
14 struct fields
16 unsigned long long u1 : 15;
17 unsigned long long u2 : 33;
18 unsigned long long u3 : 16;
19 signed long long s1 : 15;
20 signed long long s2 : 33;
21 signed long long s3 : 16;
22 } flags;
24 void break1 ()
28 void break2 ()
32 void break3 ()
36 void break4 ()
40 void break5 ()
44 void break6 ()
48 void break7 ()
52 void break8 ()
56 void break9 ()
60 void break10 ()
64 /* This is used by bitfields.exp to determine if the target understands
65 signed bitfields. */
66 int i;
68 void tester ()
70 memset ((char *) &flags, 0, sizeof (flags));
72 /* For each member, set that member to 1, allow gdb to verify that the
73 member (and only that member) is 1, and then reset it back to 0. */
74 flags.s1 = 1;
75 break1 ();
76 flags.s1 = 0;
78 flags.u1 = 1;
79 break1 ();
80 flags.u1 = 0;
82 flags.s2 = 1;
83 break1 ();
84 flags.s2 = 0;
86 flags.u2 = 1;
87 break1 ();
88 flags.u2 = 0;
90 flags.s3 = 1;
91 break1 ();
92 flags.s3 = 0;
94 flags.u3 = 1;
95 break1 ();
96 flags.u3 = 0;
98 /* Fill alternating fields with all 1's and verify that none of the bits
99 "bleed over" to the other fields. */
101 flags.u1 = 0x7FFF;
102 flags.u3 = 0xFFFF;
103 flags.s2 = -1LL;
104 break2 ();
105 flags.u1 = 0;
106 flags.u3 = 0;
107 flags.s2 = 0;
109 flags.u2 = 0x1FFFFFFFFLL;
110 flags.s1 = -1;
111 flags.s3 = -1;
112 break2 ();
114 flags.u2 = 0;
115 flags.s1 = 0;
116 flags.s3 = 0;
118 /* Fill the unsigned fields with the maximum positive value and verify
119 that the values are printed correctly. */
121 flags.u1 = 0x7FFF;
122 flags.u2 = 0x1FFFFFFFFLL;
123 flags.u3 = 0xFFFF;
124 break3 ();
125 flags.u1 = 0;
126 flags.u2 = 0;
127 flags.u3 = 0;
129 /* Fill the signed fields with the maximum positive value, then the maximally
130 negative value, then -1, and verify in each case that the values are
131 printed correctly. */
133 /* Maximum positive values */
134 flags.s1 = 0x3FFF;
135 flags.s2 = 0xFFFFFFFFLL;
136 flags.s3 = 0x7FFF;
137 break4 ();
139 /* Maximally negative values */
140 flags.s1 = -0x4000;
141 flags.s2 = -0x100000000LL;
142 flags.s3 = -0x8000;
144 /* Extract bitfield value so that bitfield.exp can check if the target
145 understands signed bitfields. */
146 i = flags.s3;
147 break4 ();
149 /* -1 */
150 flags.s1 = -1;
151 flags.s2 = -1;
152 flags.s3 = -1;
153 break4 ();
155 flags.s1 = 0;
156 flags.s2 = 0;
157 flags.s3 = 0;
159 break5 ();
162 int main ()
164 int i;
166 for (i = 0; i < 5; i += 1)
167 tester ();
168 return 0;