[gdb/testsuite] Reduce errors after gdb exit in default_gdb_start
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / bitfields2.c
CommitLineData
c8170782
PH
1/* Test program to test bit field operations on bit fields of large
2 integer types. */
3
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. */
6
7#include <stdlib.h>
8#include <string.h>
9
10#if !defined(__STDC__) && !defined(__cplusplus)
11#define signed /**/
12#endif
13
14struct fields
15{
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;
23
24void break1 ()
25{
26}
27
28void break2 ()
29{
30}
31
32void break3 ()
33{
34}
35
36void break4 ()
37{
38}
39
40void break5 ()
41{
42}
43
44void break6 ()
45{
46}
47
48void break7 ()
49{
50}
51
52void break8 ()
53{
54}
55
56void break9 ()
57{
58}
59
60void break10 ()
61{
62}
63
64/* This is used by bitfields.exp to determine if the target understands
65 signed bitfields. */
66int i;
67
68void tester ()
69{
70 memset ((char *) &flags, 0, sizeof (flags));
71
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;
77
78 flags.u1 = 1;
79 break1 ();
80 flags.u1 = 0;
81
82 flags.s2 = 1;
83 break1 ();
84 flags.s2 = 0;
85
86 flags.u2 = 1;
87 break1 ();
88 flags.u2 = 0;
89
90 flags.s3 = 1;
91 break1 ();
92 flags.s3 = 0;
93
94 flags.u3 = 1;
95 break1 ();
96 flags.u3 = 0;
97
98 /* Fill alternating fields with all 1's and verify that none of the bits
99 "bleed over" to the other fields. */
100
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;
108
109 flags.u2 = 0x1FFFFFFFFLL;
110 flags.s1 = -1;
111 flags.s3 = -1;
112 break2 ();
113
114 flags.u2 = 0;
115 flags.s1 = 0;
116 flags.s3 = 0;
117
118 /* Fill the unsigned fields with the maximum positive value and verify
119 that the values are printed correctly. */
120
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;
128
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. */
132
133 /* Maximum positive values */
134 flags.s1 = 0x3FFF;
135 flags.s2 = 0xFFFFFFFFLL;
136 flags.s3 = 0x7FFF;
137 break4 ();
138
139 /* Maximally negative values */
140 flags.s1 = -0x4000;
141 flags.s2 = -0x100000000LL;
142 flags.s3 = -0x8000;
143
144 /* Extract bitfield value so that bitfield.exp can check if the target
145 understands signed bitfields. */
146 i = flags.s3;
147 break4 ();
148
149 /* -1 */
150 flags.s1 = -1;
151 flags.s2 = -1;
152 flags.s3 = -1;
153 break4 ();
154
155 flags.s1 = 0;
156 flags.s2 = 0;
157 flags.s3 = 0;
158
159 break5 ();
160}
161
162int main ()
163{
164 int i;
924437bc 165
c8170782
PH
166 for (i = 0; i < 5; i += 1)
167 tester ();
168 return 0;
169}
This page took 1.597849 seconds and 4 git commands to generate.