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