|
|
1.1 ! root 1: hash constants ! 2: ! 3: ? prototypes for generated functions at start under -A ! 4: ! 5: ? logical*1 as separate type? (currently treated as LOGICAL, with error msg). ! 6: ! 7: complex function zork*16(x) ? [obvious change to gram.head, i.e., ! 8: changing ! 9: | type SFUNCTION new_proc entryname arglist ! 10: { entrypt(CLPROC, $1, varleng, $4, $5); } ! 11: to ! 12: | type SFUNCTION new_proc entryname lengspec arglist ! 13: { entrypt(CLPROC, $1, $5, $4, $6); } ! 14: doesn't work: it thinks functionzork is one word] ! 15: ! 16: f8x control structures: for labels of DO, add to defines.h: ! 17: #define CLLABEL 8 ! 18: #define PLABEL 5 ! 19: for vclass and vprocclass, resp. ! 20: ! 21: ! 22: ------------- ! 23: ! 24: /n/research/netlib/f2c/F2C invoked /n/crab/usr/ehg/bin/netlib.f2c . ! 25: ! 26: ------------- ! 27: ! 28: 11 July 1989: ! 29: No args to f2c ==> filter (read stdin, write stdout). ! 30: ! 31: 17 July 1989: ! 32: -ext ==> complain of f77 extensions (automatic, static, ! 33: double complex, constants [binary, octal, hex]). ! 34: ! 35: 17 July 1989 ! 36: -z ==> do not recognize double complex intrinsics. ! 37: ASSIGNED var ==> char *var_fmt rather than char *Var. ! 38: ! 39: 3 Aug. 1989 ! 40: -a ==> use AUTOMATIC storage for variables that are neither ! 41: initialized nor involved in EQUIVALENCEs (debug option). ! 42: ! 43: 4 Aug. 1989 ! 44: Bug in output.c: str_fmt should have "%%" rather than "%". ! 45: Format_data.c: k was too small by one in the malloc call ! 46: at the start of make_one_const(). ! 47: ! 48: 8 Aug. 1989: ! 49: New flag -r8 promotes REAL to DOUBLE PRECISION, COMPLEX to ! 50: DOUBLE COMPLEX (a la Berkeley f77). ! 51: ! 52: 10 Aug. 1989: ! 53: Allow \n in ! 54: print *,'\nHello, world!' ! 55: Tweaks to -I2, making it more like f77's -I2; new flag -i2. ! 56: -[Ii]2 are two flavors of rendering INTEGER as short rather ! 57: than long int: -i2 goes further and assumes modified lib[FI]77. ! 58: ! 59: 11 Aug. 1989: ! 60: Quietly allow names up to 8 characters long (except under -ext). ! 61: Complain about, then ignore arguments to a main program. ! 62: Under -u, complain just once about each undeclared variable. ! 63: ! 64: ! 65: 31 Aug. 1989: ! 66: putx inserted in putaddr (putpcc.c) so A(min(i,j)) works, ! 67: with A an array; the change: ! 68: < return (expptr) p; ! 69: --- ! 70: > if (p->isarray && p->memoffset) ! 71: > p->memoffset = putx(p->memoffset); ! 72: > return (expptr) p; ! 73: This required augmenting the simplification logic in mkexpr() ! 74: to turn A(((...)<<2)/4) into A(...). Now multiplications by ! 75: integer constant powers of 2 are sometimes rendered as shifts, ! 76: (only in I/O stmts?) where before they were multiplications. ! 77: This may be a result of the putx in putaddr. ! 78: ! 79: 31 Aug. 1989: ! 80: 7 and 8 character C and I/O keywords added to c_keywords. ! 81: Rewrote in_vector to use binary search and simply know that ! 82: it's looking at c_keywords -- somewhat faster (e.g. 20%), but ! 83: these lookups should be done just once, rather than each time ! 84: the variable is printed out. ! 85: ! 86: 31 Aug. 1989: ! 87: A file named block_data was left in the current directory ! 88: when there was block data. Now it's /tmp/f2cnnnnn_blkd. ! 89: ! 90: 31 Aug. 1989: ! 91: LOGICAL*1 type stmts now generate just one error msg ! 92: (rather than one per variable) and don't inhibit output of ! 93: the .c file; LOGICAL*1 is simply treated as logical. ! 94: ! 95: 31 Aug. 1989: ! 96: ! 97: subroutine foo(x) ! 98: integer x(10) ! 99: write(*,x) ! 100: end ! 101: ! 102: now works (as it did for f77); under -ext, it elicits a message. ! 103: For completeness, ! 104: ! 105: subroutine foo(x) ! 106: integer x(10) ! 107: write(*,x(3)) ! 108: end ! 109: ! 110: now works similarly. ! 111: ! 112: 5 Sept. 1989: ! 113: Fixed botch in argument passing of substrings of equivalenced variables. ! 114: ! 115: 15 Sept. 1989: ! 116: Warn about incorrect code generated when a character-valued ! 117: function is not declared external and is passed as a parameter ! 118: before it is invoked. (For f77, this is the old "Code may be wrong" ! 119: message, which now should appear when it may be appropriate, rather ! 120: than when it is not.) Example: ! 121: ! 122: subroutine foo(a,b) ! 123: character*10 a,b ! 124: call goo(a,b) ! 125: b = a(3) ! 126: end ! 127: ! 128: 18 Sept. 1989: ! 129: Complain about overlapping initializations. ! 130: ! 131: 20 Sept. 1989: ! 132: Warn about names declared EXTERNAL but never referenced; ! 133: include such names as externs in the generated C (even ! 134: though most C compilers will discard them). ! 135: ! 136: 21 Sept. 1989: ! 137: Fix bug encountered in the following (a combination of ! 138: an EXTERNAL subroutine parameter and IMPLICIT CHARACTER): ! 139: ! 140: subroutine b(asmbly,x) ! 141: implicit character*7(a-z) ! 142: external asmbly ! 143: call asmbly(x) ! 144: end ! 145: ! 146: 21 Sept. 1989: ! 147: New option -w8 to suppress complaint when COMMON or EQUIVALENCE ! 148: forces word alignment of a double. ! 149: ! 150: 22 Sept. 1989: ! 151: Under -A, ensure that floating constants contain either a decimal ! 152: point or an exponent field. ! 153: Fixed bugs with ichar: nonarithmetic operand encountered in... ! 154: ! 155: subroutine foo(ch,i) ! 156: common /zork/ x ! 157: character*1 x(256), ch, y ! 158: integer i ! 159: x(ichar(ch)) = char(i) ! 160: end ! 161: ! 162: and wrong ichar(ch) (missing *) in... ! 163: ! 164: subroutine bar(ch,i) ! 165: character*1 ch ! 166: integer i ! 167: i = ichar(ch) ! 168: end ! 169: ! 170: Fixed bug with intrinsic char function: wrong code for char(b) in... ! 171: ! 172: subroutine george(a,b) ! 173: character*11 a ! 174: integer b ! 175: a(b:b) = char(b) ! 176: end ! 177: ! 178: Restored f77's character*1 optimizations: neither s_cmp nor s_copy for... ! 179: ! 180: subroutine zork(a,b) ! 181: character*1 a,b*3,c,d(4) ! 182: if (c .lt. a) c = a ! 183: if (d(3) .gt. c) d(3) = c ! 184: if (b(1:1) .eq. d(2)) b(2:2) = d(2) ! 185: end ! 186: ! 187: Supplied semicolon missing before "} else {" in the following... ! 188: ! 189: subroutine bop(n,L) ! 190: logical L ! 191: integer i, nok ! 192: ! 193: if (L) then ! 194: do 10 i = 1, n ! 195: if (nok(i) .gt. 0) goto 20 ! 196: 10 continue ! 197: 20 continue ! 198: else ! 199: call glop(idnt(3)) ! 200: endif ! 201: end ! 202: ! 203: Don't declare variables used only in defining statement functions. ! 204: Always assume floating-point valued routines in libF77 return ! 205: doubles, even under -R. ! 206: ! 207: 23 Sept. 1989: ! 208: Arguments to subroutines having multiple entry points were ! 209: sometimes lost. Example: na was omitted from dlu_0_ in ! 210: ! 211: subroutine dlu (na,a,nb,b,error) ! 212: implicit integer(i-n),double precision(a-h,o-z) ! 213: dimension a(na,na,1),b(na,1) ! 214: integer error ! 215: entry dlu1f (na,a,nb,b,error) ! 216: call goo(na,a,nb,b,error) ! 217: end ! 218: ! 219: Offsets were sometimes lost or added twice on equivalenced ! 220: variables in certain contexts; structure names were omitted ! 221: from character variables in COMMON that were used as formats ! 222: or internal files. An example that had several such errors: ! 223: ! 224: subroutine boo12 ! 225: common /zork/ a, b, struct ! 226: character*80 a, b, struct,d ! 227: character*40 e(2), f ! 228: equivalence(b,d), (e(2),f) ! 229: write(f,10) f ! 230: write(b,10) a ! 231: write(struct,10) a ! 232: 10 format(a80) ! 233: write(d,10) d ! 234: if (f(4:4) .lt. b(5:5)) f(6:6) = d(7:7) ! 235: struct = b ! 236: write(b(10:30),10) b(12:32) ! 237: write(d(15:25),10) d(20:30) ! 238: write(e(2),f) ! 239: write(f(30:40), f(50:60)) ! 240: end ! 241: ! 242: Repaired invalid P1_HEAD class encountered by ! 243: ! 244: 10 format(' hello, world!') ! 245: write(6,10) ! 246: end ! 247: ! 248: 28 Sept. 1989: ! 249: Warn about variables that appear only in data stmts; don't emit them. ! 250: ! 251: 2 Oct. 1989: ! 252: Fix bugs in character DATA for noncharacter variables ! 253: involved in EQUIVALENCE. ! 254: Treat noncharacter variables initialized (at least partly) with ! 255: character data as though they were equivalenced -- put out a struct ! 256: and #define the variables. This eliminates the hideous and nonportable ! 257: numeric values that were used to initialize such variables. ! 258: IMPLICIT NONE treated as IMPLICIT UNDEFINED(A-Z) . ! 259: New option -!I disables includes (for netlib). ! 260: Bail out when given an invalid flag. ! 261: ! 262: 5 October 1989: ! 263: Change retval to ret_val in multiple-entry subprograms. ! 264: Change ret_val_nnn to ret_val in functions. ! 265: Omit unused dim_ values for final array extents. ! 266: New option -W nnn specifies nnn characters/word (for Hollerith data). ! 267: New naming scheme for generated variables; such "system variables" ! 268: are now sorted by type, and more of them are recycled (and fewer declared). ! 269: ! 270: 6 October 1989: ! 271: Bug fix: x(i:min(i+10,j)) elicited "Can't handle opcode 31 yet". ! 272: Simplify expressions (i+const1)-(i+const2) to const1-const2, ! 273: where i is a scalar integer variable (and const1 or const2 may be ! 274: missing ==> taken to be 0). Thus ! 275: x(i:i) = y[j+3:j+3] ! 276: (both expressions having length 1) is now done in-line, ! 277: without a call on s_copy. ! 278: ! 279: 7 October 1989: ! 280: Initialize uninitialized portions of character string arrays to 0 ! 281: rather than to blanks. ! 282: ! 283: 8 October 1989: ! 284: New options -g for # nn "file", -c for /*< Fortran source >*/. ! 285: ! 286: 9 October 1989: ! 287: ! recognized as in-line comment delimiter (a la Fortran 88). ! 288: ! 289: apparent bug in Microsoft C 5.10: gram.c: must add ! 290: static void zap(long n) {} ! 291: and insert ! 292: zap(varleng); ! 293: after the C generated for the first lengspec rule in gram.dcl ({ $$ = varleng; }). ! 294: ! 295: MSDOS: cl -nologo -AL -Gt28 -Os -c ! 296: --> cl -nologo -AL -Gt28 -Odt -c ! 297: ! 298: cl -c -Alfw -Gt28 gram.c ! 299: gram.c(676): warning C4058: address of automatic (local) variable taken, DS != SS ! 300: gram.c(756): " ".... ! 301: ! 302: Optimization bug with proc.c: newentry omitted segment from return value. ! 303: ! 304: Error on line 235 of gqtst.f: wrong number of subscripts on [garbage]
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.