|
|
1.1 root 1: /* The Plum Hall Validation Suite for C
2: * Unpublished copyright (c) 1986-1991, Chiron Systems Inc and Plum Hall Inc.
3: * VERSION: 4
4: * DATE: 1993-01-01
5: * The "ANSI" mode of this suite corresponds to official ANSI C, X3.159-1989.
6: * As per your license agreement, your distribution is not to be moved or copied outside the Designated Site
7: * without specific permission from Plum Hall Inc.
8: */
9:
10: /*
11: * PRECEDENCE - Check for operator precedence.
12: * All of the operator combinations are checked for precedence.
13: */
14: #include "defs.h"
15: /*
16: * PREC2A -- try all operator pairs -- this file uses all binary operators
17: * in the second position (see prec1 for the other way around).
18: */
19: static void p2_1();
20: static void p2_2();
21: static void p2_3();
22: static void p2_4();
23: static void p2_5();
24: static void p2_6();
25: static void p2_7();
26: static void p2_8();
27: static void p2_9();
28: static void p2_10();
29: static void p2_11();
30: static void p2_12();
31: static void p2_13();
32: static void p2_14();
33: static void p2_15();
34: static void p2_16();
35:
36: void prec2a()
37: {
38: Filename = "prec2a.c";
39: p2_1(); /* [] */
40: p2_2(); /* () */
41: p2_3(); /* . */
42: p2_4(); /* -> */
43: p2_5(); /* X++ */
44: p2_6(); /* X-- */
45: p2_7(); /* ++X */
46: p2_8(); /* --X */
47: p2_9(); /* & */
48: p2_10(); /* * */
49: p2_11(); /* + */
50: p2_12(); /* - */
51: p2_13(); /* ~ */
52: p2_14(); /* ! */
53: p2_15(); /* sizeof */
54: p2_16(); /* cast */
55: }
56:
57: static int i = 1;
58: static char ca[10] = {0,1,2,3,4,5,6,7,8,9};
59: static char *pa[10] = {ca, ca+1};
60: static struct X
61: {
62: int a[2];
63: int b;
64: char *p;
65: struct X *px;
66: } r = {0,0,2},
67: s = {{3,4},5, "x", &r},
68: *ps = &s,
69: as[2] = {{{6,7},8,0,0},{{9,10},11,0,0}},
70: *pas = &as[0];
71: static struct
72: {
73: struct X s;
74: } xx = {{{6,7},8, "a", 0}},
75: *pxx = &xx;
76:
77: static int f(){return 5;}
78: static char *g(){return "abc";}
79: static struct X *fps(){return ps;}
80: static char *fp(){return "abc";}
81:
82: static void p2_1()
83: {
84: iequals(__LINE__, fp()[i], 'b');
85: iequals(__LINE__, s.a[i], 4);
86: iequals(__LINE__, ps->a[i], 4);
87: iequals(__LINE__, ca[i++], 1);
88: iequals(__LINE__, ca[i--], 2);
89: iequals(__LINE__, ++ca[i], 2);
90: iequals(__LINE__, --ca[i], 1);
91: aequals(__LINE__, &ca[i], ca+i);
92: iequals(__LINE__, *pa[i], 1);
93: #if ANSI
94: iequals(__LINE__, +ca[i], 1);
95: #endif
96: iequals(__LINE__, -ca[i], -1);
97: iequals(__LINE__, ~ca[i], ~1);
98: iequals(__LINE__, !ca[i], 0);
99: iequals(__LINE__, sizeof ca[i], 1);
100: dequals(__LINE__, (double)ca[i], 1.0);
101: iequals(__LINE__, 2*ca[i], 2);
102: iequals(__LINE__, 2/ca[i], 2);
103: iequals(__LINE__, 2%ca[i], 0);
104: iequals(__LINE__, i+ca[i], 2);
105: iequals(__LINE__, i-ca[i], 0);
106: iequals(__LINE__, i>>ca[i], 0);
107: iequals(__LINE__, i<<ca[i], 2);
108: iequals(__LINE__, i>ca[i], 0);
109: iequals(__LINE__, i<ca[i], 0);
110: iequals(__LINE__, i<=ca[i], 1);
111: iequals(__LINE__, i>=ca[i], 1);
112: iequals(__LINE__, i==ca[i], 1);
113: iequals(__LINE__, i!=ca[i], 0);
114: iequals(__LINE__, i&ca[i], 1);
115: iequals(__LINE__, i^ca[i], 0);
116: iequals(__LINE__, i|ca[i], 1);
117: iequals(__LINE__, i&&ca[i], 1);
118: iequals(__LINE__, i||ca[i], 1);
119: iequals(__LINE__, i?ca[i]:0, 1);
120: iequals(__LINE__, i=ca[9], 9);
121: iequals(__LINE__, i *= ca[2], 18);
122: iequals(__LINE__, i /= ca[9], 2);
123: iequals(__LINE__, i %= ca[3], 2);
124: iequals(__LINE__, i += ca[4], 6);
125: iequals(__LINE__, i -= ca[2], 4);
126: iequals(__LINE__, i <<= ca[2], 16);
127: iequals(__LINE__, i >>= ca[2], 4);
128: iequals(__LINE__, i&ca[4], 4);
129: iequals(__LINE__, i ^= ca[9], 13);
130: iequals(__LINE__, i |= ca[2], 15);
131: iequals(__LINE__, (8,ca[9]), 9);
132: }
133:
134: /* () */
135: static void p2_2()
136: {
137: int i = 7;
138: /* X.Y() is illegal */
139: /* X->Y() is illegal */
140: /* X++() is illegal */
141: /* X--() is illegal */
142: /* ++X() is illegal */
143: /* --X() is illegal */
144: /* &X() is illegal */
145: iequals(__LINE__, *fp(), 'a');
146: #if ANSI
147: iequals(__LINE__, +f(), 5);
148: #endif
149: iequals(__LINE__, -f(), -5);
150: iequals(__LINE__, ~f(), ~5);
151: iequals(__LINE__, !f(), 0);
152: iequals(__LINE__, sizeof g(), sizeof (char *));
153: dequals(__LINE__, (double)f(), 5.0);
154: iequals(__LINE__, i*f(), 35);
155: iequals(__LINE__, i/f(), 1);
156: iequals(__LINE__, i%f(), 2);
157: iequals(__LINE__, i+f(), 12);
158: iequals(__LINE__, i-f(), 2);
159: iequals(__LINE__, i>>f(), 0);
160: iequals(__LINE__, i<<f(), 224);
161: iequals(__LINE__, i>f(), 1);
162: iequals(__LINE__, i<f(), 0);
163: iequals(__LINE__, i<=f(), 0);
164: iequals(__LINE__, i>=f(), 1);
165: iequals(__LINE__, i==f(), 0);
166: iequals(__LINE__, i!=f(), 1);
167: iequals(__LINE__, i&f(), 5);
168: iequals(__LINE__, i^f(), 2);
169: iequals(__LINE__, i|f(), 7);
170: iequals(__LINE__, i&&f(), 1);
171: iequals(__LINE__, i||f(), 1);
172: iequals(__LINE__, i?f():0, 5);
173: iequals(__LINE__, i=f(), 5);
174: iequals(__LINE__, i *= f(), 25);
175: iequals(__LINE__, i /= f(), 5);
176: iequals(__LINE__, i %= f(), 0);
177: i = 1;
178: iequals(__LINE__, i += f(), 6);
179: iequals(__LINE__, i -= f(), 1);
180: iequals(__LINE__, i <<= f(), 32);
181: iequals(__LINE__, i >>= f(), 1);
182: iequals(__LINE__, i &= f(), 1);
183: iequals(__LINE__, i ^= f(), 4);
184: iequals(__LINE__, i |= f(), 5);
185: iequals(__LINE__, (8,f()), 5);
186: }
187:
188: /* . */
189: static void p2_3()
190: {
191: int i = 1;
192: int j = 1;
193: iequals(__LINE__, pxx->s.b, 8);
194: /* .++ is illegal */
195: /* .-- is illegal */
196: iequals(__LINE__, ++s.b, 6);
197: iequals(__LINE__, --s.b, 5);
198: aequals(__LINE__, &s.b, &(s.b));
199: iequals(__LINE__, *s.p, 'x');
200: #if ANSI
201: iequals(__LINE__, +s.b, 5);
202: #endif
203: iequals(__LINE__, -s.b, -5);
204: iequals(__LINE__, ~s.b, ~5);
205: iequals(__LINE__, !s.b, 0);
206: iequals(__LINE__, sizeof s.b, sizeof (int));
207: dequals(__LINE__, (double)s.b, 5.0);
208: iequals(__LINE__, 2*s.b, 10);
209: iequals(__LINE__, 10/s.b, 2);
210: iequals(__LINE__, 11%s.b, 1);
211: iequals(__LINE__, 2+s.b, 7);
212: iequals(__LINE__, 7-s.b, 2);
213: iequals(__LINE__, 32>>s.b, 1);
214: iequals(__LINE__, 1<<s.b, 32);
215: iequals(__LINE__, 2>s.b, 0);
216: iequals(__LINE__, 2<s.b, 1);
217: iequals(__LINE__, 2<=s.b, 1);
218: iequals(__LINE__, 2>=s.b, 0);
219: iequals(__LINE__, 2==s.b, 0);
220: iequals(__LINE__, 2!=s.b, 1);
221: iequals(__LINE__, 7&s.b, 5);
222: iequals(__LINE__, 7^s.b, 2);
223: iequals(__LINE__, 2|s.b, 7);
224: iequals(__LINE__, i&&s.b, 1);
225: iequals(__LINE__, i||s.b, 1);
226: iequals(__LINE__, i?s.b:0, 5);
227: iequals(__LINE__, i=s.b, 5);
228: iequals(__LINE__, i *= s.b, 25);
229: iequals(__LINE__, i /= s.b, 5);
230: iequals(__LINE__, i %= s.b, 0);
231: iequals(__LINE__, i += s.b, 5);
232: iequals(__LINE__, i -= s.b, 0);
233: iequals(__LINE__, j <<= s.b, 32);
234: iequals(__LINE__, j >>= s.b, 1);
235: iequals(__LINE__, j &= s.b, 1);
236: j = 7;
237: iequals(__LINE__, j ^= s.b, 2);
238: iequals(__LINE__, j |= s.b, 7);
239: iequals(__LINE__, (8,s.b), 5);
240: }
241:
242: /* -> */
243: static void p2_4()
244: {
245: int i = 1;
246: int j = 1;
247: iequals(__LINE__, pas++->b, 8);
248: iequals(__LINE__, pas--->b, 11);
249: iequals(__LINE__, ++ps->b, 6);
250: iequals(__LINE__, --ps->b, 5);
251: aequals(__LINE__, &ps->b, &(s.b));
252: iequals(__LINE__, *ps->p, 'x');
253: #if ANSI
254: iequals(__LINE__, +ps->b, 5);
255: #endif
256: iequals(__LINE__, -ps->b, -5);
257: iequals(__LINE__, ~ps->b, ~5);
258: iequals(__LINE__, !ps->b, 0);
259: iequals(__LINE__, sizeof ps->b, sizeof(s.b));
260: dequals(__LINE__, (double)ps->b, 5.0);
261: iequals(__LINE__, 2*ps->b, 10);
262: iequals(__LINE__, 10/ps->b, 2);
263: iequals(__LINE__, 11%ps->b, 1);
264: iequals(__LINE__, 2+ps->b, 7);
265: iequals(__LINE__, 7-ps->b, 2);
266: iequals(__LINE__, 32>>ps->b, 1);
267: iequals(__LINE__, 1<<ps->b, 32);
268: iequals(__LINE__, 2>ps->b, 0);
269: iequals(__LINE__, 2<ps->b, 1);
270: iequals(__LINE__, 2<=ps->b, 1);
271: iequals(__LINE__, 2>=ps->b, 0);
272: iequals(__LINE__, 2==ps->b, 0);
273: iequals(__LINE__, 2!=ps->b, 1);
274: iequals(__LINE__, 7&ps->b, 5);
275: iequals(__LINE__, 7^ps->b, 2);
276: iequals(__LINE__, 2|ps->b, 7);
277: iequals(__LINE__, i&&ps->b, 1);
278: iequals(__LINE__, i||ps->b, 1);
279: iequals(__LINE__, i?ps->b:0, 5);
280: iequals(__LINE__, i=ps->b, 5);
281: iequals(__LINE__, i *= ps->b, 25);
282: iequals(__LINE__, i /= ps->b, 5);
283: iequals(__LINE__, i %= ps->b, 0);
284: iequals(__LINE__, i += ps->b, 5);
285: iequals(__LINE__, i -= ps->b, 0);
286: iequals(__LINE__, j <<= ps->b, 32);
287: iequals(__LINE__, j >>= ps->b, 1);
288: iequals(__LINE__, j &= ps->b, 1);
289: j = 7;
290: iequals(__LINE__, j ^= ps->b, 2);
291: iequals(__LINE__, j |= ps->b, 7);
292: iequals(__LINE__, (8,ps->b), 5);
293: }
294:
295: /* X++ */
296: static void p2_5()
297: {
298: char *p = "abc";
299: int i = 5;
300: int j = 1;
301:
302: /* ++X++ is illegal */
303: /* --X++ is illegal */
304: /* ++X-- is illegal */
305: iequals(__LINE__, i, 5);
306: /* &X++ is illegal */
307: iequals(__LINE__, *p++, 'a');
308: iequals(__LINE__, *p, 'b');
309: #if ANSI
310: iequals(__LINE__, +i++, 5);
311: iequals(__LINE__, +i, 6);
312: #endif
313: i = 8;
314: iequals(__LINE__, -i++, -8);
315: iequals(__LINE__, ~i++, ~9);
316: iequals(__LINE__, !i++, 0);
317: /* sizeof i++ is undefined */
318: dequals(__LINE__, (double)i++, 11.0);
319: iequals(__LINE__, 2*i++, 24);
320: iequals(__LINE__, 26/i++, 2);
321: iequals(__LINE__, 30%i++, 2);
322: iequals(__LINE__, 2+i++, 17);
323: iequals(__LINE__, 7-i++, -9);
324: i = 1;
325: iequals(__LINE__, 8>>i++, 4);
326: iequals(__LINE__, 1<<i++, 4);
327: iequals(__LINE__, 2>i++, 0);
328: iequals(__LINE__, 2<i++, 1);
329: iequals(__LINE__, 2<=i, 1);
330: iequals(__LINE__, 2>=i++, 0);
331: iequals(__LINE__, 2==i++, 0);
332: iequals(__LINE__, 2!=i++, 1);
333: i=5;
334: iequals(__LINE__, 7&i++, 5);
335: iequals(__LINE__, 7^i++, 1);
336: iequals(__LINE__, 2|i++, 7);
337: iequals(__LINE__, j&&i++, 1);
338: iequals(__LINE__, j||i++, 1);
339: i = 1;
340: iequals(__LINE__, j?i++:0, 1);
341: iequals(__LINE__, j=i++, 2);
342: iequals(__LINE__, j *= i++, 6);
343: iequals(__LINE__, j /= i++, 1);
344: iequals(__LINE__, j %= i++, 1);
345: iequals(__LINE__, j += i++, 7);
346: iequals(__LINE__, j -= i++, 0);
347: j = 1;
348: iequals(__LINE__, j <<= i++, 1<<8);
349: iequals(__LINE__, j >>= i++, 0);
350: j = 7, i=5;
351: iequals(__LINE__, j &= i++, 5);
352: iequals(__LINE__, j ^= i++, 3);
353: iequals(__LINE__, j |= i++, 7);
354: iequals(__LINE__, (8,i++), 8);
355: }
356:
357: /* X-- */
358: static void p2_6()
359: {
360: char *p = "abc";
361: int i = 17;
362: int j = 1;
363: ++p;
364: /* --X-- is illegal */
365: /* ++X-- is illegal */
366: iequals(__LINE__, i, 17);
367: /* &X++ is illegal */
368: iequals(__LINE__, *p--, 'b');
369: iequals(__LINE__, *p, 'a');
370: #if ANSI
371: iequals(__LINE__, +i--, 17);
372: iequals(__LINE__, i, 16);
373: #endif
374: i = 8;
375: iequals(__LINE__, -i--, -8);
376: iequals(__LINE__, ~i--, ~7);
377: iequals(__LINE__, !i--, 0);
378: /* sizeof i-- is undefined */
379: dequals(__LINE__, (double)i--, 5.0);
380: iequals(__LINE__, 2*i--, 8);
381: iequals(__LINE__, 27/i--, 9);
382: iequals(__LINE__, 32%i--, 0);
383: iequals(__LINE__, 2+i--, 3);
384: iequals(__LINE__, 7-i--, 7);
385: i = 2;
386: iequals(__LINE__, 8>>i--, 2);
387: iequals(__LINE__, 2<<i--, 4);
388: iequals(__LINE__, 2>i--, 1);
389: iequals(__LINE__, 2<i--, 0);
390: iequals(__LINE__, -2<=i--, 1);
391: iequals(__LINE__, 2>=i--, 1);
392: iequals(__LINE__, -4==i--, 1);
393: iequals(__LINE__, -5!=i--, 0);
394: i=5;
395: iequals(__LINE__, 7&i--, 5);
396: iequals(__LINE__, 7^i--, 3);
397: iequals(__LINE__, 2|i--, 3);
398: iequals(__LINE__, j&&i--, 1);
399: iequals(__LINE__, j||i--, 1);
400: i = 8;
401: iequals(__LINE__, j?i--:0, 8);
402: iequals(__LINE__, j=i--, 7);
403: iequals(__LINE__, j *= i--, 42);
404: j = 20;
405: iequals(__LINE__, j /= i--, 4);
406: iequals(__LINE__, j %= i--, 0);
407: iequals(__LINE__, j += i--, 3);
408: iequals(__LINE__, j -= i--, 1);
409: j = 1 ;
410: iequals(__LINE__, j <<= i--, 1<<1);
411: iequals(__LINE__, j >>= i--, 2);
412: iequals(__LINE__, i, -1);
413: j = 7, i=5;
414: iequals(__LINE__, j &= i--, 5);
415: iequals(__LINE__, j ^= i--, 1);
416: iequals(__LINE__, j |= i--, 3);
417: iequals(__LINE__, (8,i--), 2);
418: }
419:
420: /* ++X */
421: static void p2_7()
422: {
423: char *p = "abc";
424: int i = 5;
425: int j = 1;
426:
427: /* ++--X is illegal */
428: /* &++X is illegal */
429: iequals(__LINE__, *++p, 'b');
430: #if ANSI
431: iequals(__LINE__, + ++i, 6);
432: #endif
433: i = 8;
434: iequals(__LINE__, - ++i, -9);
435: iequals(__LINE__, ~++i, ~10);
436: iequals(__LINE__, !++i, 0);
437: /* sizeof ++i is undefined */
438: dequals(__LINE__, (double)++i, 12.0);
439: iequals(__LINE__, 2*++i, 26);
440: iequals(__LINE__, 28/++i, 2);
441: iequals(__LINE__, 9%++i, 9);
442: iequals(__LINE__, 2+ ++i, 18);
443: iequals(__LINE__, 18-++i, 1);
444: i = 2;
445: iequals(__LINE__, 8>>++i, 1);
446: iequals(__LINE__, 1<<++i, 16);
447: iequals(__LINE__, 2>++i, 0);
448: iequals(__LINE__, 2<++i, 1);
449: iequals(__LINE__, 7<=++i, 1);
450: iequals(__LINE__, 8>=++i, 1);
451: iequals(__LINE__, 9==++i, 1);
452: iequals(__LINE__, 10!=++i, 0);
453: i=4;
454: iequals(__LINE__, 7&++i, 5);
455: iequals(__LINE__, 7^++i, 1);
456: iequals(__LINE__, 8|++i, 15);
457: iequals(__LINE__, j&&++i, 1);
458: iequals(__LINE__, j||++i, 1);
459: i = 8;
460: iequals(__LINE__, j?++i:0, 9);
461: iequals(__LINE__, j = ++i, 10);
462: iequals(__LINE__, j *= ++i, 110);
463: j = 24;
464: iequals(__LINE__, j /= ++i, 2);
465: iequals(__LINE__, j %= ++i, 2);
466: iequals(__LINE__, j += ++i, 16);
467: iequals(__LINE__, j -= ++i, 1);
468: i = 1;
469: j = 1 ;
470: iequals(__LINE__, j <<= 2, 4);
471: iequals(__LINE__, j >>= ++i, 1);
472: j = 7, i=5;
473: iequals(__LINE__, j &= ++i, 6);
474: iequals(__LINE__, j ^= ++i, 1);
475: iequals(__LINE__, j |= ++i, 9);
476: iequals(__LINE__, (8,++i), 9);
477: }
478:
479: /* --X */
480: static void p2_8()
481: {
482: int i = 31;
483: int j = 31;
484: char *p = "abc";
485: ++p;
486: /* &--X() is illegal */
487: iequals(__LINE__, *--p, 'a');
488: #if ANSI
489: iequals(__LINE__, +--j, 30);
490: #endif
491: j = 31;
492: iequals(__LINE__, - --j, -30);
493: iequals(__LINE__, ~--j, ~29);
494: iequals(__LINE__, !--j, 0);
495: /* sizeof --X is illegal */
496: dequals(__LINE__, (double)--j, 27.0);
497: iequals(__LINE__, i*--j, 806);
498: iequals(__LINE__, i/--j, 1);
499: iequals(__LINE__, i%--j, 7);
500: iequals(__LINE__, i+--j, 54);
501: iequals(__LINE__, i- --j, 9);
502: j = 3; iequals(__LINE__, i>>--j, 7);
503: iequals(__LINE__, i<<--j, 62); j = 20;
504: iequals(__LINE__, i>--j, 1);
505: iequals(__LINE__, i<--j, 0);
506: iequals(__LINE__, i<=--j, 0);
507: iequals(__LINE__, i>=--j, 1);
508: iequals(__LINE__, i==--j, 0);
509: iequals(__LINE__, i!=--j, 1);
510: iequals(__LINE__, i&--j, 13);
511: iequals(__LINE__, i^--j, 19);
512: iequals(__LINE__, i|--j, 31);
513: iequals(__LINE__, i&&--j, 1);
514: iequals(__LINE__, i||--j, 1);
515: iequals(__LINE__, i?--j:0, 9);
516: iequals(__LINE__, i = --j, 8);
517: iequals(__LINE__, i *= --j, 56);
518: iequals(__LINE__, i /= --j, 9);
519: iequals(__LINE__, i %= --j, 4);
520: iequals(__LINE__, i += --j, 8);
521: iequals(__LINE__, i -= --j, 5);
522: i = 2;
523: j = 6;
524: iequals(__LINE__, i <<= --j, 64);
525: iequals(__LINE__, i >>= --j, 4);
526: iequals(__LINE__, i &= --j, 0);
527: iequals(__LINE__, i ^= --j, 2);
528: iequals(__LINE__, i |= --j, 3);
529: iequals(__LINE__, (8,--j), 0);
530: }
531:
532: /* &X */
533: static void p2_9()
534: {
535: char *p = "amz";
536: struct X *q = 0;
537: int i = 20;
538: int j = 0;
539:
540: aequals(__LINE__, *&p, p);
541: #if ANSI
542: /* +&X is illegal */
543: #endif
544: /* -&X is illegal */
545: /* ~&X is illegal */
546: /* !&X is illegal */
547: /* & sizeof X is illegal */
548: iequals(__LINE__, sizeof&s, sizeof(struct X *));
549: aequals(__LINE__, (char *)&s, (char *)ps);
550: /* Y * & X is illegal */
551: /* Y / & X is illegal */
552: /* Y % & X is illegal */
553: aequals(__LINE__, 1+&s, ps+1);
554: iequals(__LINE__, ps-&s, 0);
555: /* Y << & X is illegal */
556: /* Y >> & X is illegal */
557: iequals(__LINE__, ps>&s, 0);
558: iequals(__LINE__, ps<&s, 0);
559: iequals(__LINE__, ps<=&s, 1);
560: iequals(__LINE__, ps>=&s, 1);
561: iequals(__LINE__, ps==&s, 1);
562: iequals(__LINE__, ps!=&s, 0);
563: /* & X & Y is illegal */
564: /* & X ^ Y is illegal */
565: /* & X | Y is illegal */
566: iequals(__LINE__, q&&&s, 0);
567: iequals(__LINE__, q||&s, 1);
568: aequals(__LINE__, q?0:&s, ps);
569: aequals(__LINE__, q = &s, ps);
570: /* Y *= &X is illegal */
571: /* Y /= &X is illegal */
572: /* Y %= &X is illegal */
573: /* Y += &X is illegal */
574: /* Y -= &X is illegal */
575: /* Y <<= &X is illegal */
576: /* Y >>= &X is illegal */
577: /* Y &= &X is illegal */
578: /* Y ^= &X is illegal */
579: /* Y |= &X is illegal */
580: aequals(__LINE__, (8, &s), q);
581: }
582:
583: /* *X */
584: static void p2_10()
585: {
586: int i = 31;
587: int j = 2;
588: int *p = &j;
589: /* &--X() is illegal */
590: #if ANSI
591: iequals(__LINE__, +*p, 2);
592: #endif
593: i = 31;
594: iequals(__LINE__, - *p, -2);
595: iequals(__LINE__, ~*p, ~2);
596: iequals(__LINE__, !*p, 0);
597: /* sizeof --X is illegal */
598: dequals(__LINE__, (double)*p, 2.0);
599: iequals(__LINE__, i**p, 62);
600: iequals(__LINE__, i/ *p, 15);
601: iequals(__LINE__, i%*p, 1);
602: iequals(__LINE__, i+*p, 33);
603: iequals(__LINE__, i-*p, 29);
604: iequals(__LINE__, i>>*p, 7);
605: iequals(__LINE__, i<<*p, 124);
606: iequals(__LINE__, i>*p, 1);
607: iequals(__LINE__, i<*p, 0);
608: iequals(__LINE__, i<=*p, 0);
609: iequals(__LINE__, i>=*p, 1);
610: iequals(__LINE__, i==*p, 0);
611: iequals(__LINE__, i!=*p, 1);
612: iequals(__LINE__, i&*p, 2);
613: iequals(__LINE__, i^*p, 29);
614: iequals(__LINE__, i|*p, 31);
615: iequals(__LINE__, i&&*p, 1);
616: iequals(__LINE__, i||*p, 1);
617: iequals(__LINE__, i?*p:0, 2);
618: iequals(__LINE__, i = *p, 2);
619: iequals(__LINE__, i *= *p, 4);
620: iequals(__LINE__, i /= *p, 2);
621: iequals(__LINE__, i %= *p, 0);
622: i = 1;
623: iequals(__LINE__, i += *p, 3);
624: iequals(__LINE__, i -= *p, 1);
625: iequals(__LINE__, i <<= *p, 4);
626: iequals(__LINE__, i >>= *p, 1);
627: iequals(__LINE__, i &= *p, 0);
628: iequals(__LINE__, i ^= *p, 2);
629: iequals(__LINE__, i |= *p, 2);
630: iequals(__LINE__, (8,*p), 2);
631: }
632:
633: /* +X */
634: static void p2_11()
635: {
636: int i = 2;
637: int j = 5;
638: #if ANSI
639: iequals(__LINE__, -+j, -5);
640: iequals(__LINE__, ~+j, ~5);
641: iequals(__LINE__, !+j, 0);
642: /* sizeof +X is illegal */
643: dequals(__LINE__, (double)+j, 5.0);
644: iequals(__LINE__, i*+j, 10);
645: iequals(__LINE__, i/+j, 0);
646: iequals(__LINE__, i%+j, 2);
647: iequals(__LINE__, i+ +j, 7);
648: iequals(__LINE__, i-+j, -3);
649: iequals(__LINE__, i>>+j, 0);
650: iequals(__LINE__, i<<+j, 64);
651: iequals(__LINE__, i>+j, 0);
652: iequals(__LINE__, i<+j, 1);
653: iequals(__LINE__, i<=+j, 1);
654: iequals(__LINE__, i>=+j, 0);
655: iequals(__LINE__, i==+j, 0);
656: iequals(__LINE__, i!=+j, 1);
657: iequals(__LINE__, i&+j, 0);
658: iequals(__LINE__, i^+j, 7);
659: iequals(__LINE__, i|+j, 7);
660: iequals(__LINE__, i&&+j, 1);
661: iequals(__LINE__, i||+j, 1);
662: iequals(__LINE__, i?+j:0, 5);
663: iequals(__LINE__, i=+j, 5); i = 7;
664: iequals(__LINE__, i *= +j, 35);
665: iequals(__LINE__, i /= +j, 7);
666: iequals(__LINE__, i %= +j, 2);
667: iequals(__LINE__, i += +j, 7);
668: iequals(__LINE__, i -= +j, 2);
669: iequals(__LINE__, i <<= +j, 64);
670: iequals(__LINE__, i >>= +j, 2);
671: iequals(__LINE__, i&+j, 0);
672: iequals(__LINE__, i ^= +j, 7);
673: iequals(__LINE__, i |= +j, 7);
674: iequals(__LINE__, (8,+j), 5);
675: #endif
676: }
677:
678: /* -X */
679: static void p2_12()
680: {
681: int i = 5;
682: int j = 2;
683: iequals(__LINE__, - -j, 2);
684: iequals(__LINE__, ~-j, ~(-2));
685: iequals(__LINE__, !-j, 0);
686: /* sizeof -X is illegal */
687: dequals(__LINE__, (double)-j, -2.0);
688: iequals(__LINE__, i*-j, -10);
689: j = -2; iequals(__LINE__, i/-j, 2);
690: iequals(__LINE__, i%-j, 1); j = 2;
691: iequals(__LINE__, i+-j, 3);
692: iequals(__LINE__, i- -j, 7);
693: j = -2; iequals(__LINE__, i>>-j, 1);
694: iequals(__LINE__, i<<-j, 20); j = 2;
695: iequals(__LINE__, i>-j, 1);
696: iequals(__LINE__, i<-j, 0);
697: iequals(__LINE__, i<=-j, 0);
698: iequals(__LINE__, i>=-j, 1);
699: iequals(__LINE__, i==-j, 0);
700: iequals(__LINE__, i!=-j, 1);
701: iequals(__LINE__, i&-j, 5&(-2));
702: iequals(__LINE__, i^-j, 5^(-2));
703: iequals(__LINE__, i|-j, 5|(-2));
704: iequals(__LINE__, i&&-j, 1);
705: iequals(__LINE__, i||-j, 1);
706: iequals(__LINE__, i?-j:0, -2);
707: iequals(__LINE__, i = -j, -2);
708: iequals(__LINE__, i *= -j, 4);
709: iequals(__LINE__, i /= -j, -2);
710: iequals(__LINE__, i %= -j, 0);
711: i = 1;
712: iequals(__LINE__, i += -j, -1);
713: iequals(__LINE__, i -= -j, 1);
714: i = 1;
715: j = -2;
716: iequals(__LINE__, i <<= -j, 4);
717: iequals(__LINE__, i >>= -j, 1);
718: iequals(__LINE__, i &= -j, 0);
719: iequals(__LINE__, i ^= -j, 2);
720: iequals(__LINE__, i |= -j, 2);
721: iequals(__LINE__, (8,-j), 2);
722: }
723:
724: /* ~X */
725: static void p2_13()
726: {
727: unsigned int i = 5;
728: unsigned int j = 2;
729: iequals(__LINE__, ~~j, 2);
730: iequals(__LINE__, !~j, 0);
731: /* sizeof !X is illegal */
732: dequals(__LINE__, (double)~j, (double)(~(unsigned)2));
733: iequals(__LINE__, i*~j, 5*(~(unsigned)2));
734: iequals(__LINE__, i/~j, 5/(~(unsigned)2));
735: iequals(__LINE__, i%~j, 5%(~(unsigned)2));
736: iequals(__LINE__, i+~j, 5+(~(unsigned)2));
737: iequals(__LINE__, i-~j, 5-(~(unsigned)2));
738: j = ~j; iequals(__LINE__, i>>~j, 1);
739: iequals(__LINE__, i<<~j, 20); j = ~j;
740: iequals(__LINE__, i>~j, 0);
741: iequals(__LINE__, i<~j, 1);
742: iequals(__LINE__, i<=~j, 1);
743: iequals(__LINE__, i>=~j, 0);
744: iequals(__LINE__, i==~j, 0);
745: iequals(__LINE__, i!=~j, 1);
746: iequals(__LINE__, i&~j, 5);
747: iequals(__LINE__, i^~j, ~(unsigned)7);
748: iequals(__LINE__, i|~j, ~(unsigned)2);
749: iequals(__LINE__, i&&~j, 1);
750: iequals(__LINE__, i||~j, 1);
751: iequals(__LINE__, i?~j:0, ~(unsigned)2);
752: iequals(__LINE__, i=~j, ~(unsigned)2);
753: iequals(__LINE__, i *= ~j, 9);
754: iequals(__LINE__, i /= ~j, 0);
755: iequals(__LINE__, i %= ~j, 0);
756: iequals(__LINE__, i += ~j, ~(unsigned)2);
757: iequals(__LINE__, i -= ~j, 0);
758: i = 2;
759: j = ~(unsigned)1;
760: iequals(__LINE__, i <<= ~j, 4);
761: iequals(__LINE__, i >>= ~j, 2);
762: iequals(__LINE__, i&~j, 0);
763: iequals(__LINE__, i ^= ~j, 3);
764: iequals(__LINE__, i |= ~j, 3);
765: iequals(__LINE__, (8,~j), 1);
766: }
767:
768: /* ! X */
769: static void p2_14()
770: {
771: int i = 5;
772: char j = 0;
773: iequals(__LINE__, !!j, 0);
774: dequals(__LINE__, (double)!j, 1.0);
775: iequals(__LINE__, i*!j, 5);
776: iequals(__LINE__, i/!j, 5);
777: iequals(__LINE__, i%!j, 0);
778: iequals(__LINE__, i+!j, 6);
779: iequals(__LINE__, i-!j, 4);
780: iequals(__LINE__, i>>!j, 2);
781: iequals(__LINE__, i<<!j, 10);
782: iequals(__LINE__, i>!j, 1);
783: iequals(__LINE__, i<!j, 0);
784: iequals(__LINE__, i<=!j,0);
785: iequals(__LINE__, i>=!j, 1);
786: iequals(__LINE__, i==!j, 0);
787: iequals(__LINE__, i!=!j, 1);
788: iequals(__LINE__, i&!j, 1);
789: iequals(__LINE__, i^!j, 4);
790: iequals(__LINE__, i|!j, 5);
791: iequals(__LINE__, i&&!j, 1);
792: iequals(__LINE__, i||!j, 1);
793: iequals(__LINE__, i?!j:0, 1);
794: iequals(__LINE__, i=!j, 1);
795: iequals(__LINE__, i *= !j, 1);
796: iequals(__LINE__, i /= !j, 1);
797: iequals(__LINE__, i %= !j, 0);
798: iequals(__LINE__, i += !j, 1);
799: iequals(__LINE__, i -= !j, 0);
800: i = 5;
801: iequals(__LINE__, i <<= !j, 10);
802: iequals(__LINE__, i >>= !j, 5);
803: iequals(__LINE__, i &= !j, 1);
804: iequals(__LINE__, i ^= !j, 0);
805: iequals(__LINE__, i |= !j, 1);
806: iequals(__LINE__, (8,!j), 1);
807: }
808:
809: /* sizeof X */
810: static void p2_15()
811: {
812: int i = 55;
813: int j = 2;
814: int k = sizeof j;
815: /* sizeof sizeof is illegal */
816: dequals(__LINE__, (double)sizeof j, (double)k);
817: iequals(__LINE__, i*sizeof j, i*k);
818: iequals(__LINE__, i/sizeof j, i/k);
819: iequals(__LINE__, i%sizeof j, i%k);
820: iequals(__LINE__, i+sizeof j, i+k);
821: iequals(__LINE__, i-sizeof j, i-k);
822: iequals(__LINE__, i>>sizeof j, i>>k);
823: iequals(__LINE__, i<<sizeof j, i<<k);
824: iequals(__LINE__, i>sizeof j, i>k);
825: iequals(__LINE__, i<sizeof j, i<k);
826: iequals(__LINE__, i<=sizeof j, i<=k);
827: iequals(__LINE__, i>=sizeof j, i>=k);
828: iequals(__LINE__, i==sizeof j, i==k);
829: iequals(__LINE__, i!=sizeof j, i!=k);
830: iequals(__LINE__, i&sizeof j, i&k);
831: iequals(__LINE__, i^sizeof j, i^k);
832: iequals(__LINE__, i|sizeof j, i|k);
833: iequals(__LINE__, i&&sizeof j, 1);
834: iequals(__LINE__, i||sizeof j, 1);
835: iequals(__LINE__, i?sizeof j:0, k);
836: iequals(__LINE__, i=sizeof j, k);
837: iequals(__LINE__, i *= sizeof j, k*k);
838: iequals(__LINE__, i /= sizeof j, k);
839: iequals(__LINE__, i %= sizeof (char), 0);
840: iequals(__LINE__, i += sizeof j, k);
841: iequals(__LINE__, i -= sizeof j, 0);
842: i = 1;
843: iequals(__LINE__, i <<= sizeof j, 1<<k);
844: iequals(__LINE__, i >>= sizeof j, 1);
845: iequals(__LINE__, i &= sizeof j, 1&k);
846: iequals(__LINE__, i ^= sizeof j, k^1&k);
847: iequals(__LINE__, i |= sizeof j, k^1&k|k);
848: iequals(__LINE__, (8,sizeof j), k);
849: }
850:
851: /* (cast) */
852: static void p2_16()
853: {
854: int i = 5;
855: float j = 2.0;
856: iequals(__LINE__, i-(int) j, 3);
857: iequals(__LINE__, i>>(int)j, 1);
858: iequals(__LINE__, i<<(int)j, 20);
859: iequals(__LINE__, i>(int)j, 1);
860: iequals(__LINE__, i<(int)j, 0);
861: iequals(__LINE__, i<=(int)j, 0);
862: iequals(__LINE__, i>=(int)j, 1);
863: iequals(__LINE__, i==(int)j, 0);
864: iequals(__LINE__, i!=(int)j, 1);
865: iequals(__LINE__, i&(int)j, 0);
866: iequals(__LINE__, i^(int)j, 7);
867: iequals(__LINE__, i|(int)j, 7);
868: iequals(__LINE__, i&&(int)j, 1);
869: iequals(__LINE__, i||(int)j, 1);
870: iequals(__LINE__, i?(int)j:0, 2);
871: iequals(__LINE__, i=(int)j, 2);
872: iequals(__LINE__, i *= (int)j, 4);
873: iequals(__LINE__, i /= (int)j, 2);
874: iequals(__LINE__, i %= (int)j, 0);
875: iequals(__LINE__, i += (int)j, 2);
876: iequals(__LINE__, i -= (int)j, 0);
877: i = 1;
878: iequals(__LINE__, i <<= (int)j, 4);
879: iequals(__LINE__, i >>= (int)j, 1);
880: iequals(__LINE__, i&(int)j, 0);
881: iequals(__LINE__, i ^= (int)j, 3);
882: iequals(__LINE__, i |= (int)j, 3);
883: iequals(__LINE__, (8,(int)j), 2);
884: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.