Annotation of coherent/b/bin/c/Changes, revision 1.1.1.1

1.1       root        1: Steve's cc386 compiler change log
                      2: Begun 1/4/93, earlier logs in Changes.1992.
                      3: 
                      4: Tue Jan  5 12:14:38 1993 PST
                      5: n0/gdecl.c
                      6:                In gdecl(), s==LPAREN, deleted "aok = 0;" line.
                      7:                nigel complained that e.g.
                      8:                        int (f)(arg) int arg; {}
                      9:                confused the parser (because of the parens around the "f").
                     10:                This line looks odd to me, but nigel had a good reason for
                     11:                wanting it to work, and more to the point it is perfectly
                     12:                acceptible syntax for both K&R and ANSI.
                     13:                Also trivial cosmetic changes.
                     14: 
                     15: Tue Jan  5 17:35:34 1993 PST
                     16: n1/i386/tables/leaves.t
                     17:                V4.0.N: added PNDP to code table entry to load addressible
                     18:                doubles in argument context, so that e.g. fn(d) generates
                     19:                        push    d+4
                     20:                        push    d
                     21:                for addressible d rather than
                     22:                        fldl    d
                     23:                        call    _dp87
                     24:                as before.
                     25: 
                     26: Tue Jan  5 21:08:45 1993 PST
                     27: coh/cc.c
                     28:                In runld(), added isvariant(VNDP) code to look for rts
                     29:                in /lib/ndp and pass -L/lib/ndp to ld, as suggested by cef.
                     30:                Before, e.g. "cc -VNDP a.c -f" would execute
                     31:                        /bin/ld -X -o a /lib/crts0.o -u _dtefg a.o -lc
                     32:                Now, when -VNDP is specified, it looks for the rts in /lib/ndp
                     33:                and passes -L/lib/ndp to ld, as in:
                     34:                        /bin/ld -X -L/lib/ndp -o a /lib/ndp/crts0.o -u _dtefg a.o -lc
                     35:                and you get the right rts and library when you link.
                     36: 
                     37: Tue Jan 26 09:50:55 1993 PST
                     38: coh/cc.c
                     39:                Added -L/usr/lib/ndp to ld invocation if -VNDP.
                     40: n1/i386/tables/leaves.t
                     41:                Added "fwait" at beginning of double push entry (cf. 1/5/93
                     42:                change above), to completion of pending NDP operations.
                     43: 
                     44: Thu Jan 28 10:27:00 1993 PST
                     45: cpp/cpp.c
                     46:                Added -VCPLUS option for Comeau.  Modified usage() message.
                     47:                Added _addargs() call #if COHERENT to expand CPPHEAD, CPPTAIL.
                     48: 
                     49: Tue Feb  9 10:47:51 1993 PST
                     50: coh/cc.c
                     51: common/diag.c
                     52:                V4.1.1: moved diagnostic output from stdout to stderr.
                     53: 
                     54: Wed Feb 10 16:19:54 1993 PST
                     55: coh/cc.c
                     56: common/diag.c
                     57: h/var.h
                     58:                V4.1.2: deleted unimplemented VCALLS option, moved VLIB,
                     59:                added VNOWARN option to suppress warning and strict messages.
                     60: 
                     61: Thu Feb 11 13:30:40 1993 PST
                     62: coh/Makefile
                     63:                Changed "cc" to "$(CC)" for gcc compilation.
                     64: common/bput.c
                     65:                Changed "char *cp;" to "unsigned char *cp;" because gcc
                     66:                complained about pointer subtraction char * minus uchar *.
                     67: n1/out.c
                     68:                Added cast because of gcc complaint about pointer subtraction,
                     69:                as above.
                     70: n2/i386/outcoff.c
                     71:                In write_sym(), initialize n_type and n_numaux entries
                     72:                appropriately.  The gcc-compiled version was writing garbage
                     73:                in symbol entries because these initializations were missing;
                     74:                the cc-compiled version must have worked by accident.
                     75: 
                     76: Fri Feb 26 09:58:09 1993 PST
                     77: h/i386/cppmch.h
                     78: n0/cc0.c
                     79:                V4.1.3: at nigel's request, for ISO compliance, cpp now defines
                     80:                not only COHERENT, MWC, _IEEE and _I386, but also
                     81:                __COHERENT__, __MWC__, __IEEE__, and __I386__.
                     82: 
                     83: Mon Mar  1 08:53:08 1993 PST
                     84: n1/i386/tables/div.t
                     85: n1/i386/tables/mul.t
                     86: n1/i386/tables/rem.t
                     87:                V4.1.4: User Alexander Shendi reported that the line
                     88:                        cp = (char *)(((int) cp1) % ((int) cp2));
                     89:                gave an internal error, actually a no match on the '%';
                     90:                The code tables expected the result of the '%'
                     91:                to be LONG (int or uint), and the (char *) cast on the '%' node
                     92:                caused the type to mismatch. The same code also failed for '*'
                     93:                and '/'.  The code sucks, but it is legal and there's no
                     94:                reason why it should fatal the compiler.  Changed the node
                     95:                type on appropriate code table entries from "LONG" to "DWORD"
                     96:                and now it works.
                     97: 
                     98: Tue Mar  2 17:54:00 1993 PST
                     99: n0/cc0.c
                    100:                V4.1.5: hal complained that
                    101:                        typedef foo baz;
                    102:                where foo is not defined gave
                    103:                        1: a.c: missing semicolon
                    104:                which is none too clear.  Now it says
                    105:                        1: a.c: illegal typedef
                    106:                instead.
                    107: 
                    108: Wed Mar  3 17:45:30 1993 PST
                    109: n0/expr.c
                    110:                V4.1.6: hal complained about the strict warning produced by:
                    111:                        struct s1 { int s_i; } s1;
                    112:                        struct { int s2_i; } s2;
                    113:                        f() { s2.s_i = s1.s_i; }
                    114:                which was
                    115:                        3: b.c: Strict: structure ".1" does not contain member "s_i"
                    116:                where the ".1" is the compiler-generated tag for the untagged
                    117:                structure.  Now the warning message says
                    118:                        3: b.c: Strict: structure does not contain member "s_i"
                    119:                instead.
                    120: 
                    121: Wed Mar 24 09:25:43 1993 PST
                    122: n2/i386/outcoff.c
                    123:                V4.1.7: changed the code which constructs derived type info
                    124:                for DT_ARY, DT_PTR and DT_FCN in keeping with <coff.h> change.
                    125: 
                    126: Thu Apr  1 15:31:33 1993 PST
                    127: n3/i386/igen.c
                    128:                Write "\t.intelorder\n" near start of assembler output file.
                    129: 
                    130: Wed Apr  7 22:02:30 1993 PDT
                    131: n0/gdecl.c
                    132:                V4.1.8: In genum(), changed
                    133:                        deflookup(SL_VAR, LL_EXT);
                    134:                to
                    135:                        deflookup(SL_VAR, ll);
                    136:                to enter enumeration members in the symbol table
                    137:                at the current lexical level, not at external level.
                    138:                User H. P. Heidinger reported that e.g.
                    139:                        f() { enum e { e1 } fe; }
                    140:                        g() { enum e { e0, e1 } ge; }
                    141:                gave a bogus redeclaration error, because the local enum
                    142:                members were entered at the wrong lexical level.
                    143: 
                    144: Thu Apr  8 14:54:51 1993 PDT
                    145: n0/init.c
                    146:                V4.1.9:  User H. P. Heidinger complained (as many have before)
                    147:                that bitfield initialization was not supported; e.g.
                    148:                        struct s {
                    149:                                int     s_bit0:1;
                    150:                                int     s_bit1:1;
                    151:                        } s = { 1, 1 };
                    152:                previously got a "cannot initialize bitfields" error
                    153:                from the parser.  Added "bfinit()", now it works (I hope!).
                    154: 
                    155: Mon Apr 12 11:47:33 1993 PDT
                    156:                V4.2.0:  Changed constant folder to fold unsigned constants
                    157:                correctly and to fold double constants.
                    158: h/i386/mch.h
                    159:                Added compilation option FOLD_DOUBLES.
                    160:                This assumes host and target use same fp representation.
                    161:                Added typedefs for uival_t and ulval_t, the unsigned types
                    162:                corresponding to ival_t and lval_t.
                    163: h/cc0.h
                    164:                Recoded opdope table constants from octal to hex.
                    165:                Added new constant FOLD, indicating op can be folded.
                    166:                Separated extern function definitions from variables.
                    167:                Added dval_to_d() and d_to_dval, defined in bind.c.
                    168: n0/i386/bind.c
                    169:                Added #if FOLD_DOUBLES code for dval_to_d() and d_to_dval(),
                    170:                reversing byte order to convert host double to/from DCON.
                    171: n0/dope.c
                    172:                Added FOLD to opdope for operations which support constant
                    173:                folding; this allows fold0() to be much more efficient.
                    174: n0/fold.c
                    175:                Extensive changes to handle typed constant folding (including
                    176:                double constant folding).  Previously, the constant folder
                    177:                understood int and long constants but did not understand
                    178:                unsigned or double constants.  This meant
                    179:                (1) it sometimes folded unsigned constants incorrectly, and
                    180:                (2) it could not compile programs with constant double
                    181:                expressions in initializers.
                    182:                The new double constant folding code uses the host fp
                    183:                arithmetic, but it is conditionalized #if FOLD_DOUBLES so that
                    184:                it can be excluded for cross-compilation if desired.
                    185: 
                    186: Mon Apr 12 13:32:45 1993 PDT
                    187: n1/mtree1.c
                    188:                Cleaned up comments and formatting, no substantive changes.
                    189: 
                    190: Mon Apr 12 15:36:54 1993 PDT
                    191: n1/mtree1.c
                    192:                Rewrote fold1() for clarity.  The handling of typed constants
                    193:                here needs to be fixed up like n0/fold.c/fold0() above.
                    194: n1/i386/tables/aadd.t
                    195:                V4.2.1: Changed the right argument types for two entries
                    196:                in the += code table from LONG to DWORD to fix a "no match"
                    197:                bug reported by H. P. Heidinger:
                    198:                        cp += (int)buf;
                    199:                previously no matched for auto char buf[1].
                    200:                And why, you might ask, should the right type be DWORD
                    201:                rather than LONG, i.e. why should allowing pointers on the
                    202:                right matter in this case, where the right is not pointer?
                    203:                The parser, knowing that T_PTR and T_INT are bit compatible,
                    204:                changes the "&" node type it outputs from PTR to S32
                    205:                because of the cast and then writes the right arg as
                    206:                        &@ S32 
                    207:                          Aid S32 at -12
                    208:                (actually with a scaling multiply by 1 around it).
                    209:                The automatic then gets expanded, resulting in
                    210:                        &@ S32 
                    211:                          *@ S32 flag=3000
                    212:                            + Ptr flag=800
                    213:                              Reg Ptr flag=400 %ebp
                    214:                              Icon S32 flag=a8 -12
                    215:                and the & * foo gets simplified to foo, leaving         
                    216:                        + S32 flag=800
                    217:                          Reg Ptr flag=400 %ebp
                    218:                          Icon S32 flag=a8 -12
                    219:                So far so good, the type of the add node is still S32.  But
                    220:                then the associative expression folder in n1/mtree1.c/fold1()
                    221:                looks at this and adjusts the top type, as it must for
                    222:                additions involving ints and pointers which have been
                    223:                rearranged; it adjusts the ADD node type to
                    224:                        + Ptr flag=800
                    225:                          Reg Ptr flag=400 %ebp
                    226:                          Icon S32 flag=a8 -12
                    227:                and this results in the "no match" in aadd.t because the
                    228:                right type is inappropriate.  Changing the right types in
                    229:                aadd.t fixes the problem.
                    230: 
                    231: Mon Apr 12 17:08:22 1993 PDT
                    232: n1/i386/tables/asub.t
                    233:                V4.2.2: identical change to above for -= instead of +=.
                    234: 
                    235: Thu Apr 15 12:06:35 1993 PDT
                    236: coh/cc.c
                    237:                V4.2.3: Jeff Moskow ([email protected], 1-508-448-3959)
                    238:                reported a bug which I traced to cc.c.
                    239:                        cc -DSTRING="\"\
                    240:                        12345678901234567890123456789012345678901234567890\
                    241:                        <nine more lines identical to the above>
                    242:                        \"" a.c
                    243:                caused odd behavior.  The driver was copying each cpp arg
                    244:                into a static (i.e. in .data) 64-character buffer without
                    245:                bounds checking, eventually overwriting the static data
                    246:                used to initialize the keyword table.  Simplified the way
                    247:                it works (the cpp arg copy was usually unnecessary!)
                    248:                and added appropriate bounds checking.  Finally figured out
                    249:                the hacky code which allows runpp() and runld() to grovel
                    250:                in the args when a single cc arg contains multiple arg types,
                    251:                after looking at it many times before.  Changed the _I386
                    252:                default for "-r" compilation from "l.out" to "a.out".
                    253:                Added usage() as separate routine, mentioning -? option.
                    254:                Added -? option to print verbose usage information.
                    255:                Cleaned up some comments and added some others.
                    256: 
                    257: Thu Apr 15 12:53:29 1993 PDT
                    258: coh/cc.c
                    259:                Added a few comments.  Deleted -k from verbose usage message,
                    260:                since neither ld286 nor ld386 understands it.
                    261: 
                    262: Fri Apr 16 12:13:08 1993 PDT
                    263: n0/expr.c
                    264:                V4.2.4: In build(), case QUEST, added code to check if the
                    265:                condition type is computational and insert a conversion node
                    266:                if not. A bug reported by Jeff Moscow included code of the form
                    267:                        a = ((short)b) ? c : d;
                    268:                While the noncomputational condition type did not appear to
                    269:                cause any problems, it looks better if the type is correct.
                    270: n1/mtree0.c
                    271:                For case CONVERSION/CAST, after the modtree(lp, ...) call,
                    272:                check to see if the modified lp op is COMMA or QUEST;
                    273:                the code above which distributes the conversion over the
                    274:                COMMA or QUEST needs to be executed again in this case,
                    275:                e.g. for (type1)(type2)((a)?b:c).  At the same time, added
                    276:                a test for (type1)(type2)type1 where type2 is wider,
                    277:                in which case both the conversions are irrelevant.
                    278:                Other minor nonsubstantive changes.
                    279: n1/i386/table0.c
                    280:                Added clarifying comments, no substantive changes.
                    281: n1/i386/tables/leaves.t
                    282:                Added comment about the asm.c kludge below to the appropriate
                    283:                code table entry.  No substantive changes.
                    284: n2/i386/asm.c
                    285:                In assemble(), case OF_MOV, added code to kludge e.g.
                    286:                        movw    %ax, %edi
                    287:                to
                    288:                        movw    %ax, %di
                    289:                just like the similarly disgraceful kludge for ZMOV[SZ]W.
                    290:                This fixes (after a fashion) a bug reported by Jeff Moscow:
                    291:                for short s and int struct member i, his example was
                    292:                        a = (short)((((short)(p->i)) ? ((short)(p->i)) : (2)));
                    293:                after macro expansion, but the much simpler
                    294:                        s = (short)(int)(short)i;
                    295:                has the same bug, namely a fatal aerr() on the "movw" above.
                    296:                Spent a lot of time trying to fix it cleanly, but
                    297:                without success.  The fix includes the similar char case (movb),
                    298:                but I could not make that aerr() happen, the difference is
                    299:                somehow related to the PBYTE and bytereg() code.
                    300: n2/i386/outcoff.c
                    301:                In setrefnum(), added ignore flag to allow compilation -VTPROF
                    302:                to work without -S or -g.  The output writer now ignores the
                    303:                table profiling debug items in this case.
                    304: 
                    305: Mon Apr 19 14:25:47 1993 PDT
                    306: n2/i386/asm.c
                    307:                V4.2.5: fixed kludge of 4/16/93, the previous implementation
                    308:                was seriously buggy, breaking byte and word mov instructions.
                    309: 
                    310: Thu Apr 22 00:26:55 1993 PDT
                    311: coh/cc.c
                    312:                V4.2.6: added global "int monolithic = 1;" #if MONOLITHIC.
                    313:                The -tBNM options reset this and tempsize to 0 to tell the
                    314:                driver to use phases instead of monolithic compilation and
                    315:                to use disk temps instead of memory temps.  Changed
                    316:                #if MONOLITHIC conditionalized code accordingly.
                    317: 
                    318: Fri Apr 23 16:30:30 1993 PDT
                    319: n0/sharp.c
                    320:                V4.2.7: In getfname(), added code to expand ID in filename,
                    321:                so that e.g.
                    322:                        #define FOO     <stdio.h>
                    323:                        #include FOO
                    324:                works as expected.
                    325: 
                    326: Wed May  5 08:52:24 1993 PDT
                    327: n0/cc0.c
                    328: n0/gdecl.c
                    329:                V4.2.8:  The 1/5/93 change above to allow the parser to
                    330:                understand declarators like "int (f)(arg) int arg; {}"
                    331:                screwed up the offsets assigned to parameters
                    332:                of functions returning pointers to functions,
                    333:                as recently reported by Harry Pulley.
                    334:                For example, in
                    335:                        int (*fpfi(a, b))() int a, b; { ... }
                    336:                the compiler generated incorrect code for references
                    337:                to a and b in fpfi.  In cc0.c/xdef(), now set "nargs = 0;"
                    338:                before calling gdecl().  In gdecl(), set argok to 1 only
                    339:                if nargs==0.  After the recursive call to gdecl() for LPAREN,
                    340:                reset argok to 0 if the recursive call set nargs != 0.
                    341: 
                    342: Fri May 14 13:20:27 1993 PDT
                    343: n0/expr.c
                    344:                V4.3.0: In build(), case QUEST, the change of V4.2.4 on 4/16/93
                    345:                for ?: with noncomputational type in the condition was wrong
                    346:                for objects with nonempty DIM lists.
                    347:                This fixes a bug reported today by Jeff Moskow: e.g.
                    348:                        localjeff = jeff ? jeff : b;
                    349:                where all the objects are pointers to functions returning int
                    350:                generated a byte rather than long compare.
                    351: 
                    352: Thu Jun  3 17:38:09 1993 PDT
                    353: coh/cc.c
                    354:                V4.3.1: Added -VVERSION number to print version number
                    355:                to standard error.
                    356: 
                    357: Wed Jul  7 10:58:50 1993 PDT
                    358: n1/i386/mtree2.c
                    359:                User Douglas J. Toltzman <[email protected]> reported a
                    360:                bug with ushort (also char, uchar, short) bitfield assignments.
                    361:                In the field extraction tree modifier modefld():
                    362:                deleted code which made tree top noncomputational,
                    363:                changed the shift widths from assuming byte or word width
                    364:                to always assuming dword,
                    365:                added code to always treat field width 1 as unsigned,
                    366:                added clarifying comments.
                    367: 
                    368: Wed Jul  7 13:56:31 1993 PDT
                    369: n2/i386/outcoff.c
                    370:                User Gabor Zahemsky <[email protected]> reported a bug where -g
                    371:                caused a cbotch() in outdloc(), basically because a #line
                    372:                directive made the label at the start of a function fall at
                    373:                line 0 of the function.  The output writer now distinguishes
                    374:                function vs. line number LNNUM entries by a new flag field
                    375:                rather than by the line number being 0 or nonzero.
                    376: 
                    377: Wed Jul  7 20:39:06 1993 PDT
                    378: coh/cc.c
                    379: h/var.h
                    380:                Added -VREADONLY option to recognize "readonly" keyword, after
                    381:                nigel complained about it allowing "readonly" by default.
                    382:                Now it recognizes "readonly" only if -VREADONLY.
                    383: 
                    384: Thu Jul  8 12:05:22 1993 PDT
                    385: coh/cc.c
                    386: h/cc0.h
                    387: n0/cc0.c
                    388: n0/cc0key.c
                    389: n0/expand.c
                    390:                Added predefined cpp macro __BASE_FILE__ at nigel's request.
                    391:                __BASE_FILE__ expands to a string giving the name of the
                    392:                original source file being compiled.  This is like the
                    393:                __FILE__ macro, except that within a #included header file
                    394:                __FILE__ expands to the header file name while __BASE_FILE__
                    395:                expands to the original source file name.
                    396: 
                    397: Wed Jul 14 14:05:00 1993 PDT
                    398: n0/dope.c
                    399: n0/fold.c
                    400:                nigel complained that e.g.
                    401:                        char a[(1,2)];
                    402:                (that's a ','-operator, result of cpp macro expansion,
                    403:                not a multi-dim. array) would not compile, issuing an
                    404:                "array bound must be a constant" message.
                    405:                The parser's constant folder previously ignored COMMA,
                    406:                so it was always nonconstant; now COMMA with constants on both
                    407:                sides returns the RHS, and the above compiles as expected.
                    408: 
                    409: Wed Jul 28 13:25:46 1993 PDT
                    410: n0/cpp.c
                    411:                V4.3.4: In attempting to run Intek C++, Jay discovered that
                    412:                "/lib/cpp -C" malfunctioned on comments containing
                    413:                single or double quotes (' or ").  Now cpp in -C mode
                    414:                ignores ' or " within comments; this includes C++-style
                    415:                online //-delimited comments if -VCPLUS is specified.

unix.superglobalmegacorp.com

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