Annotation of researchv10no/cmd/lcc/ph/prec2a.c, revision 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.