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