Annotation of coherent/b/bin/c/Changes, revision 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.