OSDN Git Service

Initial revision
[pf3gnuchains/gcc-fork.git] / gcc / f / NEWS
1 This file lists recent changes to the GNU Fortran compiler.  Copyright
2 (C) 1995, 1996 Free Software Foundation, Inc.  You may copy,
3 distribute, and modify it freely as long as you preserve this copyright
4 notice and permission notice.
5
6 News About GNU Fortran
7 **********************
8
9    Changes made to recent versions of GNU Fortran are listed below,
10 with the most recent version first.
11
12    The changes are generally listed with code-generation bugs first,
13 followed by compiler crashes involving valid code, new features, fixes
14 to existing features, new diagnostics, internal improvements, and
15 miscellany.  This order is not strict--for example, some items involve
16 a combination of these elements.
17
18 In 0.5.21:
19 ==========
20
21    * Fix a code-generation bug introduced by 0.5.20 caused by loop
22      unrolling (by specifying `-funroll-loops' or similar).  This bug
23      afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C,
24      C++, Fortran, and so on).
25
26    * Fix a code-generation bug manifested when combining local
27      `EQUIVALENCE' with a `DATA' statement that follows the first
28      executable statement (or is treated as an executable-context
29      statement as a result of using the `-fpedantic' option).
30
31    * Fix a compiler crash that occured when an integer division by a
32      constant zero is detected.  Instead, when the `-W' option is
33      specified, the `gcc' back end issues a warning about such a case.
34      This bug afflicted all code compiled by version 2.7.2.2.f.2 of
35      `gcc' (C, C++, Fortran, and so on).
36
37    * Fix a compiler crash that occurred in some cases of procedure
38      inlining.  (Such cases became more frequent in 0.5.20.)
39
40    * Fix a compiler crash resulting from using `DATA' or similar to
41      initialize a `COMPLEX' variable or array to zero.
42
43    * Fix compiler crashes involving use of `AND', `OR', or `XOR'
44      intrinsics.
45
46    * Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE'
47      variable as the target of an `ASSIGN' or assigned-`GOTO' statement.
48
49    * Fix compiler crashes due to using the name of a some non-standard
50      intrinsics (such as `FTELL' or `FPUTC') as such and as the name of
51      a procedure or common block.  Such dual use of a name in a program
52      is allowed by the standard.
53
54    * Place automatic arrays on the stack, even if `SAVE' or the
55      `-fno-automatic' option is in effect.  This avoids a compiler
56      crash in some cases.
57
58    * New option `-Wno-globals' disables warnings about "suspicious" use
59      of a name both as a global name and as the implicit name of an
60      intrinsic, and warnings about disagreements over the number or
61      natures of arguments passed to global procedures, or the natures
62      of the procedures themselves.
63
64      The default is to issue such warnings, which are new as of this
65      version of `g77'.
66
67    * New option `-fno-globals' disables diagnostics about potentially
68      fatal disagreements analysis problems, such as disagreements over
69      the number or natures of arguments passed to global procedures, or
70      the natures of those procedures themselves.
71
72      The default is to issue such diagnostics and flag the compilation
73      as unsuccessful.  With this option, the diagnostics are issued as
74      warnings, or, if `-Wno-globals' is specified, are not issued at
75      all.
76
77      This option also disables inlining of global procedures, to avoid
78      compiler crashes resulting from coding errors that these
79      diagnostics normally would identify.
80
81    * Diagnose cases where a reference to a procedure disagrees with the
82      type of that procedure, or where disagreements about the number or
83      nature of arguments exist.  This avoids a compiler crash.
84
85    * Improve performance of the `gcc' back end so certain complicated
86      expressions involving `COMPLEX' arithmetic (especially
87      multiplication) don't appear to take forever to compile.
88
89    * Fix a couple of profiling-related bugs in `gcc' back end.
90
91    * Integrate GNU Ada's (GNAT's) changes to the back end, which
92      consist almost entirely of bug fixes.
93
94    * Include some other `gcc' fixes that seem useful in `g77''s version
95      of `gcc'.  (See `gcc/ChangeLog' for details--compare it to that
96      file in the vanilla `gcc-2.7.2.2.tar.gz' distribution.)
97
98    * Fix `libU77' routines that accept file and other names to strip
99      trailing blanks from them, for consistency with other
100      implementations.  Blanks may be forcibly appended to such names by
101      appending a single null character (`CHAR(0)') to the significant
102      trailing blanks.
103
104    * Fix `CHMOD' intrinsic to work with file names that have embedded
105      blanks, commas, and so on.
106
107    * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
108      argument.
109
110    * Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts
111      arguments in the correct order.  Documentation fixed accordingly,
112      and for `GMTIME()' and `LTIME()' as well.
113
114    * Make many changes to `libU77' intrinsics to support existing code
115      more directly.
116
117      Such changes include allowing both subroutine and function forms
118      of many routines, changing `MCLOCK()' and `TIME()' to return
119      `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
120      return `INTEGER(KIND=2)' values, and placing functions that are
121      intended to perform side effects in a new intrinsic group,
122      `badu77'.
123
124    * Improve `libU77' so it is more portable.
125
126    * Add options `-fbadu77-intrinsics-delete',
127      `-fbadu77-intrinsics-hide', and so on.
128
129    * Fix crashes involving diagnosed or invalid code.
130
131    * `g77' and `gcc' now do a somewhat better job detecting and
132      diagnosing arrays that are too large to handle before these cause
133      diagnostics during the assembler or linker phase, a compiler
134      crash, or generation of incorrect code.
135
136    * Improve alias analysis code to properly handle output registers
137      (such as the `%o' registers on the SPARC).
138
139    * Add support for `restrict' keyword in `gcc' front end.
140
141    * Modify `make' rules and related code so that generation of Info
142      documentation doesn't require compilation using `gcc'.
143
144    * Add `INT2' and `INT8' intrinsics.
145
146    * Add `CPU_TIME' intrinsic.
147
148    * Add `ALARM' intrinsic.
149
150    * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
151      `INTEGER(KIND=2)'.
152
153    * Warn when explicit type declaration disagrees with the type of an
154      intrinsic invocation.
155
156    * Support `*f771' entry in `gcc' `specs' file.
157
158    * Fix typo in `make' rule `g77-cross', used only for cross-compiling.
159
160    * Fix `libf2c' build procedure to re-archive library if previous
161      attempt to archive was interrupted.
162
163    * Fix `gcc' to more easily support configuring on Pentium Pro (686)
164      systems.
165
166    * Change `gcc' to unroll loops only during the last invocation (of
167      as many as two invocations) of loop optimization.
168
169    * Improve handling of `-fno-f2c' so that code that attempts to pass
170      an intrinsic as an actual argument, such as `CALL FOO(ABS)', is
171      rejected due to the fact that the run-time-library routine is,
172      effectively, compiled with `-ff2c' in effect.
173
174    * Fix `g77' driver to recognize `-fsyntax-only' as an option that
175      inhibits linking, just like `-c' or `-S', and to recognize and
176      properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs',
177      and `-Xlinker' options.
178
179    * Upgrade to `libf2c' as of 1997-08-06.
180
181    * Modify `libf2c' to consistently and clearly diagnose recursive I/O
182      (at run time).
183
184    * `g77' driver now prints version information (such as produced by
185      `g77 -v') to `stderr' instead of `stdout'.
186
187    * The `.r' suffix now designates a Ratfor source file, to be
188      preprocessed via the `ratfor' command, available separately.
189
190    * Fix some aspects of how `gcc' determines what kind of system is
191      being configured and what kinds are supported.  For example, GNU
192      Linux/Alpha ELF systems now are directly supported.
193
194    * Improve diagnostics.
195
196    * Improve documentation and indexing.
197
198    * Include all pertinent files for `libf2c' that come from
199      `netlib.bell-labs.com'; give any such files that aren't quite
200      accurate in `g77''s version of `libf2c' the suffix `.netlib'.
201
202    * Reserve `INTEGER(KIND=0)' for future use.
203
204 In 0.5.20:
205 ==========
206
207    * The `-fno-typeless-boz' option is now the default.
208
209      This option specifies that non-decimal-radix constants using the
210      prefixed-radix form (such as `Z'1234'') are to be interpreted as
211      `INTEGER' constants.  Specify `-ftypeless-boz' to cause such
212      constants to be interpreted as typeless.
213
214      (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
215
216    * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
217      now are the defaults.
218
219      Some programs might use names that clash with intrinsic names
220      defined (and now enabled) by these options or by the new `libU77'
221      intrinsics.  Users of such programs might need to compile them
222      differently (using, for example, `-ff90-intrinsics-disable') or,
223      better yet, insert appropriate `EXTERNAL' statements specifying
224      that these names are not intended to be names of intrinsics.
225
226    * The `ALWAYS_FLUSH' macro is no longer defined when building
227      `libf2c', which should result in improved I/O performance,
228      especially over NFS.
229
230      *Note:* If you have code that depends on the behavior of `libf2c'
231      when built with `ALWAYS_FLUSH' defined, you will have to modify
232      `libf2c' accordingly before building it from this and future
233      versions of `g77'.
234
235    * Dave Love's implementation of `libU77' has been added to the
236      version of `libf2c' distributed with and built as part of `g77'.
237      `g77' now knows about the routines in this library as intrinsics.
238
239    * New option `-fvxt' specifies that the source file is written in
240      VXT Fortran, instead of GNU Fortran.
241
242    * The `-fvxt-not-f90' option has been deleted, along with its
243      inverse, `-ff90-not-vxt'.
244
245      If you used one of these deleted options, you should re-read the
246      pertinent documentation to determine which options, if any, are
247      appropriate for compiling your code with this version of `g77'.
248
249    * The `-fugly' option now issues a warning, as it likely will be
250      removed in a future version.
251
252      (Enabling all the `-fugly-*' options is unlikely to be feasible,
253      or sensible, in the future, so users should learn to specify only
254      those `-fugly-*' options they really need for a particular source
255      file.)
256
257    * The `-fugly-assumed' option, introduced in version 0.5.19, has
258      been changed to better accommodate old and new code.
259
260    * Make a number of fixes to the `g77' front end and the `gcc' back
261      end to better support Alpha (AXP) machines.  This includes
262      providing at least one bug-fix to the `gcc' back end for Alphas.
263
264    * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
265      and `%LOC()' construct now return values of integer type that is
266      the same width (holds the same number of bits) as the pointer type
267      on the machine.
268
269      On most machines, this won't make a difference, whereas on Alphas,
270      the type these constructs return is `INTEGER*8' instead of the
271      more common `INTEGER*4'.
272
273    * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
274      in `complex' support in the `gcc' back end.  New option
275      `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
276
277    * Fix bug whereby `REAL A(1)', for example, caused a compiler crash
278      if `-fugly-assumed' was in effect and A was a local (automatic)
279      array.  That case is no longer affected by the new handling of
280      `-fugly-assumed'.
281
282    * Fix `g77' command driver so that `g77 -o foo.f' no longer deletes
283      `foo.f' before issuing other diagnostics, and so the `-x' option
284      is properly handled.
285
286    * Enable inlining of subroutines and functions by the `gcc' back end.
287      This works as it does for `gcc' itself--program units may be
288      inlined for invocations that follow them in the same program unit,
289      as long as the appropriate compile-time options are specified.
290
291    * Dummy arguments are no longer assumed to potentially alias
292      (overlap) other dummy arguments or `COMMON' areas when any of
293      these are defined (assigned to) by Fortran code.
294
295      This can result in faster and/or smaller programs when compiling
296      with optimization enabled, though on some systems this effect is
297      observed only when `-fforce-addr' also is specified.
298
299      New options `-falias-check', `-fargument-alias',
300      `-fargument-noalias', and `-fno-argument-noalias-global' control
301      the way `g77' handles potential aliasing.
302
303    * The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line.
304
305    * The bug-fix for 0.5.19.1 has been re-done.  The `g77' compiler has
306      been changed back to assume `libf2c' has no aliasing problems in
307      its implementations of the `COMPLEX' (and `DOUBLE COMPLEX')
308      intrinsics.  The `libf2c' has been changed to have no such
309      problems.
310
311      As a result, 0.5.20 is expected to offer improved performance over
312      0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to
313      this change alone.
314
315      *Note:* This change requires version 0.5.20 of `libf2c', at least,
316      when linking code produced by any versions of `g77' other than
317      0.5.19.1.  Use `g77 -v' to determine the version numbers of the
318      `libF77', `libI77', and `libU77' components of the `libf2c'
319      library.  (If these version numbers are not printed--in
320      particular, if the linker complains about unresolved references to
321      names like `g77__fvers__'--that strongly suggests your
322      installation has an obsolete version of `libf2c'.)
323
324    * New option `-fugly-assign' specifies that the same memory
325      locations are to be used to hold the values assigned by both
326      statements `I = 3' and `ASSIGN 10 TO I', for example.  (Normally,
327      `g77' uses a separate memory location to hold assigned statement
328      labels.)
329
330    * `FORMAT' and `ENTRY' statements now are allowed to precede
331      `IMPLICIT NONE' statements.
332
333    * Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER'
334      type, instead of crashing, at compile time.
335
336    * Fix crashes involving diagnosed or invalid code.
337
338    * Change approach to building `libf2c' archive (`libf2c.a') so that
339      members are added to it only when truly necessary, so the user
340      that installs an already-built `g77' doesn't need to have write
341      access to the build tree (whereas the user doing the build might
342      not have access to install new software on the system).
343
344    * Support `gcc' version 2.7.2.2 (modified by `g77' into version
345      2.7.2.2.f.2), and remove support for prior versions of `gcc'.
346
347    * Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build
348      procedures.
349
350    * Improve general build procedures for `g77', fixing minor bugs
351      (such as deletion of any file named `f771' in the parent directory
352      of `gcc/').
353
354    * Enable full support of `INTEGER*8' available in `libf2c' and
355      `f2c.h' so that `f2c' users may make full use of its features via
356      the `g77' version of `f2c.h' and the `INTEGER*8' support routines
357      in the `g77' version of `libf2c'.
358
359    * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
360      information on the library.
361
362    * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
363      instead of synonyms for the generic intrinsic `REAL'.
364
365    * New intrinsics have been added.  These are `REALPART', `IMAGPART',
366      `COMPLEX', `LONG', and `SHORT'.
367
368    * A new group of intrinsics, `gnu', has been added to contain the
369      new `REALPART', `IMAGPART', and `COMPLEX' intrinsics.  An old
370      group, `dcp', has been removed.
371
372    * Complain about industry-wide ambiguous references `REAL(EXPR)' and
373      `AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type
374      other than `COMPLEX'), unless `-ff90' option specifies Fortran 90
375      interpretation or new `-fugly-complex' option, in conjunction with
376      `-fnot-f90', specifies `f2c' interpretation.
377
378    * Make improvements to diagnostics.
379
380    * Speed up compiler a bit.
381
382    * Improvements to documentation and indexing, including a new
383      chapter containing information on one, later more, diagnostics
384      that users are directed to pull up automatically via a message in
385      the diagnostic itself.
386
387      (Hence the menu item `M' for the node `Diagnostics' in the
388      top-level menu of the Info documentation.)
389
390 In 0.5.19.1:
391 ============
392
393    * Code-generation bugs afflicting operations on complex data have
394      been fixed.
395
396      These bugs occurred when assigning the result of an operation to a
397      complex variable (or array element) that also served as an input
398      to that operation.
399
400      The operations affected by this bug were: `CONJG()', `DCONJG()',
401      `CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()',
402      `CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE
403      COMPLEX' operand to an `INTEGER' power.  (The related generic and
404      `Z'-prefixed intrinsics, such as `ZSIN()', also were affected.)
405
406      For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C'
407      is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed.
408
409 In 0.5.19:
410 ==========
411
412    * Fix `FORMAT' statement parsing so negative values for specifiers
413      such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as
414      negative.
415
416    * Fix `SIGNAL' intrinsic so it once again accepts a procedure as its
417      second argument.
418
419    * A temporary kludge option provides bare-bones information on
420      `COMMON' and `EQUIVALENCE' members at debug time.
421
422    * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
423      loops.
424
425    * New `-fno-silent' option causes names of program units to be
426      printed as they are compiled, in a fashion similar to UNIX `f77'
427      and `f2c'.
428
429    * New `-fugly-assumed' option specifies that arrays dimensioned via
430      `DIMENSION X(1)', for example, are to be treated as assumed-size.
431
432    * New `-fno-typeless-boz' option specifies that non-decimal-radix
433      constants using the prefixed-radix form (such as `Z'1234'') are to
434      be interpreted as `INTEGER' constants.
435
436    * New `-ff66' option is a "shorthand" option that specifies
437      behaviors considered appropriate for FORTRAN 66 programs.
438
439    * New `-ff77' option is a "shorthand" option that specifies
440      behaviors considered appropriate for UNIX `f77' programs.
441
442    * New `-fugly-comma' and `-fugly-logint' options provided to perform
443      some of what `-fugly' used to do.  `-fugly' and `-fno-ugly' are
444      now "shorthand" options, in that they do nothing more than enable
445      (or disable) other `-fugly-*' options.
446
447    * Fix parsing of assignment statements involving targets that are
448      substrings of elements of `CHARACTER' arrays having names such as
449      `READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'.
450
451    * Fix crashes involving diagnosed code.
452
453    * Fix handling of local `EQUIVALENCE' areas so certain cases of
454      valid Fortran programs are not misdiagnosed as improperly
455      extending the area backwards.
456
457    * Support `gcc' version 2.7.2.1.
458
459    * Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build
460      procedures.
461
462    * Change code generation for list-directed I/O so it allows for new
463      versions of `libf2c' that might return non-zero status codes for
464      some operations previously assumed to always return zero.
465
466      This change not only affects how `IOSTAT=' variables are set by
467      list-directed I/O, it also affects whether `END=' and `ERR='
468      labels are reached by these operations.
469
470    * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
471      `libf2c'.
472
473    * Modify `fseek_()' in `libf2c' to be more portable (though, in
474      practice, there might be no systems where this matters) and to
475      catch invalid `whence' arguments.
476
477    * Some useless warnings from the `-Wunused' option have been
478      eliminated.
479
480    * Fix a problem building the `f771' executable on AIX systems by
481      linking with the `-bbigtoc' option.
482
483    * Abort configuration if `gcc' has not been patched using the patch
484      file provided in the `gcc/f/gbe/' subdirectory.
485
486    * Add options `--help' and `--version' to the `g77' command, to
487      conform to GNU coding guidelines.  Also add printing of `g77'
488      version number when the `--verbose' (`-v') option is used.
489
490    * Change internally generated name for local `EQUIVALENCE' areas to
491      one based on the alphabetically sorted first name in the list of
492      names for entities placed at the beginning of the areas.
493
494    * Improvements to documentation and indexing.
495
496 In 0.5.18:
497 ==========
498
499    * Add some rudimentary support for `INTEGER*1', `INTEGER*2',
500      `INTEGER*8', and their `LOGICAL' equivalents.  (This support works
501      on most, maybe all, `gcc' targets.)
502
503      Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
504      the patch for this!
505
506      Among the missing elements from the support for these features are
507      full intrinsic support and constants.
508
509    * Add some rudimentary support for the `BYTE' and `WORD'
510      type-declaration statements.  `BYTE' corresponds to `INTEGER*1',
511      while `WORD' corresponds to `INTEGER*2'.
512
513      Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
514      the patch for this!
515
516    * The compiler code handling intrinsics has been largely rewritten
517      to accommodate the new types.  No new intrinsics or arguments for
518      existing intrinsics have been added, so there is, at this point,
519      no intrinsic to convert to `INTEGER*8', for example.
520
521    * Support automatic arrays in procedures.
522
523    * Reduce space/time requirements for handling large *sparsely*
524      initialized aggregate arrays.  This improvement applies to only a
525      subset of the general problem to be addressed in 0.6.
526
527    * Treat initial values of zero as if they weren't specified (in DATA
528      and type-declaration statements).  The initial values will be set
529      to zero anyway, but the amount of compile time processing them
530      will be reduced, in some cases significantly (though, again, this
531      is only a subset of the general problem to be addressed in 0.6).
532
533      A new option, `-fzeros', is introduced to enable the traditional
534      treatment of zeros as any other value.
535
536    * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
537      returning a `REAL' result, instead of as a `DOUBLE PRECISION'
538      result.  (Here, `Z' is `DOUBLE COMPLEX'.)
539
540      With `-fno-f90' in force, the interpretation remains unchanged,
541      since this appears to be how at least some F77 code using the
542      `DOUBLE COMPLEX' extension expected it to work.
543
544      Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
545      extended F77, it appears to be the same as `REAL(REAL(Z))'.
546
547    * An expression involving exponentiation, where both operands were
548      type `INTEGER' and the right-hand operand was negative, was
549      erroneously evaluated.
550
551    * Fix bugs involving `DATA' implied-`DO' constructs (these involved
552      an errant diagnostic and a crash, both on good code, one involving
553      subsequent statement-function definition).
554
555    * Close `INCLUDE' files after processing them, so compiling source
556      files with lots of `INCLUDE' statements does not result in being
557      unable to open `INCLUDE' files after all the available file
558      descriptors are used up.
559
560    * Speed up compiling, especially of larger programs, and perhaps
561      slightly reduce memory utilization while compiling (this is *not*
562      the improvement planned for 0.6 involving large aggregate
563      areas)--these improvements result from simply turning off some
564      low-level code to do self-checking that hasn't been triggered in a
565      long time.
566
567    * Introduce three new options that implement optimizations in the
568      `gcc' back end (GBE).  These options are `-fmove-all-movables',
569      `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
570      default, for Fortran compilations.  These optimizations are
571      intended to help toon Fortran programs.
572
573    * Patch the GBE to do a better job optimizing certain kinds of
574      references to array elements.
575
576    * Due to patches to the GBE, the version number of `gcc' also is
577      patched to make it easier to manage installations, especially
578      useful if it turns out a `g77' change to the GBE has a bug.
579
580      The `g77'-modified version number is the `gcc' version number with
581      the string `.f.N' appended, where `f' identifies the version as
582      enhanced for Fortran, and N is `1' for the first Fortran patch for
583      that version of `gcc', `2' for the second, and so on.
584
585      So, this introduces version 2.7.2.f.1 of `gcc'.
586
587    * Make several improvements and fixes to diagnostics, including the
588      removal of two that were inappropriate or inadequate.
589
590    * Warning about two successive arithmetic operators, produced by
591      `-Wsurprising', now produced *only* when both operators are,
592      indeed, arithmetic (not relational/boolean).
593
594    * `-Wsurprising' now warns about the remaining cases of using
595      non-integral variables for implied-`DO' loops, instead of these
596      being rejected unless `-fpedantic' or `-fugly' specified.
597
598    * Allow `SAVE' of a local variable or array, even after it has been
599      given an initial value via `DATA', for example.
600
601    * Introduce an Info version of `g77' documentation, which supercedes
602      `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'.  These files
603      will be removed in a future release.  The files `gcc/f/BUGS',
604      `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
605      the texinfo source when distributions are made.
606
607      This effort was inspired by a first pass at translating
608      `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
609      (<ronis@onsager.chem.mcgill.ca>).
610
611    * New `-fno-second-underscore' option to specify that, when
612      `-funderscoring' is in effect, a second underscore is not to be
613      appended to Fortran names already containing an underscore.
614
615    * Change the way iterative `DO' loops work to follow the F90
616      standard.  In particular, calculation of the iteration count is
617      still done by converting the start, end, and increment parameters
618      to the type of the `DO' variable, but the result of the
619      calculation is always converted to the default `INTEGER' type.
620
621      (This should have no effect on existing code compiled by `g77',
622      but code written to assume that use of a *wider* type for the `DO'
623      variable will result in an iteration count being fully calculated
624      using that wider type (wider than default `INTEGER') must be
625      rewritten.)
626
627    * Support `gcc' version 2.7.2.
628
629    * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
630      procedures.
631
632      Note that the email addresses related to `f2c' have changed--the
633      distribution site now is named `netlib.bell-labs.com', and the
634      maintainer's new address is <dmg@bell-labs.com>.
635
636 In 0.5.17:
637 ==========
638
639    * *Fix serious bug* in `g77 -v' command that can cause removal of a
640      system's `/dev/null' special file if run by user `root'.
641
642      *All users* of version 0.5.16 should ensure that they have not
643      removed `/dev/null' or replaced it with an ordinary file (e.g. by
644      comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
645      If the output isn't basically the same, contact your system
646      administrator about restoring `/dev/null' to its proper status).
647
648      This bug is particularly insidious because removing `/dev/null' as
649      a special file can go undetected for quite a while, aside from
650      various applications and programs exhibiting sudden, strange
651      behaviors.
652
653      I sincerely apologize for not realizing the implications of the
654      fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
655      that `ld' tries to *remove* the executable it is supposed to build
656      (especially if it reports unresolved references, which it should
657      in this case)!
658
659    * Fix crash on `CHARACTER*(*) FOO' in a main or block data program
660      unit.
661
662    * Fix crash that can occur when diagnostics given outside of any
663      program unit (such as when input file contains `@foo').
664
665    * Fix crashes, infinite loops (hangs), and such involving diagnosed
666      code.
667
668    * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
669      arguments, and issue clearer error message in cases where target
670      of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
671      should never happen).
672
673    * Make `libf2c' build procedures work on more systems again by
674      eliminating unnecessary invocations of `ld -r -x' and `mv'.
675
676    * Fix omission of `-funix-intrinsics-...' options in list of
677      permitted options to compiler.
678
679    * Fix failure to always diagnose missing type declaration for
680      `IMPLICIT NONE'.
681
682    * Fix compile-time performance problem (which could sometimes crash
683      the compiler, cause a hang, or whatever, due to a bug in the back
684      end) involving exponentiation with a large `INTEGER' constant for
685      the right-hand operator (e.g. `I**32767').
686
687    * Fix build procedures so cross-compiling `g77' (the `fini' utility
688      in particular) is properly built using the host compiler.
689
690    * Add new `-Wsurprising' option to warn about constructs that are
691      interpreted by the Fortran standard (and `g77') in ways that are
692      surprising to many programmers.
693
694    * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
695      `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
696
697      *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
698      you might use these as generic intrinsics, to improve likelihood
699      of diagnostics (instead of subtle run-time bugs) when using a
700      compiler that doesn't support these as intrinsics (e.g. `f2c').
701
702    * Remove from `-fno-pedantic' the diagnostic about `DO' with
703      non-`INTEGER' index variable; issue that under `-Wsurprising'
704      instead.
705
706    * Clarify some diagnostics that say things like "ignored" when that's
707      misleading.
708
709    * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
710
711    * Minor improvements to code generation for various operations on
712      `LOGICAL' operands.
713
714    * Minor improvement to code generation for some `DO' loops on some
715      machines.
716
717    * Support `gcc' version 2.7.1.
718
719    * Upgrade to `libf2c' as of 1995-11-15.
720
721 In 0.5.16:
722 ==========
723
724    * Fix a code-generation bug involving complicated `EQUIVALENCE'
725      statements not involving `COMMON'.
726
727    * Fix code-generation bugs involving invoking "gratis" library
728      procedures in `libf2c' from code compiled with `-fno-f2c' by
729      making these procedures known to `g77' as intrinsics (not affected
730      by -fno-f2c).  This is known to fix code invoking `ERF()',
731      `ERFC()', `DERF()', and `DERFC()'.
732
733    * Update `libf2c' to include netlib patches through 1995-08-16, and
734      `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
735      consistent with other Fortran implementations by outputting
736      leading zeros in formatted and list-directed output.
737
738    * Fix a code-generation bug involving adjustable dummy arrays with
739      high bounds whose primaries are changed during procedure
740      execution, and which might well improve code-generation
741      performance for such arrays compared to `f2c' plus `gcc' (but
742      apparently only when using `gcc-2.7.0' or later).
743
744    * Fix a code-generation bug involving invocation of `COMPLEX' and
745      `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
746      COMPLEX' divides, when the result of the invocation or divide is
747      assigned directly to a variable that overlaps one or more of the
748      arguments to the invocation or divide.
749
750    * Fix crash by not generating new optimal code for `X**I' if `I' is
751      nonconstant and the expression is used to dimension a dummy array,
752      since the `gcc' back end does not support the necessary mechanics
753      (and the `gcc' front end rejects the equivalent construct, as it
754      turns out).
755
756    * Fix crash on expressions like `COMPLEX**INTEGER'.
757
758    * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
759      `DOUBLE COMPLEX' constant to an `INTEGER' constant power.
760
761    * Fix crashes and such involving diagnosed code.
762
763    * Diagnose, instead of crashing on, statement function definitions
764      having duplicate dummy argument names.
765
766    * Fix bug causing rejection of good code involving statement function
767      definitions.
768
769    * Fix bug resulting in debugger not knowing size of local equivalence
770      area when any member of area has initial value (via `DATA', for
771      example).
772
773    * Fix installation bug that prevented installation of `g77' driver.
774      Provide for easy selection of whether to install copy of `g77' as
775      `f77' to replace the broken code.
776
777    * Fix `gcc' driver (affects `g77' thereby) to not gratuitously
778      invoke the `f771' program (e.g. when `-E' is specified).
779
780    * Fix diagnostic to point to correct source line when it immediately
781      follows an `INCLUDE' statement.
782
783    * Support more compiler options in `gcc'/`g77' when compiling
784      Fortran files.  These options include `-p', `-pg', `-aux-info',
785      `-P', correct setting of version-number macros for preprocessing,
786      full recognition of `-O0', and automatic insertion of
787      configuration-specific linker specs.
788
789    * Add new intrinsics that interface to existing routines in `libf2c':
790      `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
791      `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'.  Note that
792      `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
793      subroutines, not functions (since they have side effects), so to
794      get the return values from `SIGNAL' and `SYSTEM', append a final
795      argument specifying an `INTEGER' variable or array element (e.g.
796      `CALL SYSTEM('rm foo',ISTAT)').
797
798    * Add new intrinsic group named `unix' to contain the new intrinsics,
799      and by default enable this new group.
800
801    * Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
802      group.
803
804    * Improve `g77' so that `g77 -v' by itself (or with certain other
805      options, including `-B', `-b', `-i', `-nostdlib', and `-V')
806      reports lots more useful version info, and so that long-form
807      options `gcc' accepts are understood by `g77' as well (even in
808      truncated, unambiguous forms).
809
810    * Add new `g77' option `--driver=name' to specify driver when
811      default, `gcc', isn't appropriate.
812
813    * Add support for `#' directives (as output by the preprocessor) in
814      the compiler, and enable generation of those directives by the
815      preprocessor (when compiling `.F' files) so diagnostics and
816      debugging info are more useful to users of the preprocessor.
817
818    * Produce better diagnostics, more like `gcc', with info such as `In
819      function `foo':' and `In file included from...:'.
820
821    * Support `gcc''s `-fident' and `-fno-ident' options.
822
823    * When `-Wunused' in effect, don't warn about local variables used as
824      statement-function dummy arguments or `DATA' implied-`DO' iteration
825      variables, even though, strictly speaking, these are not uses of
826      the variables themselves.
827
828    * When `-W -Wunused' in effect, don't warn about unused dummy
829      arguments at all, since there's no way to turn this off for
830      individual cases (`g77' might someday start warning about
831      these)--applies to `gcc' versions 2.7.0 and later, since earlier
832      versions didn't warn about unused dummy arguments.
833
834    * New option `-fno-underscoring' that inhibits transformation of
835      names (by appending one or two underscores) so users may experiment
836      with implications of such an environment.
837
838    * Minor improvement to `gcc/f/info' module to make it easier to build
839      `g77' using the native (non-`gcc') compiler on certain machines
840      (but definitely not all machines nor all non-`gcc' compilers).
841      Please do not report bugs showing problems compilers have with
842      macros defined in `gcc/f/target.h' and used in places like
843      `gcc/f/expr.c'.
844
845    * Add warning to be printed for each invocation of the compiler if
846      the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32
847      bits, since `g77' is known to not work well for such cases (to be
848      fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
849      Actual Bugs.).
850
851    * Lots of new documentation (though work is still needed to put it
852      into canonical GNU format).
853
854    * Build `libf2c' with `-g0', not `-g2', in effect (by default), to
855      produce smaller library without lots of debugging clutter.
856
857 In 0.5.15:
858 ==========
859
860    * Fix bad code generation involving `X**I' and temporary, internal
861      variables generated by `g77' and the back end (such as for `DO'
862      loops).
863
864    * Fix crash given `CHARACTER A;DATA A/.TRUE./'.
865
866    * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
867
868    * Fix crash or other erratic behavior when null character constant
869      (`''') is encountered.
870
871    * Fix crash or other erratic behavior involving diagnosed code.
872
873    * Fix code generation for external functions returning type `REAL'
874      when the `-ff2c' option is in force (which it is by default) so
875      that `f2c' compatibility is indeed provided.
876
877    * Disallow `COMMON I(10)' if `I' has previously been specified with
878      an array declarator.
879
880    * New `-ffixed-line-length-N' option, where N is the maximum length
881      of a typical fixed-form line, defaulting to 72 columns, such that
882      characters beyond column N are ignored, or N is `none', meaning no
883      characters are ignored.  does not affect lines with `&' in column
884      1, which are always processed as if `-ffixed-line-length-none' was
885      in effect.
886
887    * No longer generate better code for some kinds of array references,
888      as `gcc' back end is to be fixed to do this even better, and it
889      turned out to slow down some code in some cases after all.
890
891    * In `COMMON' and `EQUIVALENCE' areas with any members given initial
892      values (e.g. via `DATA'), uninitialized members now always
893      initialized to binary zeros (though this is not required by the
894      standard, and might not be done in future versions of `g77').
895      Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
896      those with members of more than one type), the uninitialized
897      members were initialized to spaces, to cater to `CHARACTER' types,
898      but it seems no existing code expects that, while much existing
899      code expects binary zeros.
900
901 In 0.5.14:
902 ==========
903
904    * Don't emit bad code when low bound of adjustable array is
905      nonconstant and thus might vary as an expression at run time.
906
907    * Emit correct code for calculation of number of trips in `DO' loops
908      for cases where the loop should not execute at all.  (This bug
909      affected cases where the difference between the begin and end
910      values was less than the step count, though probably not for
911      floating-point cases.)
912
913    * Fix crash when extra parentheses surround item in `DATA'
914      implied-`DO' list.
915
916    * Fix crash over minor internal inconsistencies in handling
917      diagnostics, just substitute dummy strings where necessary.
918
919    * Fix crash on some systems when compiling call to `MVBITS()'
920      intrinsic.
921
922    * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
923      string of one or more digits.
924
925    * Fix crash on `DCMPLX()' with a single `INTEGER' argument.
926
927    * Fix various crashes involving code with diagnosed errors.
928
929    * Support `-I' option for `INCLUDE' statement, plus `gcc''s
930      `header.gcc' facility for handling systems like MS-DOS.
931
932    * Allow `INCLUDE' statement to be continued across multiple lines,
933      even allow it to coexist with other statements on the same line.
934
935    * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
936      fixes a bug involving infinite loops reading EOF with empty
937      list-directed I/O list.
938
939    * Remove all the `g77'-specific auto-configuration scripts, code,
940      and so on, except for temporary substitutes for bsearch() and
941      strtoul(), as too many configure/build problems were reported in
942      these areas.  People will have to fix their systems' problems
943      themselves, or at least somewhere other than `g77', which expects
944      a working ANSI C environment (and, for now, a GNU C compiler to
945      compile `g77' itself).
946
947    * Complain if initialized common redeclared as larger in subsequent
948      program unit.
949
950    * Warn if blank common initialized, since its size can vary and hence
951      related warnings that might be helpful won't be seen.
952
953    * New `-fbackslash' option, on by default, that causes `\' within
954      `CHARACTER' and Hollerith constants to be interpreted a la GNU C.
955      Note that this behavior is somewhat different from `f2c''s, which
956      supports only a limited subset of backslash (escape) sequences.
957
958    * Make `-fugly-args' the default.
959
960    * New `-fugly-init' option, on by default, that allows
961      typeless/Hollerith to be specified as initial values for variables
962      or named constants (`PARAMETER'), and also allows
963      character<->numeric conversion in those contexts--turn off via
964      `-fno-ugly-init'.
965
966    * New `-finit-local-zero' option to initialize local variables to
967      binary zeros.  This does not affect whether they are `SAVE'd, i.e.
968      made automatic or static.
969
970    * New `-Wimplicit' option to warn about implicitly typed variables,
971      arrays, and functions.  (Basically causes all program units to
972      default to `IMPLICIT NONE'.)
973
974    * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
975      `-O' not specified, since `-Wuninitialized' requires `-O'), and
976      implies `-Wunused' as well.
977
978    * `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
979      names (since they are assumed to refer to block data program
980      units, to make use of libraries more reliable).
981
982    * Support `%LOC()' and `LOC()' of character arguments.
983
984    * Support null (zero-length) character constants and expressions.
985
986    * Support `f2c''s `IMAG()' generic intrinsic.
987
988    * Support `ICHAR()', `IACHAR()', and `LEN()' of character
989      expressions that are valid in assignments but not normally as
990      actual arguments.
991
992    * Support `f2c'-style `&' in column 1 to mean continuation line.
993
994    * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
995      `BLOCK DATA', even though these are not allowed by the standard.
996
997    * Allow `RETURN' in main program unit.
998
999    * Changes to Hollerith-constant support to obey Appendix C of the
1000      standard:
1001
1002         - Now padded on the right with zeros, not spaces.
1003
1004         - Hollerith "format specifications" in the form of arrays of
1005           non-character allowed.
1006
1007         - Warnings issued when non-space truncation occurs when
1008           converting to another type.
1009
1010         - When specified as actual argument, now passed by reference to
1011           `INTEGER' (padded on right with spaces if constant too small,
1012           otherwise fully intact if constant wider the `INTEGER' type)
1013           instead of by value.
1014
1015      *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
1016      which it treats exactly the same as `CALL FOO('X')', but which the
1017      standard and `g77' treat as `CALL FOO(%REF('X   '))' (padded with
1018      as many spaces as necessary to widen to `INTEGER'), essentially.
1019
1020    * Changes and fixes to typeless-constant support:
1021
1022         - Now treated as a typeless double-length `INTEGER' value.
1023
1024         - Warnings issued when overflow occurs.
1025
1026         - Padded on the left with zeros when converting to a larger
1027           type.
1028
1029         - Should be properly aligned and ordered on the target machine
1030           for whatever type it is turned into.
1031
1032         - When specified as actual argument, now passed as reference to
1033           a default `INTEGER' constant.
1034
1035    * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
1036      the expression plus a length for the expression just as if it were
1037      a `CHARACTER' expression.  For example, `CALL FOO(%DESCR(D))',
1038      where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
1039
1040    * Name of multi-entrypoint master function changed to incorporate
1041      the name of the primary entry point instead of a decimal value, so
1042      the name of the master function for `SUBROUTINE X' with alternate
1043      entry points is now `__g77_masterfun_x'.
1044
1045    * Remove redundant message about zero-step-count `DO' loops.
1046
1047    * Clean up diagnostic messages, shortening many of them.
1048
1049    * Fix typo in `g77' man page.
1050
1051    * Clarify implications of constant-handling bugs in `f/BUGS'.
1052
1053    * Generate better code for `**' operator with a right-hand operand of
1054      type `INTEGER'.
1055
1056    * Generate better code for `SQRT()' and `DSQRT()', also when
1057      `-ffast-math' specified, enable better code generation for `SIN()'
1058      and `COS()'.
1059
1060    * Generate better code for some kinds of array references.
1061
1062    * Speed up lexing somewhat (this makes the compilation phase
1063      noticeably faster).
1064