annotate gcc/testsuite/gcc.dg/c99-bool-1.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Test for _Bool and <stdbool.h> in C99. */
kono
parents:
diff changeset
2 /* Origin: Joseph Myers <jsm28@cam.ac.uk> */
kono
parents:
diff changeset
3 /* { dg-do run } */
kono
parents:
diff changeset
4 /* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 /* _Bool must be a builtin type. */
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 _Bool foo;
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 #include <stdbool.h>
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 /* Three macros must be integer constant expressions suitable for use
kono
parents:
diff changeset
13 in #if.
kono
parents:
diff changeset
14 */
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 #if !defined(true) || (true != 1)
kono
parents:
diff changeset
17 #error "bad stdbool true" /* { dg-bogus "#error" "bad stdbool.h" } */
kono
parents:
diff changeset
18 #endif
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 #if !defined(false) || (false != 0)
kono
parents:
diff changeset
21 #error "bad stdbool false" /* { dg-bogus "#error" "bad stdbool.h" } */
kono
parents:
diff changeset
22 #endif
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 #if !defined(__bool_true_false_are_defined) || (__bool_true_false_are_defined != 1)
kono
parents:
diff changeset
25 #error "bad stdbool __bool_true_false_are_defined" /* { dg-bogus "#error" "bad stdbool.h" } */
kono
parents:
diff changeset
26 #endif
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 int a = true;
kono
parents:
diff changeset
29 int b = false;
kono
parents:
diff changeset
30 int c = __bool_true_false_are_defined;
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 struct foo
kono
parents:
diff changeset
33 {
kono
parents:
diff changeset
34 _Bool a : 1;
kono
parents:
diff changeset
35 } sf;
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 #define str(x) xstr(x)
kono
parents:
diff changeset
38 #define xstr(x) #x
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 extern void abort (void);
kono
parents:
diff changeset
42 extern void exit (int);
kono
parents:
diff changeset
43 extern int strcmp (const char *, const char *);
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 int
kono
parents:
diff changeset
46 main (void)
kono
parents:
diff changeset
47 {
kono
parents:
diff changeset
48 /* The macro `bool' must expand to _Bool. */
kono
parents:
diff changeset
49 const char *t = str (bool);
kono
parents:
diff changeset
50 _Bool u, v;
kono
parents:
diff changeset
51 if (strcmp (t, "_Bool"))
kono
parents:
diff changeset
52 abort ();
kono
parents:
diff changeset
53 if (a != 1 || b != 0 || c != 1)
kono
parents:
diff changeset
54 abort ();
kono
parents:
diff changeset
55 /* Casts to _Bool have a specified behavior. */
kono
parents:
diff changeset
56 if ((int)(_Bool)2 != 1)
kono
parents:
diff changeset
57 abort ();
kono
parents:
diff changeset
58 if ((int)(_Bool)0.2 != 1)
kono
parents:
diff changeset
59 abort ();
kono
parents:
diff changeset
60 /* Pointers may be assigned to _Bool. */
kono
parents:
diff changeset
61 if ((u = t) != 1)
kono
parents:
diff changeset
62 abort ();
kono
parents:
diff changeset
63 /* _Bool may be used to subscript arrays. */
kono
parents:
diff changeset
64 u = 0;
kono
parents:
diff changeset
65 if (t[u] != '_')
kono
parents:
diff changeset
66 abort ();
kono
parents:
diff changeset
67 if (u[t] != '_')
kono
parents:
diff changeset
68 abort ();
kono
parents:
diff changeset
69 u = 1;
kono
parents:
diff changeset
70 if (t[u] != 'B')
kono
parents:
diff changeset
71 abort ();
kono
parents:
diff changeset
72 if (u[t] != 'B')
kono
parents:
diff changeset
73 abort ();
kono
parents:
diff changeset
74 /* Test increment and decrement operators. */
kono
parents:
diff changeset
75 u = 0;
kono
parents:
diff changeset
76 if (u++ != 0)
kono
parents:
diff changeset
77 abort ();
kono
parents:
diff changeset
78 if (u != 1)
kono
parents:
diff changeset
79 abort ();
kono
parents:
diff changeset
80 if (u++ != 1)
kono
parents:
diff changeset
81 abort ();
kono
parents:
diff changeset
82 if (u != 1)
kono
parents:
diff changeset
83 abort ();
kono
parents:
diff changeset
84 u = 0;
kono
parents:
diff changeset
85 if (++u != 1)
kono
parents:
diff changeset
86 abort ();
kono
parents:
diff changeset
87 if (u != 1)
kono
parents:
diff changeset
88 abort ();
kono
parents:
diff changeset
89 if (++u != 1)
kono
parents:
diff changeset
90 abort ();
kono
parents:
diff changeset
91 if (u != 1)
kono
parents:
diff changeset
92 abort ();
kono
parents:
diff changeset
93 u = 0;
kono
parents:
diff changeset
94 if (u-- != 0)
kono
parents:
diff changeset
95 abort ();
kono
parents:
diff changeset
96 if (u != 1)
kono
parents:
diff changeset
97 abort ();
kono
parents:
diff changeset
98 if (u-- != 1)
kono
parents:
diff changeset
99 abort ();
kono
parents:
diff changeset
100 if (u != 0)
kono
parents:
diff changeset
101 abort ();
kono
parents:
diff changeset
102 u = 0;
kono
parents:
diff changeset
103 if (--u != 1)
kono
parents:
diff changeset
104 abort ();
kono
parents:
diff changeset
105 if (u != 1)
kono
parents:
diff changeset
106 abort ();
kono
parents:
diff changeset
107 if (--u != 0)
kono
parents:
diff changeset
108 abort ();
kono
parents:
diff changeset
109 if (u != 0)
kono
parents:
diff changeset
110 abort ();
kono
parents:
diff changeset
111 /* Test unary + - ~ !. */
kono
parents:
diff changeset
112 u = 0;
kono
parents:
diff changeset
113 if (+u != 0)
kono
parents:
diff changeset
114 abort ();
kono
parents:
diff changeset
115 if (-u != 0)
kono
parents:
diff changeset
116 abort ();
kono
parents:
diff changeset
117 u = 1;
kono
parents:
diff changeset
118 if (+u != 1)
kono
parents:
diff changeset
119 abort ();
kono
parents:
diff changeset
120 if (-u != -1)
kono
parents:
diff changeset
121 abort ();
kono
parents:
diff changeset
122 u = 2;
kono
parents:
diff changeset
123 if (+u != 1)
kono
parents:
diff changeset
124 abort ();
kono
parents:
diff changeset
125 if (-u != -1)
kono
parents:
diff changeset
126 abort ();
kono
parents:
diff changeset
127 u = 0;
kono
parents:
diff changeset
128 if (~u != ~(int)0)
kono
parents:
diff changeset
129 abort ();
kono
parents:
diff changeset
130 u = 1;
kono
parents:
diff changeset
131 if (~u != ~(int)1)
kono
parents:
diff changeset
132 abort ();
kono
parents:
diff changeset
133 u = 0;
kono
parents:
diff changeset
134 if (!u != 1)
kono
parents:
diff changeset
135 abort ();
kono
parents:
diff changeset
136 u = 1;
kono
parents:
diff changeset
137 if (!u != 0)
kono
parents:
diff changeset
138 abort ();
kono
parents:
diff changeset
139 /* Test arithmetic * / % + - (which all apply promotions). */
kono
parents:
diff changeset
140 u = 0;
kono
parents:
diff changeset
141 if (u + 2 != 2)
kono
parents:
diff changeset
142 abort ();
kono
parents:
diff changeset
143 u = 1;
kono
parents:
diff changeset
144 if (u * 4 != 4)
kono
parents:
diff changeset
145 abort ();
kono
parents:
diff changeset
146 if (u % 3 != 1)
kono
parents:
diff changeset
147 abort ();
kono
parents:
diff changeset
148 if (u / 1 != 1)
kono
parents:
diff changeset
149 abort ();
kono
parents:
diff changeset
150 if (4 / u != 4)
kono
parents:
diff changeset
151 abort ();
kono
parents:
diff changeset
152 if (u - 7 != -6)
kono
parents:
diff changeset
153 abort ();
kono
parents:
diff changeset
154 /* Test bitwise shift << >>. */
kono
parents:
diff changeset
155 u = 1;
kono
parents:
diff changeset
156 if (u << 1 != 2)
kono
parents:
diff changeset
157 abort ();
kono
parents:
diff changeset
158 if (u >> 1 != 0)
kono
parents:
diff changeset
159 abort ();
kono
parents:
diff changeset
160 /* Test relational and equality operators < > <= >= == !=. */
kono
parents:
diff changeset
161 u = 0;
kono
parents:
diff changeset
162 v = 0;
kono
parents:
diff changeset
163 if (u < v || u > v || !(u <= v) || !(u >= v) || !(u == v) || u != v)
kono
parents:
diff changeset
164 abort ();
kono
parents:
diff changeset
165 u = 0;
kono
parents:
diff changeset
166 v = 1;
kono
parents:
diff changeset
167 if (!(u < v) || u > v || !(u <= v) || u >= v || u == v || !(u != v))
kono
parents:
diff changeset
168 abort ();
kono
parents:
diff changeset
169 /* Test bitwise operators & ^ |. */
kono
parents:
diff changeset
170 u = 1;
kono
parents:
diff changeset
171 if ((u | 2) != 3)
kono
parents:
diff changeset
172 abort ();
kono
parents:
diff changeset
173 if ((u ^ 3) != 2)
kono
parents:
diff changeset
174 abort ();
kono
parents:
diff changeset
175 if ((u & 1) != 1)
kono
parents:
diff changeset
176 abort ();
kono
parents:
diff changeset
177 if ((u & 0) != 0)
kono
parents:
diff changeset
178 abort ();
kono
parents:
diff changeset
179 /* Test logical && ||. */
kono
parents:
diff changeset
180 u = 0;
kono
parents:
diff changeset
181 v = 1;
kono
parents:
diff changeset
182 if (!(u || v))
kono
parents:
diff changeset
183 abort ();
kono
parents:
diff changeset
184 if (!(v || u))
kono
parents:
diff changeset
185 abort ();
kono
parents:
diff changeset
186 if (u && v)
kono
parents:
diff changeset
187 abort ();
kono
parents:
diff changeset
188 if (v && u)
kono
parents:
diff changeset
189 abort ();
kono
parents:
diff changeset
190 u = 1;
kono
parents:
diff changeset
191 v = 1;
kono
parents:
diff changeset
192 if (!(u && v))
kono
parents:
diff changeset
193 abort ();
kono
parents:
diff changeset
194 /* Test conditional ? :. */
kono
parents:
diff changeset
195 u = 0;
kono
parents:
diff changeset
196 if ((u ? 4 : 7) != 7)
kono
parents:
diff changeset
197 abort ();
kono
parents:
diff changeset
198 u = 1;
kono
parents:
diff changeset
199 v = 0;
kono
parents:
diff changeset
200 if ((1 ? u : v) != 1)
kono
parents:
diff changeset
201 abort ();
kono
parents:
diff changeset
202 if ((1 ? 4 : u) != 4)
kono
parents:
diff changeset
203 abort ();
kono
parents:
diff changeset
204 /* Test assignment operators = *= /= %= += -= <<= >>= &= ^= |=. */
kono
parents:
diff changeset
205 if ((u = 2) != 1)
kono
parents:
diff changeset
206 abort ();
kono
parents:
diff changeset
207 if (u != 1)
kono
parents:
diff changeset
208 abort ();
kono
parents:
diff changeset
209 if ((u *= -1) != 1)
kono
parents:
diff changeset
210 abort ();
kono
parents:
diff changeset
211 if (u != 1)
kono
parents:
diff changeset
212 abort ();
kono
parents:
diff changeset
213 if ((u /= 2) != 0)
kono
parents:
diff changeset
214 abort ();
kono
parents:
diff changeset
215 if ((u += 3) != 1)
kono
parents:
diff changeset
216 abort ();
kono
parents:
diff changeset
217 if ((u -= 1) != 0)
kono
parents:
diff changeset
218 abort ();
kono
parents:
diff changeset
219 u = 1;
kono
parents:
diff changeset
220 if ((u <<= 4) != 1)
kono
parents:
diff changeset
221 abort ();
kono
parents:
diff changeset
222 if ((u >>= 1) != 0)
kono
parents:
diff changeset
223 abort ();
kono
parents:
diff changeset
224 u = 1;
kono
parents:
diff changeset
225 if ((u &= 0) != 0)
kono
parents:
diff changeset
226 abort ();
kono
parents:
diff changeset
227 if ((u |= 2) != 1)
kono
parents:
diff changeset
228 abort ();
kono
parents:
diff changeset
229 if ((u ^= 3) != 1)
kono
parents:
diff changeset
230 abort ();
kono
parents:
diff changeset
231 /* Test comma expressions. */
kono
parents:
diff changeset
232 u = 1;
kono
parents:
diff changeset
233 if ((4, u) != 1)
kono
parents:
diff changeset
234 abort ();
kono
parents:
diff changeset
235 /* Test bitfields. */
kono
parents:
diff changeset
236 {
kono
parents:
diff changeset
237 int i;
kono
parents:
diff changeset
238 for (i = 0; i < sizeof (struct foo); i++)
kono
parents:
diff changeset
239 *((unsigned char *)&sf + i) = (unsigned char) -1;
kono
parents:
diff changeset
240 sf.a = 1;
kono
parents:
diff changeset
241 if (sf.a != 1)
kono
parents:
diff changeset
242 abort ();
kono
parents:
diff changeset
243 sf.a = 0;
kono
parents:
diff changeset
244 if (sf.a != 0)
kono
parents:
diff changeset
245 abort ();
kono
parents:
diff changeset
246 }
kono
parents:
diff changeset
247 exit (0);
kono
parents:
diff changeset
248 }