Annotation of researchv10no/cmd/lcc/ph/c34.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: #include "flags.h"
        !            11: #ifndef SKIP34
        !            12: /*
        !            13:  * 3.4 - Constant expressions
        !            14:  */
        !            15: 
        !            16: #include "defs.h"
        !            17: 
        !            18: 
        !            19: #if ANSI
        !            20: static int i1 = +1;
        !            21: static int i4  = !4;
        !            22: static int i13 = 1 && 3;
        !            23: static int i14 = 0 || 3;
        !            24: #else
        !            25: static int i1 = 1;
        !            26: static int i4  = 0;
        !            27: static int i13 = 1;
        !            28: static int i14 = 1;
        !            29: #endif
        !            30: 
        !            31: static int i2  = -2;
        !            32: static int i3  = ~3;
        !            33: static int i5  = ((((((2*5) / 2) % 3) + 1) - 2) << 2) >> 2 ;
        !            34: static int i6 = 4 < 5;
        !            35: static int i7 = 4 > 5;
        !            36: static int i8 = 4 <= 5;
        !            37: static int i9 = 4 >= 5;
        !            38: static int i10 = 4 == 5;
        !            39: static int i11 = 4 != 5;
        !            40: static int i12 = ((1 & 3) ^ 2) | 4; 
        !            41: static int i15 = 1 ? 1 : 2;
        !            42: 
        !            43: static double d1 = 1.3;
        !            44: static double d2 = (double)1;
        !            45: 
        !            46: static char array[] = "abcd";
        !            47: static char *pc1 = array;
        !            48: static char *pc2 = array + (1 + 3 * 2) / 7;
        !            49: static char *pc3 = array - (-2 *(1 + 3 * 2)) / 7;
        !            50: static char *pc4 = &array[3];
        !            51: 
        !            52: 
        !            53: static struct b {                                                                                                                                                                                                                      /* 3.4 (cont.) */
        !            54:        int i;
        !            55:        unsigned int a : (1 + 3 * 2) / 7;
        !            56:        unsigned int b : (1 + 3 * 2) / 7;
        !            57:        } b, *pb = &b;
        !            58: 
        !            59: #if ANSI8712
        !            60: static int *pi1 = &b.i;
        !            61: static int *pi2 = &(&b)->i;
        !            62: static int *pi3 = (int *)&b;
        !            63: static int i16 = 1 || 2/0;
        !            64: #endif
        !            65: 
        !            66: #if (V7 || ANSI)
        !            67: static enum { e2 = (4 + 3 * 2) / 5, e1 = (1 + 3 * 2) / 7} e; 
        !            68: #endif
        !            69: 
        !            70: static char carray[4 + 3 * 2];
        !            71: 
        !            72: void c3_4()
        !            73:        {
        !            74:        int count, i;
        !            75:        static void (*pf)() = c3_4;
        !            76: 
        !            77:        Filename = "c34.c";
        !            78: 
        !            79:        /* check out constant expressions from initializers */
        !            80: #if ANSI
        !            81:        iequals(__LINE__, i1, 1); 
        !            82: #endif
        !            83:        iequals(__LINE__, i2, -2); 
        !            84:        iequals(__LINE__, i3, ~3); 
        !            85:        iequals(__LINE__, i4, 0); 
        !            86:        iequals(__LINE__, i5, 1); 
        !            87:        iequals(__LINE__, i6, 1); 
        !            88:        iequals(__LINE__, i7, 0); 
        !            89:        iequals(__LINE__, i8, 1); 
        !            90:        iequals(__LINE__, i9, 0); 
        !            91:        iequals(__LINE__, i10, 0); 
        !            92:        iequals(__LINE__, i11, 1); 
        !            93:        iequals(__LINE__, i12, 7); 
        !            94:        iequals(__LINE__, i13, 1); 
        !            95:        iequals(__LINE__, i14, 1); 
        !            96:        iequals(__LINE__, i15, 1); 
        !            97: 
        !            98:        iequals(__LINE__, *pc1, 'a');
        !            99:        iequals(__LINE__, *pc2, 'b');
        !           100:        iequals(__LINE__, *pc3, 'c');
        !           101:        iequals(__LINE__, *pc4, 'd');
        !           102: 
        !           103:        dequals(__LINE__, d1, 1.3);                                                                                                                                                                                     /* 3.4 (cont.) */
        !           104:        dequals(__LINE__, d2, 1.0);
        !           105: 
        !           106: #if ANSI8712
        !           107:        iequals(__LINE__, *pi1, 0);
        !           108:        iequals(__LINE__, *pi2, 0);
        !           109:        iequals(__LINE__, *pi3, 0);
        !           110:        iequals(__LINE__, i16, 1);
        !           111: #endif
        !           112: 
        !           113:        checkthat(__LINE__, pf == c3_4);
        !           114: 
        !           115: 
        !           116:        /* check out constant expressions contexts : bitfields, enums, sizeof array, case. */
        !           117:        b.b = 2;
        !           118:        iequals(__LINE__, b.b, 0);
        !           119: #if (V7 || ANSI)
        !           120:        iequals(__LINE__, e2, 2);
        !           121:        iequals(__LINE__, e1, 1);
        !           122: #endif
        !           123:        iequals(__LINE__, sizeof(carray), 10);
        !           124: 
        !           125:        count = -1;
        !           126:        for (i = 0; i < 4; ++i)
        !           127:                switch (i)
        !           128:                        {
        !           129:                        case (6*2) - (3 * 4):
        !           130:                                count = 0;
        !           131:                                break;
        !           132:                        case 15 % 14:
        !           133:                                count += 1;
        !           134:                                break;
        !           135:                        case 1<<1:
        !           136:                                count += 2;
        !           137:                                break;
        !           138:                        case 0?17:3:
        !           139:                                count += 3;
        !           140:                                break;
        !           141:                        default :
        !           142:                                count = -1;
        !           143:                                break;
        !           144:                        }
        !           145:        iequals(__LINE__, count, 6);
        !           146:        }
        !           147: 
        !           148: #else /* if SKIP34 */
        !           149: 
        !           150: void c3_4() { pr_skip("c3_4: SKIPPED ENTIRELY\n"); }
        !           151: #endif /* SKIP34 */
        !           152: 

unix.superglobalmegacorp.com

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