Annotation of researchv10no/cmd/lcc/ph/prec2a.c, revision 1.1.1.1

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:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.