]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/gcc/f/NEWS
Virgin import of gcc from EGCS 1.1.2
[FreeBSD/FreeBSD.git] / contrib / 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 in order:
13
14   1. Code-generation and run-time-library bug-fixes
15
16   2. Compiler and run-time-library crashes involving valid code that
17      have been fixed
18
19   3. New features
20
21   4. Fixes and enhancements to existing features
22
23   5. New diagnostics
24
25   6. Internal improvements
26
27   7. Miscellany
28
29    This order is not strict--for example, some items involve a
30 combination of these elements.
31
32    Note that two variants of `g77' are tracked below.  The `egcs'
33 variant is described vis-a-vis previous versions of `egcs' and/or an
34 official FSF version, as appropriate.
35
36    Therefore, `egcs' versions sometimes have multiple listings to help
37 clarify how they differ from other versions, though this can make
38 getting a complete picture of what a particular `egcs' version contains
39 somewhat more difficult.
40
41    An online, "live" version of this document (derived directly from
42 the up-to-date mainline version of `g77' within `egcs') is available at
43 `http://egcs.cygnus.com/onlinedocs/g77_news.html'.
44
45 In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1):
46 =====================================================
47
48    * Fix the `IDate' Intrinsic (VXT) so the returned year is in the
49      documented, non-Y2K-compliant range of 0-99, instead of being
50      returned as 100 in the year 2000.
51
52    * Fix the `Date_and_Time' intrinsic (in `libg2c') to return the
53      milliseconds value properly in VALUES(8).
54
55    * Fix the `LStat' intrinsic (in `libg2c') to return device-ID
56      information properly in SARRAY(7).
57
58    * Improve documentation.
59
60 In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1):
61 ===================================================
62
63    * Fix `libg2c' so it performs an implicit `ENDFILE' operation (as
64      appropriate) whenever a `REWIND' is done.
65
66      (This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s
67      version of `libf2c'.)
68
69    * Fix `libg2c' so it no longer crashes with a spurious diagnostic
70      upon doing any I/O following a direct formatted write.
71
72      (This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s
73      version of `libf2c'.)
74
75    * Fix `g77' so it no longer crashes compiling references to the
76      `Rand' intrinsic on some systems.
77
78    * Fix `g77' portion of installation process so it works better on
79      some systems (those with shells requiring `else true' clauses on
80      `if' constructs for the completion code to be set properly).
81
82 In `egcs' 1.1 (versus 0.5.24):
83 ==============================
84
85    * Fix `g77' crash compiling code containing the construct
86      `CMPLX(0.)' or similar.
87
88    * Fix `g77' crash (or apparently infinite run-time) when compiling
89      certain complicated expressions involving `COMPLEX' arithmetic
90      (especially multiplication).
91
92    * Fix a code-generation bug that afflicted Intel x86 targets when
93      `-O2' was specified compiling, for example, an old version of the
94      `DNRM2' routine.
95
96      The x87 coprocessor stack was being mismanaged in cases involving
97      assigned `GOTO' and `ASSIGN'.
98
99    * Align static double-precision variables and arrays on Intel x86
100      targets regardless of whether `-malign-double' is specified.
101
102      Generally, this affects only local variables and arrays having the
103      `SAVE' attribute or given initial values via `DATA'.
104
105 In `egcs' 1.1 (versus `egcs' 1.0.3):
106 ====================================
107
108    * Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte
109      beyond the end of its `CHARACTER' argument, and in the `libU77'
110      intrinsics `GMTime' and `LTime' that overwrote their arguments.
111
112    * Assumed arrays with negative bounds (such as `REAL A(-1:*)') no
113      longer elicit spurious diagnostics from `g77', even on systems
114      with pointers having different sizes than integers.
115
116      This bug is not known to have existed in any recent version of
117      `gcc'.  It was introduced in an early release of `egcs'.
118
119    * Valid combinations of `EXTERNAL', passing that external as a dummy
120      argument without explicitly giving it a type, and, in a subsequent
121      program unit, referencing that external as an external function
122      with a different type no longer crash `g77'.
123
124    * `CASE DEFAULT' no longer crashes `g77'.
125
126    * The `-Wunused' option no longer issues a spurious warning about
127      the "master" procedure generated by `g77' for procedures
128      containing `ENTRY' statements.
129
130    * Support `FORMAT(I<EXPR>)' when EXPR is a compile-time constant
131      `INTEGER' expression.
132
133    * Fix `g77' `-g' option so procedures that use `ENTRY' can be
134      stepped through, line by line, in `gdb'.
135
136    * Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'.
137
138    * Use `tempnam', if available, to open scratch files (as in
139      `OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment
140      variable, if present, is used.
141
142    * `g77''s version of `libf2c' separates out the setting of global
143      state (such as command-line arguments and signal handling) from
144      `main.o' into distinct, new library archive members.
145
146      This should make it easier to write portable applications that
147      have their own (non-Fortran) `main()' routine properly set up the
148      `libf2c' environment, even when `libf2c' (now `libg2c') is a
149      shared library.
150
151    * `g77' no longer installs the `f77' command and `f77.1' man page in
152      the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok'
153      file exists in the source or build directory.  See the
154      installation documentation for more information.
155
156    * `g77' no longer installs the `libf2c.a' library and `f2c.h'
157      include file in the `/usr' or `/usr/local' heirarchy, even if the
158      `f2c-install-ok' or `f2c-exists-ok' files exist in the source or
159      build directory.  See the installation documentation for more
160      information.
161
162    * The `libf2c.a' library produced by `g77' has been renamed to
163      `libg2c.a'.  It is installed only in the `gcc' "private" directory
164      heirarchy, `gcc-lib'.  This allows system administrators and users
165      to choose which version of the `libf2c' library from `netlib' they
166      wish to use on a case-by-case basis.  See the installation
167      documentation for more information.
168
169    * The `f2c.h' include (header) file produced by `g77' has been
170      renamed to `g2c.h'.  It is installed only in the `gcc' "private"
171      directory heirarchy, `gcc-lib'.  This allows system administrators
172      and users to choose which version of the include file from
173      `netlib' they wish to use on a case-by-case basis.  See the
174      installation documentation for more information.
175
176    * The `g77' command now expects the run-time library to be named
177      `libg2c.a' instead of `libf2c.a', to ensure that a version other
178      than the one built and installed as part of the same `g77' version
179      is picked up.
180
181    * During the configuration and build process, `g77' creates
182      subdirectories it needs only as it needs them.  Other cleaning up
183      of the configuration and build process has been performed as well.
184
185    * `install-info' now used to update the directory of Info
186      documentation to contain an entry for `g77' (during installation).
187
188    * Some diagnostics have been changed from warnings to errors, to
189      prevent inadvertent use of the resulting, probably buggy, programs.
190      These mostly include diagnostics about use of unsupported features
191      in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and
192      about truncations of various sorts of constants.
193
194    * Improve compilation of `FORMAT' expressions so that a null byte is
195      appended to the last operand if it is a constant.  This provides a
196      cleaner run-time diagnostic as provided by `libf2c' for statements
197      like `PRINT '(I1', 42'.
198
199    * Improve documentation and indexing.
200
201    * The upgrade to `libf2c' as of 1998-06-18 should fix a variety of
202      problems, including those involving some uses of the `T' format
203      specifier, and perhaps some build (porting) problems as well.
204
205 In 0.5.24 and `egcs' 1.1 (versus 0.5.23):
206 =========================================
207
208    * `g77' no longer produces incorrect code and initial values for
209      `EQUIVALENCE' and `COMMON' aggregates that, due to "unnatural"
210      ordering of members vis-a-vis their types, require initial padding.
211
212    * `g77' no longer crashes when compiling code containing
213      specification statements such as `INTEGER(KIND=7) PTR'.
214
215    * `g77' no longer crashes when compiling code such as `J = SIGNAL(1,
216      2)'.
217
218    * `g77' now treats `%LOC(EXPR)' and `LOC(EXPR)' as "ordinary"
219      expressions when they are used as arguments in procedure calls.
220      This change applies only to global (filewide) analysis, making it
221      consistent with how `g77' actually generates code for these cases.
222
223      Previously, `g77' treated these expressions as denoting special
224      "pointer" arguments for the purposes of filewide analysis.
225
226    * The `g77' driver now ensures that `-lg2c' is specified in the link
227      phase prior to any occurrence of `-lm'.  This prevents
228      accidentally linking to a routine in the SunOS4 `-lm' library when
229      the generated code wants to link to the one in `libf2c' (`libg2c').
230
231    * `g77' emits more debugging information when `-g' is used.
232
233      This new information allows, for example, `which __g77_length_a'
234      to be used in `gdb' to determine the type of the phantom length
235      argument supplied with `CHARACTER' variables.
236
237      This information pertains to internally-generated type, variable,
238      and other information, not to the longstanding deficiencies
239      vis-a-vis `COMMON' and `EQUIVALENCE'.
240
241    * The F90 `Date_and_Time' intrinsic now is supported.
242
243    * The F90 `System_Clock' intrinsic allows the optional arguments
244      (except for the `Count' argument) to be omitted.
245
246    * Upgrade to `libf2c' as of 1998-06-18.
247
248    * Improve documentation and indexing.
249
250 In 0.5.23 (versus 0.5.22):
251 ==========================
252
253    * This release contains several regressions against version 0.5.22
254      of `g77', due to using the "vanilla" `gcc' back end instead of
255      patching it to fix a few bugs and improve performance in a few
256      cases.
257
258      See `egcs/gcc/f/BUGS', for information on the known bugs in this
259      version, including the regressions.
260
261      Features that have been dropped from this version of `g77' due to
262      their being implemented via `g77'-specific patches to the `gcc'
263      back end in previous releases include:
264
265         - Support for `__restrict__' keyword, the options
266           `-fargument-alias', `-fargument-noalias', and
267           `-fargument-noalias-global', and the corresponding
268           alias-analysis code.
269
270           (`egcs' has the alias-analysis code, but not the
271           `__restrict__' keyword.  `egcs' `g77' users benefit from the
272           alias-analysis code despite the lack of the `__restrict__'
273           keyword, which is a C-language construct.)
274
275         - Support for the GNU compiler options `-fmove-all-movables',
276           `-freduce-all-givs', and `-frerun-loop-opt'.
277
278           (`egcs' supports these options.  `g77' users of `egcs'
279           benefit from them even if they are not explicitly specified,
280           because the defaults are optimized for `g77' users.)
281
282         - Support for the `-W' option warning about integer division by
283           zero.
284
285         - The Intel x86-specific option `-malign-double' applying to
286           stack-allocated data as well as statically-allocate data.
287
288      Note that the `gcc/f/gbe/' subdirectory has been removed from this
289      distribution as a result of `g77' no longer including patches for
290      the `gcc' back end.
291
292    * Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte
293      beyond the end of its `CHARACTER' argument, and in the `libU77'
294      intrinsics `GMTime' and `LTime' that overwrote their arguments.
295
296    * Support `gcc' version 2.8, and remove support for prior versions
297      of `gcc'.
298
299    * Remove support for the `--driver' option, as `g77' now does all
300      the driving, just like `gcc'.
301
302    * `CASE DEFAULT' no longer crashes `g77'.
303
304    * Valid combinations of `EXTERNAL', passing that external as a dummy
305      argument without explicitly giving it a type, and, in a subsequent
306      program unit, referencing that external as an external function
307      with a different type no longer crash `g77'.
308
309    * `g77' no longer installs the `f77' command and `f77.1' man page in
310      the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok'
311      file exists in the source or build directory.  See the
312      installation documentation for more information.
313
314    * `g77' no longer installs the `libf2c.a' library and `f2c.h'
315      include file in the `/usr' or `/usr/local' heirarchy, even if the
316      `f2c-install-ok' or `f2c-exists-ok' files exist in the source or
317      build directory.  See the installation documentation for more
318      information.
319
320    * The `libf2c.a' library produced by `g77' has been renamed to
321      `libg2c.a'.  It is installed only in the `gcc' "private" directory
322      heirarchy, `gcc-lib'.  This allows system administrators and users
323      to choose which version of the `libf2c' library from `netlib' they
324      wish to use on a case-by-case basis.  See the installation
325      documentation for more information.
326
327    * The `f2c.h' include (header) file produced by `g77' has been
328      renamed to `g2c.h'.  It is installed only in the `gcc' "private"
329      directory heirarchy, `gcc-lib'.  This allows system administrators
330      and users to choose which version of the include file from
331      `netlib' they wish to use on a case-by-case basis.  See the
332      installation documentation for more information.
333
334    * The `g77' command now expects the run-time library to be named
335      `libg2c.a' instead of `libf2c.a', to ensure that a version other
336      than the one built and installed as part of the same `g77' version
337      is picked up.
338
339    * The `-Wunused' option no longer issues a spurious warning about
340      the "master" procedure generated by `g77' for procedures
341      containing `ENTRY' statements.
342
343    * `g77''s version of `libf2c' separates out the setting of global
344      state (such as command-line arguments and signal handling) from
345      `main.o' into distinct, new library archive members.
346
347      This should make it easier to write portable applications that
348      have their own (non-Fortran) `main()' routine properly set up the
349      `libf2c' environment, even when `libf2c' (now `libg2c') is a
350      shared library.
351
352    * During the configuration and build process, `g77' creates
353      subdirectories it needs only as it needs them, thus avoiding
354      unnecessary creation of, for example, `stage1/f/runtime' when
355      doing a non-bootstrap build.  Other cleaning up of the
356      configuration and build process has been performed as well.
357
358    * `install-info' now used to update the directory of Info
359      documentation to contain an entry for `g77' (during installation).
360
361    * Some diagnostics have been changed from warnings to errors, to
362      prevent inadvertent use of the resulting, probably buggy, programs.
363      These mostly include diagnostics about use of unsupported features
364      in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and
365      about truncations of various sorts of constants.
366
367    * Improve documentation and indexing.
368
369    * Upgrade to `libf2c' as of 1998-04-20.
370
371      This should fix a variety of problems, including those involving
372      some uses of the `T' format specifier, and perhaps some build
373      (porting) problems as well.
374
375 In 0.5.22 (versus 0.5.21):
376 ==========================
377
378    * Fix code generation for iterative `DO' loops that have one or more
379      references to the iteration variable, or to aliases of it, in
380      their control expressions.  For example, `DO 10 J=2,J' now is
381      compiled correctly.
382
383    * Fix a code-generation bug that afflicted Intel x86 targets when
384      `-O2' was specified compiling, for example, an old version of the
385      `DNRM2' routine.
386
387      The x87 coprocessor stack was being mismanaged in cases involving
388      assigned `GOTO' and `ASSIGN'.
389
390    * Fix `DTime' intrinsic so as not to truncate results to integer
391      values (on some systems).
392
393    * Fix `Signal' intrinsic so it offers portable support for 64-bit
394      systems (such as Digital Alphas running GNU/Linux).
395
396    * Fix run-time crash involving `NAMELIST' on 64-bit machines such as
397      Alphas.
398
399    * Fix `g77' version of `libf2c' so it no longer produces a spurious
400      `I/O recursion' diagnostic at run time when an I/O operation (such
401      as `READ *,I') is interrupted in a manner that causes the program
402      to be terminated via the `f_exit' routine (such as via `C-c').
403
404    * Fix `g77' crash triggered by `CASE' statement with an omitted
405      lower or upper bound.
406
407    * Fix `g77' crash compiling references to `CPU_Time' intrinsic.
408
409    * Fix `g77' crash (or apparently infinite run-time) when compiling
410      certain complicated expressions involving `COMPLEX' arithmetic
411      (especially multiplication).
412
413    * Fix `g77' crash on statements such as `PRINT *,
414      (REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'.
415
416    * Fix a `g++' crash.
417
418    * Support `FORMAT(I<EXPR>)' when EXPR is a compile-time constant
419      `INTEGER' expression.
420
421    * Fix `g77' `-g' option so procedures that use `ENTRY' can be
422      stepped through, line by line, in `gdb'.
423
424    * Fix a profiling-related bug in `gcc' back end for Intel x86
425      architecture.
426
427    * Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'.
428
429    * Allow any numeric argument to intrinsics `Int2' and `Int8'.
430
431    * Use `tempnam', if available, to open scratch files (as in
432      `OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment
433      variable, if present, is used.
434
435    * Rename the `gcc' keyword `restrict' to `__restrict__', to avoid
436      rejecting valid, existing, C programs.  Support for `restrict' is
437      now more like support for `complex'.
438
439    * Fix `-fpedantic' to not reject procedure invocations such as
440      `I=J()' and `CALL FOO()'.
441
442    * Fix `-fugly-comma' to affect invocations of only external
443      procedures.  Restore rejection of gratuitous trailing omitted
444      arguments to intrinsics, as in `I=MAX(3,4,,)'.
445
446    * Fix compiler so it accepts `-fgnu-intrinsics-*' and
447      `-fbadu77-intrinsics-*' options.
448
449    * Improve diagnostic messages from `libf2c' so it is more likely
450      that the printing of the active format string is limited to the
451      string, with no trailing garbage being printed.
452
453      (Unlike `f2c', `g77' did not append a null byte to its compiled
454      form of every format string specified via a `FORMAT' statement.
455      However, `f2c' would exhibit the problem anyway for a statement
456      like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the
457      format string.)
458
459    * Improve compilation of `FORMAT' expressions so that a null byte is
460      appended to the last operand if it is a constant.  This provides a
461      cleaner run-time diagnostic as provided by `libf2c' for statements
462      like `PRINT '(I1', 42'.
463
464    * Fix various crashes involving code with diagnosed errors.
465
466    * Fix cross-compilation bug when configuring `libf2c'.
467
468    * Improve diagnostics.
469
470    * Improve documentation and indexing.
471
472    * Upgrade to `libf2c' as of 1997-09-23.  This fixes a formatted-I/O
473      bug that afflicted 64-bit systems with 32-bit integers (such as
474      Digital Alpha running GNU/Linux).
475
476 In `egcs' 1.0.2 (versus `egcs' 1.0.1):
477 ======================================
478
479    * Fix `g77' crash triggered by `CASE' statement with an omitted
480      lower or upper bound.
481
482    * Fix `g77' crash on statements such as `PRINT *,
483      (REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'.
484
485    * Fix `-fPIC' (such as compiling for ELF targets) on the Intel x86
486      architecture target so invalid assembler code is no longer
487      produced.
488
489    * Fix `-fpedantic' to not reject procedure invocations such as
490      `I=J()' and `CALL FOO()'.
491
492    * Fix `-fugly-comma' to affect invocations of only external
493      procedures.  Restore rejection of gratuitous trailing omitted
494      arguments to intrinsics, as in `I=MAX(3,4,,)'.
495
496    * Fix compiler so it accepts `-fgnu-intrinsics-*' and
497      `-fbadu77-intrinsics-*' options.
498
499 In `egcs' 1.0.1 (versus `egcs' 1.0):
500 ====================================
501
502    * Fix run-time crash involving `NAMELIST' on 64-bit machines such as
503      Alphas.
504
505 In `egcs' 1.0 (versus 0.5.21):
506 ==============================
507
508    * Version 1.0 of `egcs' contains several regressions against version
509      0.5.21 of `g77', due to using the "vanilla" `gcc' back end instead
510      of patching it to fix a few bugs and improve performance in a few
511      cases.
512
513      See `egcs/gcc/f/BUGS', for information on the known bugs in this
514      version, including the regressions.
515
516      Features that have been dropped from this version of `g77' due to
517      their being implemented via `g77'-specific patches to the `gcc'
518      back end in previous releases include:
519
520         - Support for the C-language `restrict' keyword.
521
522         - Support for the `-W' option warning about integer division by
523           zero.
524
525         - The Intel x86-specific option `-malign-double' applying to
526           stack-allocated data as well as statically-allocate data.
527
528      Note that the `gcc/f/gbe/' subdirectory has been removed from this
529      distribution as a result of `g77' being fully integrated with the
530      `egcs' variant of the `gcc' back end.
531
532    * Fix code generation for iterative `DO' loops that have one or more
533      references to the iteration variable, or to aliases of it, in
534      their control expressions.  For example, `DO 10 J=2,J' now is
535      compiled correctly.
536
537    * Fix `DTime' intrinsic so as not to truncate results to integer
538      values (on some systems).
539
540    * Remove support for non-`egcs' versions of `gcc'.
541
542    * Remove support for the `--driver' option, as `g77' now does all
543      the driving, just like `gcc'.
544
545    * Allow any numeric argument to intrinsics `Int2' and `Int8'.
546
547    * Improve diagnostic messages from `libf2c' so it is more likely
548      that the printing of the active format string is limited to the
549      string, with no trailing garbage being printed.
550
551      (Unlike `f2c', `g77' did not append a null byte to its compiled
552      form of every format string specified via a `FORMAT' statement.
553      However, `f2c' would exhibit the problem anyway for a statement
554      like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the
555      format string.)
556
557    * Upgrade to `libf2c' as of 1997-09-23.  This fixes a formatted-I/O
558      bug that afflicted 64-bit systems with 32-bit integers (such as
559      Digital Alpha running GNU/Linux).
560
561 In 0.5.21:
562 ==========
563
564    * Fix a code-generation bug introduced by 0.5.20 caused by loop
565      unrolling (by specifying `-funroll-loops' or similar).  This bug
566      afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C,
567      C++, Fortran, and so on).
568
569    * Fix a code-generation bug manifested when combining local
570      `EQUIVALENCE' with a `DATA' statement that follows the first
571      executable statement (or is treated as an executable-context
572      statement as a result of using the `-fpedantic' option).
573
574    * Fix a compiler crash that occured when an integer division by a
575      constant zero is detected.  Instead, when the `-W' option is
576      specified, the `gcc' back end issues a warning about such a case.
577      This bug afflicted all code compiled by version 2.7.2.2.f.2 of
578      `gcc' (C, C++, Fortran, and so on).
579
580    * Fix a compiler crash that occurred in some cases of procedure
581      inlining.  (Such cases became more frequent in 0.5.20.)
582
583    * Fix a compiler crash resulting from using `DATA' or similar to
584      initialize a `COMPLEX' variable or array to zero.
585
586    * Fix compiler crashes involving use of `AND', `OR', or `XOR'
587      intrinsics.
588
589    * Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE'
590      variable as the target of an `ASSIGN' or assigned-`GOTO' statement.
591
592    * Fix compiler crashes due to using the name of a some non-standard
593      intrinsics (such as `FTELL' or `FPUTC') as such and as the name of
594      a procedure or common block.  Such dual use of a name in a program
595      is allowed by the standard.
596
597    * Place automatic arrays on the stack, even if `SAVE' or the
598      `-fno-automatic' option is in effect.  This avoids a compiler
599      crash in some cases.
600
601    * The `-malign-double' option now reliably aligns `DOUBLE PRECISION'
602      optimally on Pentium and Pentium Pro architectures (586 and 686 in
603      `gcc').
604
605    * New option `-Wno-globals' disables warnings about "suspicious" use
606      of a name both as a global name and as the implicit name of an
607      intrinsic, and warnings about disagreements over the number or
608      natures of arguments passed to global procedures, or the natures
609      of the procedures themselves.
610
611      The default is to issue such warnings, which are new as of this
612      version of `g77'.
613
614    * New option `-fno-globals' disables diagnostics about potentially
615      fatal disagreements analysis problems, such as disagreements over
616      the number or natures of arguments passed to global procedures, or
617      the natures of those procedures themselves.
618
619      The default is to issue such diagnostics and flag the compilation
620      as unsuccessful.  With this option, the diagnostics are issued as
621      warnings, or, if `-Wno-globals' is specified, are not issued at
622      all.
623
624      This option also disables inlining of global procedures, to avoid
625      compiler crashes resulting from coding errors that these
626      diagnostics normally would identify.
627
628    * Diagnose cases where a reference to a procedure disagrees with the
629      type of that procedure, or where disagreements about the number or
630      nature of arguments exist.  This avoids a compiler crash.
631
632    * Fix parsing bug whereby `g77' rejected a second initialization
633      specification immediately following the first's closing `/' without
634      an intervening comma in a `DATA' statement, and the second
635      specification was an implied-DO list.
636
637    * Improve performance of the `gcc' back end so certain complicated
638      expressions involving `COMPLEX' arithmetic (especially
639      multiplication) don't appear to take forever to compile.
640
641    * Fix a couple of profiling-related bugs in `gcc' back end.
642
643    * Integrate GNU Ada's (GNAT's) changes to the back end, which
644      consist almost entirely of bug fixes.  These fixes are circa
645      version 3.10p of GNAT.
646
647    * Include some other `gcc' fixes that seem useful in `g77''s version
648      of `gcc'.  (See `gcc/ChangeLog' for details--compare it to that
649      file in the vanilla `gcc-2.7.2.3.tar.gz' distribution.)
650
651    * Fix `libU77' routines that accept file and other names to strip
652      trailing blanks from them, for consistency with other
653      implementations.  Blanks may be forcibly appended to such names by
654      appending a single null character (`CHAR(0)') to the significant
655      trailing blanks.
656
657    * Fix `CHMOD' intrinsic to work with file names that have embedded
658      blanks, commas, and so on.
659
660    * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
661      argument.
662
663    * Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts
664      arguments in the correct order.  Documentation fixed accordingly,
665      and for `GMTIME()' and `LTIME()' as well.
666
667    * Make many changes to `libU77' intrinsics to support existing code
668      more directly.
669
670      Such changes include allowing both subroutine and function forms
671      of many routines, changing `MCLOCK()' and `TIME()' to return
672      `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
673      return `INTEGER(KIND=2)' values, and placing functions that are
674      intended to perform side effects in a new intrinsic group,
675      `badu77'.
676
677    * Improve `libU77' so it is more portable.
678
679    * Add options `-fbadu77-intrinsics-delete',
680      `-fbadu77-intrinsics-hide', and so on.
681
682    * Fix crashes involving diagnosed or invalid code.
683
684    * `g77' and `gcc' now do a somewhat better job detecting and
685      diagnosing arrays that are too large to handle before these cause
686      diagnostics during the assembler or linker phase, a compiler
687      crash, or generation of incorrect code.
688
689    * Make some fixes to alias analysis code.
690
691    * Add support for `restrict' keyword in `gcc' front end.
692
693    * Support `gcc' version 2.7.2.3 (modified by `g77' into version
694      2.7.2.3.f.1), and remove support for prior versions of `gcc'.
695
696    * Incorporate GNAT's patches to the `gcc' back end into `g77''s, so
697      GNAT users do not need to apply GNAT's patches to build both GNAT
698      and `g77' from the same source tree.
699
700    * Modify `make' rules and related code so that generation of Info
701      documentation doesn't require compilation using `gcc'.  Now, any
702      ANSI C compiler should be adequate to produce the `g77'
703      documentation (in particular, the tables of intrinsics) from
704      scratch.
705
706    * Add `INT2' and `INT8' intrinsics.
707
708    * Add `CPU_TIME' intrinsic.
709
710    * Add `ALARM' intrinsic.
711
712    * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
713      `INTEGER(KIND=2)'.
714
715    * Warn when explicit type declaration disagrees with the type of an
716      intrinsic invocation.
717
718    * Support `*f771' entry in `gcc' `specs' file.
719
720    * Fix typo in `make' rule `g77-cross', used only for cross-compiling.
721
722    * Fix `libf2c' build procedure to re-archive library if previous
723      attempt to archive was interrupted.
724
725    * Change `gcc' to unroll loops only during the last invocation (of
726      as many as two invocations) of loop optimization.
727
728    * Improve handling of `-fno-f2c' so that code that attempts to pass
729      an intrinsic as an actual argument, such as `CALL FOO(ABS)', is
730      rejected due to the fact that the run-time-library routine is,
731      effectively, compiled with `-ff2c' in effect.
732
733    * Fix `g77' driver to recognize `-fsyntax-only' as an option that
734      inhibits linking, just like `-c' or `-S', and to recognize and
735      properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs',
736      and `-Xlinker' options.
737
738    * Upgrade to `libf2c' as of 1997-08-16.
739
740    * Modify `libf2c' to consistently and clearly diagnose recursive I/O
741      (at run time).
742
743    * `g77' driver now prints version information (such as produced by
744      `g77 -v') to `stderr' instead of `stdout'.
745
746    * The `.r' suffix now designates a Ratfor source file, to be
747      preprocessed via the `ratfor' command, available separately.
748
749    * Fix some aspects of how `gcc' determines what kind of system is
750      being configured and what kinds are supported.  For example, GNU
751      Linux/Alpha ELF systems now are directly supported.
752
753    * Improve diagnostics.
754
755    * Improve documentation and indexing.
756
757    * Include all pertinent files for `libf2c' that come from
758      `netlib.bell-labs.com'; give any such files that aren't quite
759      accurate in `g77''s version of `libf2c' the suffix `.netlib'.
760
761    * Reserve `INTEGER(KIND=0)' for future use.
762
763 In 0.5.20:
764 ==========
765
766    * The `-fno-typeless-boz' option is now the default.
767
768      This option specifies that non-decimal-radix constants using the
769      prefixed-radix form (such as `Z'1234'') are to be interpreted as
770      `INTEGER' constants.  Specify `-ftypeless-boz' to cause such
771      constants to be interpreted as typeless.
772
773      (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
774
775    * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
776      now are the defaults.
777
778      Some programs might use names that clash with intrinsic names
779      defined (and now enabled) by these options or by the new `libU77'
780      intrinsics.  Users of such programs might need to compile them
781      differently (using, for example, `-ff90-intrinsics-disable') or,
782      better yet, insert appropriate `EXTERNAL' statements specifying
783      that these names are not intended to be names of intrinsics.
784
785    * The `ALWAYS_FLUSH' macro is no longer defined when building
786      `libf2c', which should result in improved I/O performance,
787      especially over NFS.
788
789      *Note:* If you have code that depends on the behavior of `libf2c'
790      when built with `ALWAYS_FLUSH' defined, you will have to modify
791      `libf2c' accordingly before building it from this and future
792      versions of `g77'.
793
794    * Dave Love's implementation of `libU77' has been added to the
795      version of `libf2c' distributed with and built as part of `g77'.
796      `g77' now knows about the routines in this library as intrinsics.
797
798    * New option `-fvxt' specifies that the source file is written in
799      VXT Fortran, instead of GNU Fortran.
800
801    * The `-fvxt-not-f90' option has been deleted, along with its
802      inverse, `-ff90-not-vxt'.
803
804      If you used one of these deleted options, you should re-read the
805      pertinent documentation to determine which options, if any, are
806      appropriate for compiling your code with this version of `g77'.
807
808    * The `-fugly' option now issues a warning, as it likely will be
809      removed in a future version.
810
811      (Enabling all the `-fugly-*' options is unlikely to be feasible,
812      or sensible, in the future, so users should learn to specify only
813      those `-fugly-*' options they really need for a particular source
814      file.)
815
816    * The `-fugly-assumed' option, introduced in version 0.5.19, has
817      been changed to better accommodate old and new code.
818
819    * Make a number of fixes to the `g77' front end and the `gcc' back
820      end to better support Alpha (AXP) machines.  This includes
821      providing at least one bug-fix to the `gcc' back end for Alphas.
822
823    * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
824      and `%LOC()' construct now return values of integer type that is
825      the same width (holds the same number of bits) as the pointer type
826      on the machine.
827
828      On most machines, this won't make a difference, whereas on Alphas,
829      the type these constructs return is `INTEGER*8' instead of the
830      more common `INTEGER*4'.
831
832    * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
833      in `complex' support in the `gcc' back end.  New option
834      `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
835
836    * Fix bug whereby `REAL A(1)', for example, caused a compiler crash
837      if `-fugly-assumed' was in effect and A was a local (automatic)
838      array.  That case is no longer affected by the new handling of
839      `-fugly-assumed'.
840
841    * Fix `g77' command driver so that `g77 -o foo.f' no longer deletes
842      `foo.f' before issuing other diagnostics, and so the `-x' option
843      is properly handled.
844
845    * Enable inlining of subroutines and functions by the `gcc' back end.
846      This works as it does for `gcc' itself--program units may be
847      inlined for invocations that follow them in the same program unit,
848      as long as the appropriate compile-time options are specified.
849
850    * Dummy arguments are no longer assumed to potentially alias
851      (overlap) other dummy arguments or `COMMON' areas when any of
852      these are defined (assigned to) by Fortran code.
853
854      This can result in faster and/or smaller programs when compiling
855      with optimization enabled, though on some systems this effect is
856      observed only when `-fforce-addr' also is specified.
857
858      New options `-falias-check', `-fargument-alias',
859      `-fargument-noalias', and `-fno-argument-noalias-global' control
860      the way `g77' handles potential aliasing.
861
862    * The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line.
863
864    * The bug-fix for 0.5.19.1 has been re-done.  The `g77' compiler has
865      been changed back to assume `libf2c' has no aliasing problems in
866      its implementations of the `COMPLEX' (and `DOUBLE COMPLEX')
867      intrinsics.  The `libf2c' has been changed to have no such
868      problems.
869
870      As a result, 0.5.20 is expected to offer improved performance over
871      0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to
872      this change alone.
873
874      *Note:* This change requires version 0.5.20 of `libf2c', at least,
875      when linking code produced by any versions of `g77' other than
876      0.5.19.1.  Use `g77 -v' to determine the version numbers of the
877      `libF77', `libI77', and `libU77' components of the `libf2c'
878      library.  (If these version numbers are not printed--in
879      particular, if the linker complains about unresolved references to
880      names like `g77__fvers__'--that strongly suggests your
881      installation has an obsolete version of `libf2c'.)
882
883    * New option `-fugly-assign' specifies that the same memory
884      locations are to be used to hold the values assigned by both
885      statements `I = 3' and `ASSIGN 10 TO I', for example.  (Normally,
886      `g77' uses a separate memory location to hold assigned statement
887      labels.)
888
889    * `FORMAT' and `ENTRY' statements now are allowed to precede
890      `IMPLICIT NONE' statements.
891
892    * Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER'
893      type, instead of crashing, at compile time.
894
895    * Fix crashes involving diagnosed or invalid code.
896
897    * Change approach to building `libf2c' archive (`libf2c.a') so that
898      members are added to it only when truly necessary, so the user
899      that installs an already-built `g77' doesn't need to have write
900      access to the build tree (whereas the user doing the build might
901      not have access to install new software on the system).
902
903    * Support `gcc' version 2.7.2.2 (modified by `g77' into version
904      2.7.2.2.f.2), and remove support for prior versions of `gcc'.
905
906    * Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build
907      procedures.
908
909    * Improve general build procedures for `g77', fixing minor bugs
910      (such as deletion of any file named `f771' in the parent directory
911      of `gcc/').
912
913    * Enable full support of `INTEGER*8' available in `libf2c' and
914      `f2c.h' so that `f2c' users may make full use of its features via
915      the `g77' version of `f2c.h' and the `INTEGER*8' support routines
916      in the `g77' version of `libf2c'.
917
918    * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
919      information on the library.
920
921    * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
922      instead of synonyms for the generic intrinsic `REAL'.
923
924    * New intrinsics have been added.  These are `REALPART', `IMAGPART',
925      `COMPLEX', `LONG', and `SHORT'.
926
927    * A new group of intrinsics, `gnu', has been added to contain the
928      new `REALPART', `IMAGPART', and `COMPLEX' intrinsics.  An old
929      group, `dcp', has been removed.
930
931    * Complain about industry-wide ambiguous references `REAL(EXPR)' and
932      `AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type
933      other than `COMPLEX'), unless `-ff90' option specifies Fortran 90
934      interpretation or new `-fugly-complex' option, in conjunction with
935      `-fnot-f90', specifies `f2c' interpretation.
936
937    * Make improvements to diagnostics.
938
939    * Speed up compiler a bit.
940
941    * Improvements to documentation and indexing, including a new
942      chapter containing information on one, later more, diagnostics
943      that users are directed to pull up automatically via a message in
944      the diagnostic itself.
945
946      (Hence the menu item `M' for the node `Diagnostics' in the
947      top-level menu of the Info documentation.)
948
949 In 0.5.19.1:
950 ============
951
952    * Code-generation bugs afflicting operations on complex data have
953      been fixed.
954
955      These bugs occurred when assigning the result of an operation to a
956      complex variable (or array element) that also served as an input
957      to that operation.
958
959      The operations affected by this bug were: `CONJG()', `DCONJG()',
960      `CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()',
961      `CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE
962      COMPLEX' operand to an `INTEGER' power.  (The related generic and
963      `Z'-prefixed intrinsics, such as `ZSIN()', also were affected.)
964
965      For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C'
966      is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed.
967
968 In 0.5.19:
969 ==========
970
971    * Fix `FORMAT' statement parsing so negative values for specifiers
972      such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as
973      negative.
974
975    * Fix `SIGNAL' intrinsic so it once again accepts a procedure as its
976      second argument.
977
978    * A temporary kludge option provides bare-bones information on
979      `COMMON' and `EQUIVALENCE' members at debug time.
980
981    * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
982      loops.
983
984    * New `-fno-silent' option causes names of program units to be
985      printed as they are compiled, in a fashion similar to UNIX `f77'
986      and `f2c'.
987
988    * New `-fugly-assumed' option specifies that arrays dimensioned via
989      `DIMENSION X(1)', for example, are to be treated as assumed-size.
990
991    * New `-fno-typeless-boz' option specifies that non-decimal-radix
992      constants using the prefixed-radix form (such as `Z'1234'') are to
993      be interpreted as `INTEGER' constants.
994
995    * New `-ff66' option is a "shorthand" option that specifies
996      behaviors considered appropriate for FORTRAN 66 programs.
997
998    * New `-ff77' option is a "shorthand" option that specifies
999      behaviors considered appropriate for UNIX `f77' programs.
1000
1001    * New `-fugly-comma' and `-fugly-logint' options provided to perform
1002      some of what `-fugly' used to do.  `-fugly' and `-fno-ugly' are
1003      now "shorthand" options, in that they do nothing more than enable
1004      (or disable) other `-fugly-*' options.
1005
1006    * Fix parsing of assignment statements involving targets that are
1007      substrings of elements of `CHARACTER' arrays having names such as
1008      `READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'.
1009
1010    * Fix crashes involving diagnosed code.
1011
1012    * Fix handling of local `EQUIVALENCE' areas so certain cases of
1013      valid Fortran programs are not misdiagnosed as improperly
1014      extending the area backwards.
1015
1016    * Support `gcc' version 2.7.2.1.
1017
1018    * Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build
1019      procedures.
1020
1021    * Change code generation for list-directed I/O so it allows for new
1022      versions of `libf2c' that might return non-zero status codes for
1023      some operations previously assumed to always return zero.
1024
1025      This change not only affects how `IOSTAT=' variables are set by
1026      list-directed I/O, it also affects whether `END=' and `ERR='
1027      labels are reached by these operations.
1028
1029    * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
1030      `libf2c'.
1031
1032    * Modify `fseek_()' in `libf2c' to be more portable (though, in
1033      practice, there might be no systems where this matters) and to
1034      catch invalid `whence' arguments.
1035
1036    * Some useless warnings from the `-Wunused' option have been
1037      eliminated.
1038
1039    * Fix a problem building the `f771' executable on AIX systems by
1040      linking with the `-bbigtoc' option.
1041
1042    * Abort configuration if `gcc' has not been patched using the patch
1043      file provided in the `gcc/f/gbe/' subdirectory.
1044
1045    * Add options `--help' and `--version' to the `g77' command, to
1046      conform to GNU coding guidelines.  Also add printing of `g77'
1047      version number when the `--verbose' (`-v') option is used.
1048
1049    * Change internally generated name for local `EQUIVALENCE' areas to
1050      one based on the alphabetically sorted first name in the list of
1051      names for entities placed at the beginning of the areas.
1052
1053    * Improvements to documentation and indexing.
1054
1055 In 0.5.18:
1056 ==========
1057
1058    * Add some rudimentary support for `INTEGER*1', `INTEGER*2',
1059      `INTEGER*8', and their `LOGICAL' equivalents.  (This support works
1060      on most, maybe all, `gcc' targets.)
1061
1062      Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
1063      the patch for this!
1064
1065      Among the missing elements from the support for these features are
1066      full intrinsic support and constants.
1067
1068    * Add some rudimentary support for the `BYTE' and `WORD'
1069      type-declaration statements.  `BYTE' corresponds to `INTEGER*1',
1070      while `WORD' corresponds to `INTEGER*2'.
1071
1072      Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
1073      the patch for this!
1074
1075    * The compiler code handling intrinsics has been largely rewritten
1076      to accommodate the new types.  No new intrinsics or arguments for
1077      existing intrinsics have been added, so there is, at this point,
1078      no intrinsic to convert to `INTEGER*8', for example.
1079
1080    * Support automatic arrays in procedures.
1081
1082    * Reduce space/time requirements for handling large *sparsely*
1083      initialized aggregate arrays.  This improvement applies to only a
1084      subset of the general problem to be addressed in 0.6.
1085
1086    * Treat initial values of zero as if they weren't specified (in DATA
1087      and type-declaration statements).  The initial values will be set
1088      to zero anyway, but the amount of compile time processing them
1089      will be reduced, in some cases significantly (though, again, this
1090      is only a subset of the general problem to be addressed in 0.6).
1091
1092      A new option, `-fzeros', is introduced to enable the traditional
1093      treatment of zeros as any other value.
1094
1095    * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
1096      returning a `REAL' result, instead of as a `DOUBLE PRECISION'
1097      result.  (Here, `Z' is `DOUBLE COMPLEX'.)
1098
1099      With `-fno-f90' in force, the interpretation remains unchanged,
1100      since this appears to be how at least some F77 code using the
1101      `DOUBLE COMPLEX' extension expected it to work.
1102
1103      Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
1104      extended F77, it appears to be the same as `REAL(REAL(Z))'.
1105
1106    * An expression involving exponentiation, where both operands were
1107      type `INTEGER' and the right-hand operand was negative, was
1108      erroneously evaluated.
1109
1110    * Fix bugs involving `DATA' implied-`DO' constructs (these involved
1111      an errant diagnostic and a crash, both on good code, one involving
1112      subsequent statement-function definition).
1113
1114    * Close `INCLUDE' files after processing them, so compiling source
1115      files with lots of `INCLUDE' statements does not result in being
1116      unable to open `INCLUDE' files after all the available file
1117      descriptors are used up.
1118
1119    * Speed up compiling, especially of larger programs, and perhaps
1120      slightly reduce memory utilization while compiling (this is *not*
1121      the improvement planned for 0.6 involving large aggregate
1122      areas)--these improvements result from simply turning off some
1123      low-level code to do self-checking that hasn't been triggered in a
1124      long time.
1125
1126    * Introduce three new options that implement optimizations in the
1127      `gcc' back end (GBE).  These options are `-fmove-all-movables',
1128      `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
1129      default, for Fortran compilations.  These optimizations are
1130      intended to help toon Fortran programs.
1131
1132    * Patch the GBE to do a better job optimizing certain kinds of
1133      references to array elements.
1134
1135    * Due to patches to the GBE, the version number of `gcc' also is
1136      patched to make it easier to manage installations, especially
1137      useful if it turns out a `g77' change to the GBE has a bug.
1138
1139      The `g77'-modified version number is the `gcc' version number with
1140      the string `.f.N' appended, where `f' identifies the version as
1141      enhanced for Fortran, and N is `1' for the first Fortran patch for
1142      that version of `gcc', `2' for the second, and so on.
1143
1144      So, this introduces version 2.7.2.f.1 of `gcc'.
1145
1146    * Make several improvements and fixes to diagnostics, including the
1147      removal of two that were inappropriate or inadequate.
1148
1149    * Warning about two successive arithmetic operators, produced by
1150      `-Wsurprising', now produced *only* when both operators are,
1151      indeed, arithmetic (not relational/boolean).
1152
1153    * `-Wsurprising' now warns about the remaining cases of using
1154      non-integral variables for implied-`DO' loops, instead of these
1155      being rejected unless `-fpedantic' or `-fugly' specified.
1156
1157    * Allow `SAVE' of a local variable or array, even after it has been
1158      given an initial value via `DATA', for example.
1159
1160    * Introduce an Info version of `g77' documentation, which supercedes
1161      `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'.  These files
1162      will be removed in a future release.  The files `gcc/f/BUGS',
1163      `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
1164      the texinfo source when distributions are made.
1165
1166      This effort was inspired by a first pass at translating
1167      `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
1168      (<ronis@onsager.chem.mcgill.ca>).
1169
1170    * New `-fno-second-underscore' option to specify that, when
1171      `-funderscoring' is in effect, a second underscore is not to be
1172      appended to Fortran names already containing an underscore.
1173
1174    * Change the way iterative `DO' loops work to follow the F90
1175      standard.  In particular, calculation of the iteration count is
1176      still done by converting the start, end, and increment parameters
1177      to the type of the `DO' variable, but the result of the
1178      calculation is always converted to the default `INTEGER' type.
1179
1180      (This should have no effect on existing code compiled by `g77',
1181      but code written to assume that use of a *wider* type for the `DO'
1182      variable will result in an iteration count being fully calculated
1183      using that wider type (wider than default `INTEGER') must be
1184      rewritten.)
1185
1186    * Support `gcc' version 2.7.2.
1187
1188    * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
1189      procedures.
1190
1191      Note that the email addresses related to `f2c' have changed--the
1192      distribution site now is named `netlib.bell-labs.com', and the
1193      maintainer's new address is <dmg@bell-labs.com>.
1194
1195 In 0.5.17:
1196 ==========
1197
1198    * *Fix serious bug* in `g77 -v' command that can cause removal of a
1199      system's `/dev/null' special file if run by user `root'.
1200
1201      *All users* of version 0.5.16 should ensure that they have not
1202      removed `/dev/null' or replaced it with an ordinary file (e.g. by
1203      comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
1204      If the output isn't basically the same, contact your system
1205      administrator about restoring `/dev/null' to its proper status).
1206
1207      This bug is particularly insidious because removing `/dev/null' as
1208      a special file can go undetected for quite a while, aside from
1209      various applications and programs exhibiting sudden, strange
1210      behaviors.
1211
1212      I sincerely apologize for not realizing the implications of the
1213      fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
1214      that `ld' tries to *remove* the executable it is supposed to build
1215      (especially if it reports unresolved references, which it should
1216      in this case)!
1217
1218    * Fix crash on `CHARACTER*(*) FOO' in a main or block data program
1219      unit.
1220
1221    * Fix crash that can occur when diagnostics given outside of any
1222      program unit (such as when input file contains `@foo').
1223
1224    * Fix crashes, infinite loops (hangs), and such involving diagnosed
1225      code.
1226
1227    * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
1228      arguments, and issue clearer error message in cases where target
1229      of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
1230      should never happen).
1231
1232    * Make `libf2c' build procedures work on more systems again by
1233      eliminating unnecessary invocations of `ld -r -x' and `mv'.
1234
1235    * Fix omission of `-funix-intrinsics-...' options in list of
1236      permitted options to compiler.
1237
1238    * Fix failure to always diagnose missing type declaration for
1239      `IMPLICIT NONE'.
1240
1241    * Fix compile-time performance problem (which could sometimes crash
1242      the compiler, cause a hang, or whatever, due to a bug in the back
1243      end) involving exponentiation with a large `INTEGER' constant for
1244      the right-hand operator (e.g. `I**32767').
1245
1246    * Fix build procedures so cross-compiling `g77' (the `fini' utility
1247      in particular) is properly built using the host compiler.
1248
1249    * Add new `-Wsurprising' option to warn about constructs that are
1250      interpreted by the Fortran standard (and `g77') in ways that are
1251      surprising to many programmers.
1252
1253    * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
1254      `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
1255
1256      *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
1257      you might use these as generic intrinsics, to improve likelihood
1258      of diagnostics (instead of subtle run-time bugs) when using a
1259      compiler that doesn't support these as intrinsics (e.g. `f2c').
1260
1261    * Remove from `-fno-pedantic' the diagnostic about `DO' with
1262      non-`INTEGER' index variable; issue that under `-Wsurprising'
1263      instead.
1264
1265    * Clarify some diagnostics that say things like "ignored" when that's
1266      misleading.
1267
1268    * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
1269
1270    * Minor improvements to code generation for various operations on
1271      `LOGICAL' operands.
1272
1273    * Minor improvement to code generation for some `DO' loops on some
1274      machines.
1275
1276    * Support `gcc' version 2.7.1.
1277
1278    * Upgrade to `libf2c' as of 1995-11-15.
1279
1280 In 0.5.16:
1281 ==========
1282
1283    * Fix a code-generation bug involving complicated `EQUIVALENCE'
1284      statements not involving `COMMON'.
1285
1286    * Fix code-generation bugs involving invoking "gratis" library
1287      procedures in `libf2c' from code compiled with `-fno-f2c' by
1288      making these procedures known to `g77' as intrinsics (not affected
1289      by -fno-f2c).  This is known to fix code invoking `ERF()',
1290      `ERFC()', `DERF()', and `DERFC()'.
1291
1292    * Update `libf2c' to include netlib patches through 1995-08-16, and
1293      `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
1294      consistent with other Fortran implementations by outputting
1295      leading zeros in formatted and list-directed output.
1296
1297    * Fix a code-generation bug involving adjustable dummy arrays with
1298      high bounds whose primaries are changed during procedure
1299      execution, and which might well improve code-generation
1300      performance for such arrays compared to `f2c' plus `gcc' (but
1301      apparently only when using `gcc-2.7.0' or later).
1302
1303    * Fix a code-generation bug involving invocation of `COMPLEX' and
1304      `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
1305      COMPLEX' divides, when the result of the invocation or divide is
1306      assigned directly to a variable that overlaps one or more of the
1307      arguments to the invocation or divide.
1308
1309    * Fix crash by not generating new optimal code for `X**I' if `I' is
1310      nonconstant and the expression is used to dimension a dummy array,
1311      since the `gcc' back end does not support the necessary mechanics
1312      (and the `gcc' front end rejects the equivalent construct, as it
1313      turns out).
1314
1315    * Fix crash on expressions like `COMPLEX**INTEGER'.
1316
1317    * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
1318      `DOUBLE COMPLEX' constant to an `INTEGER' constant power.
1319
1320    * Fix crashes and such involving diagnosed code.
1321
1322    * Diagnose, instead of crashing on, statement function definitions
1323      having duplicate dummy argument names.
1324
1325    * Fix bug causing rejection of good code involving statement function
1326      definitions.
1327
1328    * Fix bug resulting in debugger not knowing size of local equivalence
1329      area when any member of area has initial value (via `DATA', for
1330      example).
1331
1332    * Fix installation bug that prevented installation of `g77' driver.
1333      Provide for easy selection of whether to install copy of `g77' as
1334      `f77' to replace the broken code.
1335
1336    * Fix `gcc' driver (affects `g77' thereby) to not gratuitously
1337      invoke the `f771' program (e.g. when `-E' is specified).
1338
1339    * Fix diagnostic to point to correct source line when it immediately
1340      follows an `INCLUDE' statement.
1341
1342    * Support more compiler options in `gcc'/`g77' when compiling
1343      Fortran files.  These options include `-p', `-pg', `-aux-info',
1344      `-P', correct setting of version-number macros for preprocessing,
1345      full recognition of `-O0', and automatic insertion of
1346      configuration-specific linker specs.
1347
1348    * Add new intrinsics that interface to existing routines in `libf2c':
1349      `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
1350      `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'.  Note that
1351      `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
1352      subroutines, not functions (since they have side effects), so to
1353      get the return values from `SIGNAL' and `SYSTEM', append a final
1354      argument specifying an `INTEGER' variable or array element (e.g.
1355      `CALL SYSTEM('rm foo',ISTAT)').
1356
1357    * Add new intrinsic group named `unix' to contain the new intrinsics,
1358      and by default enable this new group.
1359
1360    * Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
1361      group.
1362
1363    * Improve `g77' so that `g77 -v' by itself (or with certain other
1364      options, including `-B', `-b', `-i', `-nostdlib', and `-V')
1365      reports lots more useful version info, and so that long-form
1366      options `gcc' accepts are understood by `g77' as well (even in
1367      truncated, unambiguous forms).
1368
1369    * Add new `g77' option `--driver=name' to specify driver when
1370      default, `gcc', isn't appropriate.
1371
1372    * Add support for `#' directives (as output by the preprocessor) in
1373      the compiler, and enable generation of those directives by the
1374      preprocessor (when compiling `.F' files) so diagnostics and
1375      debugging info are more useful to users of the preprocessor.
1376
1377    * Produce better diagnostics, more like `gcc', with info such as `In
1378      function `foo':' and `In file included from...:'.
1379
1380    * Support `gcc''s `-fident' and `-fno-ident' options.
1381
1382    * When `-Wunused' in effect, don't warn about local variables used as
1383      statement-function dummy arguments or `DATA' implied-`DO' iteration
1384      variables, even though, strictly speaking, these are not uses of
1385      the variables themselves.
1386
1387    * When `-W -Wunused' in effect, don't warn about unused dummy
1388      arguments at all, since there's no way to turn this off for
1389      individual cases (`g77' might someday start warning about
1390      these)--applies to `gcc' versions 2.7.0 and later, since earlier
1391      versions didn't warn about unused dummy arguments.
1392
1393    * New option `-fno-underscoring' that inhibits transformation of
1394      names (by appending one or two underscores) so users may experiment
1395      with implications of such an environment.
1396
1397    * Minor improvement to `gcc/f/info' module to make it easier to build
1398      `g77' using the native (non-`gcc') compiler on certain machines
1399      (but definitely not all machines nor all non-`gcc' compilers).
1400      Please do not report bugs showing problems compilers have with
1401      macros defined in `gcc/f/target.h' and used in places like
1402      `gcc/f/expr.c'.
1403
1404    * Add warning to be printed for each invocation of the compiler if
1405      the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32
1406      bits, since `g77' is known to not work well for such cases (to be
1407      fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
1408      Actual Bugs.).
1409
1410    * Lots of new documentation (though work is still needed to put it
1411      into canonical GNU format).
1412
1413    * Build `libf2c' with `-g0', not `-g2', in effect (by default), to
1414      produce smaller library without lots of debugging clutter.
1415
1416 In 0.5.15:
1417 ==========
1418
1419    * Fix bad code generation involving `X**I' and temporary, internal
1420      variables generated by `g77' and the back end (such as for `DO'
1421      loops).
1422
1423    * Fix crash given `CHARACTER A;DATA A/.TRUE./'.
1424
1425    * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
1426
1427    * Fix crash or other erratic behavior when null character constant
1428      (`''') is encountered.
1429
1430    * Fix crash or other erratic behavior involving diagnosed code.
1431
1432    * Fix code generation for external functions returning type `REAL'
1433      when the `-ff2c' option is in force (which it is by default) so
1434      that `f2c' compatibility is indeed provided.
1435
1436    * Disallow `COMMON I(10)' if `I' has previously been specified with
1437      an array declarator.
1438
1439    * New `-ffixed-line-length-N' option, where N is the maximum length
1440      of a typical fixed-form line, defaulting to 72 columns, such that
1441      characters beyond column N are ignored, or N is `none', meaning no
1442      characters are ignored.  does not affect lines with `&' in column
1443      1, which are always processed as if `-ffixed-line-length-none' was
1444      in effect.
1445
1446    * No longer generate better code for some kinds of array references,
1447      as `gcc' back end is to be fixed to do this even better, and it
1448      turned out to slow down some code in some cases after all.
1449
1450    * In `COMMON' and `EQUIVALENCE' areas with any members given initial
1451      values (e.g. via `DATA'), uninitialized members now always
1452      initialized to binary zeros (though this is not required by the
1453      standard, and might not be done in future versions of `g77').
1454      Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
1455      those with members of more than one type), the uninitialized
1456      members were initialized to spaces, to cater to `CHARACTER' types,
1457      but it seems no existing code expects that, while much existing
1458      code expects binary zeros.
1459
1460 In 0.5.14:
1461 ==========
1462
1463    * Don't emit bad code when low bound of adjustable array is
1464      nonconstant and thus might vary as an expression at run time.
1465
1466    * Emit correct code for calculation of number of trips in `DO' loops
1467      for cases where the loop should not execute at all.  (This bug
1468      affected cases where the difference between the begin and end
1469      values was less than the step count, though probably not for
1470      floating-point cases.)
1471
1472    * Fix crash when extra parentheses surround item in `DATA'
1473      implied-`DO' list.
1474
1475    * Fix crash over minor internal inconsistencies in handling
1476      diagnostics, just substitute dummy strings where necessary.
1477
1478    * Fix crash on some systems when compiling call to `MVBITS()'
1479      intrinsic.
1480
1481    * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
1482      string of one or more digits.
1483
1484    * Fix crash on `DCMPLX()' with a single `INTEGER' argument.
1485
1486    * Fix various crashes involving code with diagnosed errors.
1487
1488    * Support `-I' option for `INCLUDE' statement, plus `gcc''s
1489      `header.gcc' facility for handling systems like MS-DOS.
1490
1491    * Allow `INCLUDE' statement to be continued across multiple lines,
1492      even allow it to coexist with other statements on the same line.
1493
1494    * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
1495      fixes a bug involving infinite loops reading EOF with empty
1496      list-directed I/O list.
1497
1498    * Remove all the `g77'-specific auto-configuration scripts, code,
1499      and so on, except for temporary substitutes for bsearch() and
1500      strtoul(), as too many configure/build problems were reported in
1501      these areas.  People will have to fix their systems' problems
1502      themselves, or at least somewhere other than `g77', which expects
1503      a working ANSI C environment (and, for now, a GNU C compiler to
1504      compile `g77' itself).
1505
1506    * Complain if initialized common redeclared as larger in subsequent
1507      program unit.
1508
1509    * Warn if blank common initialized, since its size can vary and hence
1510      related warnings that might be helpful won't be seen.
1511
1512    * New `-fbackslash' option, on by default, that causes `\' within
1513      `CHARACTER' and Hollerith constants to be interpreted a la GNU C.
1514      Note that this behavior is somewhat different from `f2c''s, which
1515      supports only a limited subset of backslash (escape) sequences.
1516
1517    * Make `-fugly-args' the default.
1518
1519    * New `-fugly-init' option, on by default, that allows
1520      typeless/Hollerith to be specified as initial values for variables
1521      or named constants (`PARAMETER'), and also allows
1522      character<->numeric conversion in those contexts--turn off via
1523      `-fno-ugly-init'.
1524
1525    * New `-finit-local-zero' option to initialize local variables to
1526      binary zeros.  This does not affect whether they are `SAVE'd, i.e.
1527      made automatic or static.
1528
1529    * New `-Wimplicit' option to warn about implicitly typed variables,
1530      arrays, and functions.  (Basically causes all program units to
1531      default to `IMPLICIT NONE'.)
1532
1533    * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
1534      `-O' not specified, since `-Wuninitialized' requires `-O'), and
1535      implies `-Wunused' as well.
1536
1537    * `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
1538      names (since they are assumed to refer to block data program
1539      units, to make use of libraries more reliable).
1540
1541    * Support `%LOC()' and `LOC()' of character arguments.
1542
1543    * Support null (zero-length) character constants and expressions.
1544
1545    * Support `f2c''s `IMAG()' generic intrinsic.
1546
1547    * Support `ICHAR()', `IACHAR()', and `LEN()' of character
1548      expressions that are valid in assignments but not normally as
1549      actual arguments.
1550
1551    * Support `f2c'-style `&' in column 1 to mean continuation line.
1552
1553    * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
1554      `BLOCK DATA', even though these are not allowed by the standard.
1555
1556    * Allow `RETURN' in main program unit.
1557
1558    * Changes to Hollerith-constant support to obey Appendix C of the
1559      standard:
1560
1561         - Now padded on the right with zeros, not spaces.
1562
1563         - Hollerith "format specifications" in the form of arrays of
1564           non-character allowed.
1565
1566         - Warnings issued when non-space truncation occurs when
1567           converting to another type.
1568
1569         - When specified as actual argument, now passed by reference to
1570           `INTEGER' (padded on right with spaces if constant too small,
1571           otherwise fully intact if constant wider the `INTEGER' type)
1572           instead of by value.
1573
1574      *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
1575      which it treats exactly the same as `CALL FOO('X')', but which the
1576      standard and `g77' treat as `CALL FOO(%REF('X   '))' (padded with
1577      as many spaces as necessary to widen to `INTEGER'), essentially.
1578
1579    * Changes and fixes to typeless-constant support:
1580
1581         - Now treated as a typeless double-length `INTEGER' value.
1582
1583         - Warnings issued when overflow occurs.
1584
1585         - Padded on the left with zeros when converting to a larger
1586           type.
1587
1588         - Should be properly aligned and ordered on the target machine
1589           for whatever type it is turned into.
1590
1591         - When specified as actual argument, now passed as reference to
1592           a default `INTEGER' constant.
1593
1594    * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
1595      the expression plus a length for the expression just as if it were
1596      a `CHARACTER' expression.  For example, `CALL FOO(%DESCR(D))',
1597      where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
1598
1599    * Name of multi-entrypoint master function changed to incorporate
1600      the name of the primary entry point instead of a decimal value, so
1601      the name of the master function for `SUBROUTINE X' with alternate
1602      entry points is now `__g77_masterfun_x'.
1603
1604    * Remove redundant message about zero-step-count `DO' loops.
1605
1606    * Clean up diagnostic messages, shortening many of them.
1607
1608    * Fix typo in `g77' man page.
1609
1610    * Clarify implications of constant-handling bugs in `f/BUGS'.
1611
1612    * Generate better code for `**' operator with a right-hand operand of
1613      type `INTEGER'.
1614
1615    * Generate better code for `SQRT()' and `DSQRT()', also when
1616      `-ffast-math' specified, enable better code generation for `SIN()'
1617      and `COS()'.
1618
1619    * Generate better code for some kinds of array references.
1620
1621    * Speed up lexing somewhat (this makes the compilation phase
1622      noticeably faster).
1623