Annotation of researchv10no/cmd/lcc/ph/c37.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: #include "flags.h"
                     11: #ifndef SKIP37
                     12: /*
                     13:  * 3.7 - External Definitions
                     14:  */
                     15: #include "defs.h"
                     16: 
                     17: void c3_7_1();
                     18: static void c3_7_1a();
                     19: #if (ANSI || V7)
                     20: static void c3_7_1b();
                     21: #endif
                     22: static int seven();
                     23: void c3_7_2();
                     24: 
                     25: void c3_7()
                     26:        {
                     27:        Filename = "c37.c";
                     28:        c3_7_1(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18);
                     29:        c3_7_2();
                     30:        }
                     31: 
                     32: /*
                     33:  * 3.7.1  - Function definitions
                     34:  */
                     35: 
                     36: #if NEW_STYLE_FN_DEF
                     37: typedef void D;
                     38: void c3_7pro(double D, const char *pcc, unsigned char uc)      /* called around line 104 below */
                     39:        {
                     40:        dequals(__LINE__, D, 123.);
                     41:        iequals(__LINE__, pcc[0], 'a');
                     42:        iequals(__LINE__, uc, UCHAR_MAX);
                     43:        }
                     44: typedef int F(void);   /* examples from 3.7.1 */
                     45: F f37, g37;
                     46: int f37(void) { return 37; }
                     47: int g37() { return 37; }
                     48: F *Fp = f37;
                     49: #endif
                     50: 
                     51: 
                     52: 
                     53:                                                                                                                                                                        /* 3.7.1 (cont.) */
                     54: extern void c3_7_1(i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z)
                     55:        register int i;
                     56:        register int j;
                     57:        register int k;
                     58:        register int l;
                     59:        register int m;
                     60:        register int n;
                     61:        register int o;
                     62:        register int p;
                     63:        register int q;
                     64:        register int r;
                     65:        register int s;
                     66:        register int t;
                     67:        register int u;
                     68:        register int v;
                     69:        register int w;
                     70:        register int x;
                     71:        register int y;
                     72:        register int z;
                     73:        {
                     74:        short ss;
                     75:        char c;
                     76:        float f;
                     77:        static long larray[] = {1,2,3,4,5};
                     78: #if (ANSI || V7)
                     79:        unsigned short us;
                     80:        UCHAR uc;
                     81: #endif
                     82: 
                     83:        iequals(__LINE__, i, 1);
                     84:        iequals(__LINE__, j, 2);
                     85:        iequals(__LINE__, k, 3);
                     86:        iequals(__LINE__, l, 4);
                     87:        iequals(__LINE__, m, 5);
                     88:        iequals(__LINE__, n, 6);
                     89:        iequals(__LINE__, o, 7);
                     90:        iequals(__LINE__, p, 8);
                     91:        iequals(__LINE__, q, 9);
                     92:        iequals(__LINE__, r, 10);
                     93:        iequals(__LINE__, s, 11);
                     94:        iequals(__LINE__, t, 12);
                     95:        iequals(__LINE__, u, 13);
                     96:        iequals(__LINE__, v, 14);
                     97:        iequals(__LINE__, w, 15);
                     98:        iequals(__LINE__, x, 16);
                     99:        iequals(__LINE__, y, 17);
                    100:        iequals(__LINE__, z, 18);
                    101: 
                    102: 
                    103:                                                                                                                                                                        /* 3.7.1 (cont.) */
                    104: #if NEW_STYLE_FN_DEF
                    105:        /* a new-style fn def serves as a proto */
                    106:        c3_7pro(123, "ab", ULONG_MAX);
                    107:        iequals(__LINE__, f37(), 37);
                    108:        iequals(__LINE__, g37(), 37);
                    109:        iequals(__LINE__, Fp(), 37);
                    110: #endif
                    111: 
                    112:        /* test conversion of parameters */
                    113:        ss = SHRT_MAX;          /* -> int */
                    114:        c = CHAR_MAX;           /* -> int */
                    115:        f = 3.14;                       /* -> double */
                    116:        c3_7_1a(0,0,0, ss, c, f, larray, seven); 
                    117: #if (ANSI || V7)
                    118:        us = MAX_USHORT;
                    119:        uc = MAX_UCHAR;
                    120:        c3_7_1b(0,0,0, (int)us, (int)uc, 0,0,0);
                    121: #endif
                    122: 
                    123:        }
                    124: 
                    125: static void c3_7_1a(x1,x2,x3, ss, c, f, larray, pf)
                    126:        /* order should not matter */
                    127:        /* no argument declaration defaults to int */
                    128:        int (*pf)();
                    129:        long *larray;
                    130:        double f;
                    131:        {
                    132:        long l;
                    133: 
                    134:        iequals(__LINE__, ss, (int)(short)SHRT_MAX);
                    135:        iequals(__LINE__, c, (int)(char)CHAR_MAX);
                    136:        fequals(__LINE__, f, 3.14);
                    137: 
                    138:        /* the array was passed as a pointer to the first element */
                    139:        for (l = 0; l < 5; ++l)
                    140:                lequals(__LINE__, l+1, larray[l]);
                    141:        for (l = 1; l <= 5; ++l)
                    142:                lequals(__LINE__, l, *larray++);
                    143: 
                    144:        /* the funtion name was passed as a pointer to the function */
                    145:        iequals(__LINE__, (*pf)(), 7);
                    146: 
                    147:        /* each parm is an lvalue */
                    148:        f = dvalue(1.);
                    149:        dequals(__LINE__, f, 1.);
                    150:        } /* end c3_7_1a */
                    151: 
                    152: 
                    153:                                                                                                                                                                        /* 3.7.1 (cont.) */
                    154: static int seven()
                    155:        {
                    156:        return(7);
                    157:        }
                    158: 
                    159: #if (ANSI || V7)
                    160: /* no-argument-declaration defaults to int */
                    161: static void c3_7_1b(x1,x2,x3, us, uc, x4, x5, x6)
                    162:        {
                    163:        checkthat(__LINE__, us == (int)MAX_USHORT);     /* same implem-def convert as the arg */
                    164:        checkthat(__LINE__, uc == (int)MAX_UCHAR);      /* same implem-def convert as the arg */
                    165:        }
                    166: #endif
                    167: 
                    168: 
                    169: 
                    170: 
                    171: 
                    172: 
                    173: 
                    174: 
                    175: 
                    176: 
                    177: 
                    178: 
                    179: 
                    180: 
                    181: 
                    182: 
                    183: 
                    184: 
                    185: 
                    186: 
                    187: 
                    188: 
                    189: 
                    190: 
                    191: 
                    192: 
                    193: 
                    194: 
                    195: 
                    196: 
                    197: 
                    198: 
                    199: 
                    200: 
                    201: 
                    202: 
                    203: /*
                    204:  * 3.7.2 - External object definitions
                    205:  */
                    206: int nodef;
                    207: #if ANSI
                    208: int hasdef;
                    209: #else
                    210: int hasdef = 4;
                    211: #endif
                    212: 
                    213: /* the following external object definition examples were written
                    214:  * by Plum for the X3J11 standard (slightly revised)
                    215:  */
                    216: #if ANSI
                    217: int i1 = 1;
                    218: static int i2 = 2;
                    219: extern int i3 = 3;
                    220: int i4;
                    221: static int i5;
                    222: 
                    223: int i1;
                    224: int i3;
                    225: int i4;
                    226: 
                    227: extern int i1, i2, i3, i4, i5;
                    228: #endif
                    229: 
                    230: void c3_7_2()
                    231:        {
                    232: #if ANSI
                    233:        iequals(__LINE__, i1, 1);
                    234:        iequals(__LINE__, i2, 2);
                    235:        iequals(__LINE__, i3, 3);
                    236:        iequals(__LINE__, i4, 0);
                    237:        iequals(__LINE__, i5, 0);
                    238: #endif
                    239: 
                    240:        /* some compilers will create nodef in the linker, some in the compiler.
                    241:         * But all of them must be == 0.
                    242:         */
                    243:        iequals(__LINE__, nodef, 0);
                    244:        iequals(__LINE__, hasdef, 4);
                    245:        }
                    246: #if ANSI
                    247: int hasdef = 4;
                    248: #endif
                    249: 
                    250: 
                    251: 
                    252: 
                    253: #else /* if SKIP37 */
                    254: 
                    255: void c3_7() { pr_skip("c3_7: SKIPPED ENTIRELY\n"); }
                    256: #endif /* SKIP37 */
                    257: 

unix.superglobalmegacorp.com

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