*Note:* This file is automatically generated from the files `news0.texi' and `news.texi'. `NEWS' is *not* a source file, although it is normally included within source distributions. This file lists news about the EGCS-1.2 version (and some other versions) of the GNU Fortran compiler. Copyright (C) 1995-1999 Free Software Foundation, Inc. You may copy, distribute, and modify it freely as long as you preserve this copyright notice and permission notice. News About GNU Fortran ********************** Changes made to recent versions of GNU Fortran are listed below, with the most recent version first. The changes are generally listed in order: 1. Code-generation and run-time-library bug-fixes 2. Compiler and run-time-library crashes involving valid code that have been fixed 3. New features 4. Fixes and enhancements to existing features 5. New diagnostics 6. Internal improvements 7. Miscellany This order is not strict--for example, some items involve a combination of these elements. Note that two variants of `g77' are tracked below. The `egcs' variant is described vis-a-vis previous versions of `egcs' and/or an official FSF version, as appropriate. Therefore, `egcs' versions sometimes have multiple listings to help clarify how they differ from other versions, though this can make getting a complete picture of what a particular `egcs' version contains somewhat more difficult. *Warning:* The information below is still under development, and might not accurately reflect the `g77' code base of which it is a part. Efforts are made to keep it somewhat up-to-date, but they are particularly concentrated on any version of this information that is distributed as part of a *released* `g77'. In particular, while this information is intended to apply to the EGCS-1.2 version of `g77', only an official *release* of that version is expected to contain documentation that is most consistent with the `g77' product in that version. Nevertheless, information on *previous* releases of `g77', below, is likely to be more up-to-date and accurate than the equivalent information that accompanied those releases, assuming the last-updated date of the information below is later than the dates of those releases. That's due to attempts to keep this development version of news about previous `g77' versions up-to-date. An online, "live" version of this document (derived directly from the mainline, development version of `g77' within `egcs') is available at `http://egcs.cygnus.com/onlinedocs/g77_news.html'. The following information was last updated on 1999-04-23: In `egcs' 1.2 (versus 1.1.2): ============================= 1. `g77' no longer generates bad code for assignments, or other conversions, of `REAL' or `COMPLEX' constant expressions to type `INTEGER(KIND=2)' (often referred to as `INTEGER*8'). For example, `INTEGER*8 J; J = 4E10' now works as documented. 2. Fix `g77' so it no longer crashes when compiling I/O statements using keywords that define `INTEGER' values, such as `IOSTAT=J', where J is other than default `INTEGER' (such as `INTEGER*2'). Instead, it issues a diagnostic. 3. Fix `g77' so it properly handles `DATA A/RPT*VAL/', where RPT is not default `INTEGER', such as `INTEGER*2', instead of producing a spurious diagnostic. 4. The `-ax' option is now obeyed when compiling Fortran programs. (It is passed to the `f771' driver.) * The new `-fsubscript-check' option causes `g77' to compile run-time bounds checks of array subscripts, as well as of substring start and end points. The current implementation uses the `libf2c' library routine `s_rnge' to print the diagnostic. Since a future version of `g77' might use a different implementation, use the new `-ff2c-subscript-check' option if your application requires use of `s_rnge' or a compile-time diagnostic. * Source file names with the suffixes `.FOR' and `.FPP' now are recognized by `g77' as if they ended in `.for' and `.fpp', respectively. * `g77' now warns about a reference to an intrinsic that has an interface that is not Year 2000 (Y2K) compliant. Also, the `libg2c' has been changed to increase the likelihood of catching references to the implementations of these intrinsics using the `EXTERNAL' mechanism (which would avoid the new warnings). 5. `g77' now warns about a reference to a function when the corresponding *subsequent* function program unit disagrees with the reference concerning the type of the function. * `-fno-emulate-complex' is now the default option. This should result in improved performance of code that uses the `COMPLEX' data type. * The `-malign-double' option now reliably aligns *all* double-precision variables and arrays on Intel x86 targets. 6. Even without the `-malign-double' option, `g77' reliably aligns local double-precision variables that are not in `EQUIVALENCE' areas and not `SAVE''d. 7. A substantial portion of the `g77' front end's code-generation component was rewritten. It now generates code using facilities more robustly supported by the `gcc' back end. One effect of this rewrite is that some codes no longer produce a spurious "label LAB used before containing binding contour" message. * Support for the `-fugly' option has been removed. 8. Improve documentation and indexing, including information on Year 2000 (Y2K) compliance, and providing more information on internals of the front end. 9. Upgrade to `libf2c' as of 1999-03-17. In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1): ===================================================== * Fix the `IDate' intrinsic (VXT) (in `libg2c') so the returned year is in the documented, non-Y2K-compliant range of 0-99, instead of being returned as 100 in the year 2000. * Fix the `Date_and_Time' intrinsic (in `libg2c') to return the milliseconds value properly in VALUES(8). * Fix the `LStat' intrinsic (in `libg2c') to return device-ID information properly in SARRAY(7). * Improve documentation. In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1): =================================================== * Fix `libg2c' so it performs an implicit `ENDFILE' operation (as appropriate) whenever a `REWIND' is done. (This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s version of `libf2c'.) * Fix `libg2c' so it no longer crashes with a spurious diagnostic upon doing any I/O following a direct formatted write. (This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s version of `libf2c'.) * Fix `g77' so it no longer crashes compiling references to the `Rand' intrinsic on some systems. * Fix `g77' portion of installation process so it works better on some systems (those with shells requiring `else true' clauses on `if' constructs for the completion code to be set properly). In `egcs' 1.1 (versus 0.5.24): ============================== 10. Fix `g77' crash compiling code containing the construct `CMPLX(0.)' or similar. 11. Fix `g77' crash (or apparently infinite run-time) when compiling certain complicated expressions involving `COMPLEX' arithmetic (especially multiplication). 12. Fix a code-generation bug that afflicted Intel x86 targets when `-O2' was specified compiling, for example, an old version of the `DNRM2' routine. The x87 coprocessor stack was being mismanaged in cases involving assigned `GOTO' and `ASSIGN'. * Align static double-precision variables and arrays on Intel x86 targets regardless of whether `-malign-double' is specified. Generally, this affects only local variables and arrays having the `SAVE' attribute or given initial values via `DATA'. In `egcs' 1.1 (versus `egcs' 1.0.3): ==================================== 13. Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte beyond the end of its `CHARACTER' argument, and in the `libU77' intrinsics `GMTime' and `LTime' that overwrote their arguments. 14. Assumed arrays with negative bounds (such as `REAL A(-1:*)') no longer elicit spurious diagnostics from `g77', even on systems with pointers having different sizes than integers. This bug is not known to have existed in any recent version of `gcc'. It was introduced in an early release of `egcs'. 15. Valid combinations of `EXTERNAL', passing that external as a dummy argument without explicitly giving it a type, and, in a subsequent program unit, referencing that external as an external function with a different type no longer crash `g77'. 16. `CASE DEFAULT' no longer crashes `g77'. 17. The `-Wunused' option no longer issues a spurious warning about the "master" procedure generated by `g77' for procedures containing `ENTRY' statements. * Support `FORMAT(I)' when EXPR is a compile-time constant `INTEGER' expression. * Fix `g77' `-g' option so procedures that use `ENTRY' can be stepped through, line by line, in `gdb'. * Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'. * Use `tempnam', if available, to open scratch files (as in `OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment variable, if present, is used. * `g77''s version of `libf2c' separates out the setting of global state (such as command-line arguments and signal handling) from `main.o' into distinct, new library archive members. This should make it easier to write portable applications that have their own (non-Fortran) `main()' routine properly set up the `libf2c' environment, even when `libf2c' (now `libg2c') is a shared library. 18. `g77' no longer installs the `f77' command and `f77.1' man page in the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. 19. `g77' no longer installs the `libf2c.a' library and `f2c.h' include file in the `/usr' or `/usr/local' heirarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. 20. The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. 21. The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `g77' command now expects the run-time library to be named `libg2c.a' instead of `libf2c.a', to ensure that a version other than the one built and installed as part of the same `g77' version is picked up. 22. During the configuration and build process, `g77' creates subdirectories it needs only as it needs them. Other cleaning up of the configuration and build process has been performed as well. 23. `install-info' now used to update the directory of Info documentation to contain an entry for `g77' (during installation). * Some diagnostics have been changed from warnings to errors, to prevent inadvertent use of the resulting, probably buggy, programs. These mostly include diagnostics about use of unsupported features in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and about truncations of various sorts of constants. 24. Improve compilation of `FORMAT' expressions so that a null byte is appended to the last operand if it is a constant. This provides a cleaner run-time diagnostic as provided by `libf2c' for statements like `PRINT '(I1', 42'. 25. Improve documentation and indexing. 26. The upgrade to `libf2c' as of 1998-06-18 should fix a variety of problems, including those involving some uses of the `T' format specifier, and perhaps some build (porting) problems as well. In 0.5.24 and `egcs' 1.1 (versus 0.5.23): ========================================= 27. `g77' no longer produces incorrect code and initial values for `EQUIVALENCE' and `COMMON' aggregates that, due to "unnatural" ordering of members vis-a-vis their types, require initial padding. 28. `g77' no longer crashes when compiling code containing specification statements such as `INTEGER(KIND=7) PTR'. 29. `g77' no longer crashes when compiling code such as `J = SIGNAL(1, 2)'. * `g77' now treats `%LOC(EXPR)' and `LOC(EXPR)' as "ordinary" expressions when they are used as arguments in procedure calls. This change applies only to global (filewide) analysis, making it consistent with how `g77' actually generates code for these cases. Previously, `g77' treated these expressions as denoting special "pointer" arguments for the purposes of filewide analysis. * The `g77' driver now ensures that `-lg2c' is specified in the link phase prior to any occurrence of `-lm'. This prevents accidentally linking to a routine in the SunOS4 `-lm' library when the generated code wants to link to the one in `libf2c' (`libg2c'). * `g77' emits more debugging information when `-g' is used. This new information allows, for example, `which __g77_length_a' to be used in `gdb' to determine the type of the phantom length argument supplied with `CHARACTER' variables. This information pertains to internally-generated type, variable, and other information, not to the longstanding deficiencies vis-a-vis `COMMON' and `EQUIVALENCE'. * The F90 `Date_and_Time' intrinsic now is supported. * The F90 `System_Clock' intrinsic allows the optional arguments (except for the `Count' argument) to be omitted. 30. Upgrade to `libf2c' as of 1998-06-18. 31. Improve documentation and indexing. In previous versions: ===================== Information on previous versions is not provided in this `egcs/gcc/f/NEWS' file, to keep it short. See `egcs/gcc/f/news.texi', or any of its other derivations (Info, HTML, dvi forms) for such information.