|
|
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.