Use new tail-calling mechanism on ARM.
[official-gcc.git] / gcc / f / NEWS
blob3a6cf362c1adb59818408cbc6dac63169b113a20
1 *Note:* This file is automatically generated from the files
2 `news0.texi' and `news.texi'.  `NEWS' is *not* a source file, although
3 it is normally included within source distributions.
5    This file lists news about the GCC-2.95 version (and some other
6 versions) of the GNU Fortran compiler.  Copyright (C) 1995, 1996, 1997,
7 1998, 1999 Free
8 Software Foundation, Inc.  You may copy, distribute, and modify it
9 freely as long as you preserve this copyright notice and permission
10 notice.
12 News About GNU Fortran
13 **********************
15    Changes made to recent versions of GNU Fortran are listed below,
16 with the most recent version first.
18    The changes are generally listed in order:
20   1. Code-generation and run-time-library bug-fixes
22   2. Compiler and run-time-library crashes involving valid code that
23      have been fixed
25   3. New features
27   4. Fixes and enhancements to existing features
29   5. New diagnostics
31   6. Internal improvements
33   7. Miscellany
35    This order is not strict--for example, some items involve a
36 combination of these elements.
38    Note that two variants of `g77' are tracked below.  The `egcs'
39 variant is described vis-a-vis previous versions of `egcs' and/or an
40 official FSF version, as appropriate.
42    Therefore, `egcs' versions sometimes have multiple listings to help
43 clarify how they differ from other versions, though this can make
44 getting a complete picture of what a particular `egcs' version contains
45 somewhat more difficult.
47    *Warning:* The information below is still under development, and
48 might not accurately reflect the `g77' code base of which it is a part.
49 Efforts are made to keep it somewhat up-to-date, but they are
50 particularly concentrated on any version of this information that is
51 distributed as part of a *released* `g77'.
53    In particular, while this information is intended to apply to the
54 GCC-2.95 version of `g77', only an official *release* of that version
55 is expected to contain documentation that is most consistent with the
56 `g77' product in that version.
58    Nevertheless, information on *previous* releases of `g77', below, is
59 likely to be more up-to-date and accurate than the equivalent
60 information that accompanied those releases, assuming the last-updated
61 date of the information below is later than the dates of those releases.
63    That's due to attempts to keep this development version of news
64 about previous `g77' versions up-to-date.
66    An online, "live" version of this document (derived directly from
67 the mainline, development version of `g77' within `egcs') is available
68 at `http://www.gnu.org/software/gcc/onlinedocs/g77_news.html'.
70    The following information was last updated on 1999-07-08:
72 In development:
73 ===============
75   1. The `TtyNam' intrinsics now set NAME to all spaces (at run time)
76      if the system has no `ttyname' implementation available.
78   2. Upgrade to `libf2c' as of 1999-06-28.
80      This fixes a bug whereby input to a `NAMELIST' read involving a
81      repeat count, such as `K(5)=10*3', was not properly handled by
82      `libf2c'.  The first item was written to `K(5)', but the remaining
83      nine were written elsewhere (still within the array), not
84      necessarily starting at `K(6)'.
86 In 0.5.25, `GCC' 2.95 (`EGCS' 1.2) versus `EGCS' 1.1.2:
87 =======================================================
89   3. `g77' no longer generates bad code for assignments, or other
90      conversions, of `REAL' or `COMPLEX' constant expressions to type
91      `INTEGER(KIND=2)' (often referred to as `INTEGER*8').
93      For example, `INTEGER*8 J; J = 4E10' now works as documented.
95   4. `g77' no longer truncates `INTEGER(KIND=2)' (usually `INTEGER*8')
96      subscript expressions when evaluating array references on systems
97      with pointers widers than `INTEGER(KIND=1)' (such as Alphas).
99   5. `g77' no longer generates bad code for an assignment to a
100      `COMPLEX' variable or array that partially overlaps one or more of
101      the sources of the same assignment (a very rare construction).  It
102      now assigns through a temporary, in cases where such partial
103      overlap is deemed possible.
105   6. `libg2c' (`libf2c') no longer loses track of the file being worked
106      on during a `BACKSPACE' operation.
108   7. `libg2c' (`libf2c') fixes a bug whereby input to a `NAMELIST' read
109      involving a repeat count, such as `K(5)=10*3', was not properly
110      handled by `libf2c'.  The first item was written to `K(5)', but
111      the remaining nine were written elsewhere (still within the array),
112      not necessarily starting at `K(6)'.
114   8. Automatic arrays now seem to be working on HP-UX systems.
116   9. The `Date' intrinsic now returns the correct result on big-endian
117      systems.
119  10. Fix `g77' so it no longer crashes when compiling I/O statements
120      using keywords that define `INTEGER' values, such as `IOSTAT=J',
121      where J is other than default `INTEGER' (such as `INTEGER*2').
122      Instead, it issues a diagnostic.
124  11. Fix `g77' so it properly handles `DATA A/RPT*VAL/', where RPT is
125      not default `INTEGER', such as `INTEGER*2', instead of producing a
126      spurious diagnostic.  Also fix `DATA (A(I),I=1,N)', where `N' is
127      not default `INTEGER' to work instead of crashing `g77'.
129  12. The `-ax' option is now obeyed when compiling Fortran programs.
130      (It is passed to the `f771' driver.)
132    * The new `-fbounds-check' option causes `g77' to compile run-time
133      bounds checks of array subscripts, as well as of substring start
134      and end points.
136    * `libg2c' now supports building as multilibbed library, which
137      provides better support for systems that require options such as
138      `-mieee' to work properly.
140    * Source file names with the suffixes `.FOR' and `.FPP' now are
141      recognized by `g77' as if they ended in `.for' and `.fpp',
142      respectively.
144    * The order of arguments to the *subroutine* forms of the `CTime',
145      `DTime', `ETime', and `TtyNam' intrinsics has been swapped.  The
146      argument serving as the returned value for the corresponding
147      function forms now is the *second* argument, making these
148      consistent with the other subroutine forms of `libU77' intrinsics.
150    * `g77' now warns about a reference to an intrinsic that has an
151      interface that is not Year 2000 (Y2K) compliant.  Also, `libg2c'
152      has been changed to increase the likelihood of catching references
153      to the implementations of these intrinsics using the `EXTERNAL'
154      mechanism (which would avoid the new warnings).
156  13. `g77' now warns about a reference to a function when the
157      corresponding *subsequent* function program unit disagrees with
158      the reference concerning the type of the function.
160    * `-fno-emulate-complex' is now the default option.  This should
161      result in improved performance of code that uses the `COMPLEX'
162      data type.
164    * The `-malign-double' option now reliably aligns *all*
165      double-precision variables and arrays on Intel x86 targets.
167  14. Even without the `-malign-double' option, `g77' reliably aligns
168      local double-precision variables that are not in `EQUIVALENCE'
169      areas and not `SAVE''d.
171  15. `g77' now open-codes ("inlines") division of `COMPLEX' operands
172      instead of generating a run-time call to the `libf2c' routines
173      `c_div' or `z_div', unless the `-Os' option is specified.
175    * `g77' no longer generates code to maintain `errno', a C-language
176      concept, when performing operations such as the `SqRt' intrinsic.
178  16. `g77' developers can temporarily use the `-fflatten-arrays' option
179      to compare how the compiler handles code generation using C-like
180      constructs as compared to the Fortran-like method constructs
181      normally used.
183  17. A substantial portion of the `g77' front end's code-generation
184      component was rewritten.  It now generates code using facilities
185      more robustly supported by the `gcc' back end.  One effect of this
186      rewrite is that some codes no longer produce a spurious "label LAB
187      used before containing binding contour" message.
189    * Support for the `-fugly' option has been removed.
191  18. Improve documentation and indexing, including information on Year
192      2000 (Y2K) compliance, and providing more information on internals
193      of the front end.
195  19. Upgrade to `libf2c' as of 1999-05-10.
197 In 0.5.24 versus 0.5.23:
198 ========================
200    There is no `g77' version 0.5.24 at this time, or planned.  0.5.24
201 is the version number designated for bug fixes and, perhaps, some new
202 features added, to 0.5.23.  Version 0.5.23 requires `gcc' 2.8.1, as
203 0.5.24 was planned to require.
205    Due to `EGCS' becoming `GCC' (which is now an acronym for "GNU
206 Compiler Collection"), and `EGCS' 1.2 becoming officially designated
207 `GCC' 2.95, there seems to be no need for an actual 0.5.24 release.
209    To reduce the confusion already resulting from use of 0.5.24 to
210 designate `g77' versions within `EGCS' versions 1.0 and 1.1, as well as
211 in versions of `g77' documentation and notices during that period,
212 "mainline" `g77' version numbering resumes at 0.5.25 with `GCC' 2.95
213 (`EGCS' 1.2), skipping over 0.5.24 as a placeholder version number.
215    To repeat, there is no `g77' 0.5.24, but there is now a 0.5.25.
216 Please remain calm and return to your keypunch units.
218 In `EGCS' 1.1.2 versus `EGCS' 1.1.1:
219 ====================================
221    * Fix the `IDate' intrinsic (VXT) (in `libg2c') so the returned year
222      is in the documented, non-Y2K-compliant range of 0-99, instead of
223      being returned as 100 in the year 2000.
225    * Fix the `Date_and_Time' intrinsic (in `libg2c') to return the
226      milliseconds value properly in VALUES(8).
228    * Fix the `LStat' intrinsic (in `libg2c') to return device-ID
229      information properly in SARRAY(7).
231    * Improve documentation.
233 In `EGCS' 1.1.1 versus `EGCS' 1.1:
234 ==================================
236    * Fix `libg2c' so it performs an implicit `ENDFILE' operation (as
237      appropriate) whenever a `REWIND' is done.
239      (This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s
240      version of `libf2c'.)
242    * Fix `libg2c' so it no longer crashes with a spurious diagnostic
243      upon doing any I/O following a direct formatted write.
245      (This bug was introduced in 0.5.23 and `egcs' 1.1 in `g77''s
246      version of `libf2c'.)
248    * Fix `g77' so it no longer crashes compiling references to the
249      `Rand' intrinsic on some systems.
251    * Fix `g77' portion of installation process so it works better on
252      some systems (those with shells requiring `else true' clauses on
253      `if' constructs for the completion code to be set properly).
255 In `EGCS' 1.1 versus `EGCS' 1.0.3:
256 ==================================
258  20. Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte
259      beyond the end of its `CHARACTER' argument, and in the `libU77'
260      intrinsics `GMTime' and `LTime' that overwrote their arguments.
262  21. Assumed arrays with negative bounds (such as `REAL A(-1:*)') no
263      longer elicit spurious diagnostics from `g77', even on systems
264      with pointers having different sizes than integers.
266      This bug is not known to have existed in any recent version of
267      `gcc'.  It was introduced in an early release of `egcs'.
269  22. Valid combinations of `EXTERNAL', passing that external as a dummy
270      argument without explicitly giving it a type, and, in a subsequent
271      program unit, referencing that external as an external function
272      with a different type no longer crash `g77'.
274  23. `CASE DEFAULT' no longer crashes `g77'.
276  24. The `-Wunused' option no longer issues a spurious warning about
277      the "master" procedure generated by `g77' for procedures
278      containing `ENTRY' statements.
280    * Support `FORMAT(I<EXPR>)' when EXPR is a compile-time constant
281      `INTEGER' expression.
283    * Fix `g77' `-g' option so procedures that use `ENTRY' can be
284      stepped through, line by line, in `gdb'.
286    * Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'.
288    * Use `tempnam', if available, to open scratch files (as in
289      `OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment
290      variable, if present, is used.
292    * `g77''s version of `libf2c' separates out the setting of global
293      state (such as command-line arguments and signal handling) from
294      `main.o' into distinct, new library archive members.
296      This should make it easier to write portable applications that
297      have their own (non-Fortran) `main()' routine properly set up the
298      `libf2c' environment, even when `libf2c' (now `libg2c') is a
299      shared library.
301  25. `g77' no longer installs the `f77' command and `f77.1' man page in
302      the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok'
303      file exists in the source or build directory.  See the
304      installation documentation for more information.
306  26. `g77' no longer installs the `libf2c.a' library and `f2c.h'
307      include file in the `/usr' or `/usr/local' heirarchy, even if the
308      `f2c-install-ok' or `f2c-exists-ok' files exist in the source or
309      build directory.  See the installation documentation for more
310      information.
312  27. The `libf2c.a' library produced by `g77' has been renamed to
313      `libg2c.a'.  It is installed only in the `gcc' "private" directory
314      heirarchy, `gcc-lib'.  This allows system administrators and users
315      to choose which version of the `libf2c' library from `netlib' they
316      wish to use on a case-by-case basis.  See the installation
317      documentation for more information.
319  28. The `f2c.h' include (header) file produced by `g77' has been
320      renamed to `g2c.h'.  It is installed only in the `gcc' "private"
321      directory heirarchy, `gcc-lib'.  This allows system administrators
322      and users to choose which version of the include file from
323      `netlib' they wish to use on a case-by-case basis.  See the
324      installation documentation for more information.
326    * The `g77' command now expects the run-time library to be named
327      `libg2c.a' instead of `libf2c.a', to ensure that a version other
328      than the one built and installed as part of the same `g77' version
329      is picked up.
331  29. During the configuration and build process, `g77' creates
332      subdirectories it needs only as it needs them.  Other cleaning up
333      of the configuration and build process has been performed as well.
335  30. `install-info' now used to update the directory of Info
336      documentation to contain an entry for `g77' (during installation).
338    * Some diagnostics have been changed from warnings to errors, to
339      prevent inadvertent use of the resulting, probably buggy, programs.
340      These mostly include diagnostics about use of unsupported features
341      in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and
342      about truncations of various sorts of constants.
344  31. Improve compilation of `FORMAT' expressions so that a null byte is
345      appended to the last operand if it is a constant.  This provides a
346      cleaner run-time diagnostic as provided by `libf2c' for statements
347      like `PRINT '(I1', 42'.
349  32. Improve documentation and indexing.
351  33. The upgrade to `libf2c' as of 1998-06-18 should fix a variety of
352      problems, including those involving some uses of the `T' format
353      specifier, and perhaps some build (porting) problems as well.
355 In `EGCS' 1.1 versus `g77' 0.5.23:
356 ==================================
358  34. Fix a code-generation bug that afflicted Intel x86 targets when
359      `-O2' was specified compiling, for example, an old version of the
360      `DNRM2' routine.
362      The x87 coprocessor stack was being mismanaged in cases involving
363      assigned `GOTO' and `ASSIGN'.
365  35. `g77' no longer produces incorrect code and initial values for
366      `EQUIVALENCE' and `COMMON' aggregates that, due to "unnatural"
367      ordering of members vis-a-vis their types, require initial padding.
369  36. Fix `g77' crash compiling code containing the construct
370      `CMPLX(0.)' or similar.
372  37. `g77' no longer crashes when compiling code containing
373      specification statements such as `INTEGER(KIND=7) PTR'.
375  38. `g77' no longer crashes when compiling code such as `J = SIGNAL(1,
376      2)'.
378    * `g77' now treats `%LOC(EXPR)' and `LOC(EXPR)' as "ordinary"
379      expressions when they are used as arguments in procedure calls.
380      This change applies only to global (filewide) analysis, making it
381      consistent with how `g77' actually generates code for these cases.
383      Previously, `g77' treated these expressions as denoting special
384      "pointer" arguments for the purposes of filewide analysis.
386  39. Fix `g77' crash (or apparently infinite run-time) when compiling
387      certain complicated expressions involving `COMPLEX' arithmetic
388      (especially multiplication).
390    * Align static double-precision variables and arrays on Intel x86
391      targets regardless of whether `-malign-double' is specified.
393      Generally, this affects only local variables and arrays having the
394      `SAVE' attribute or given initial values via `DATA'.
396    * The `g77' driver now ensures that `-lg2c' is specified in the link
397      phase prior to any occurrence of `-lm'.  This prevents
398      accidentally linking to a routine in the SunOS4 `-lm' library when
399      the generated code wants to link to the one in `libf2c' (`libg2c').
401    * `g77' emits more debugging information when `-g' is used.
403      This new information allows, for example, `which __g77_length_a'
404      to be used in `gdb' to determine the type of the phantom length
405      argument supplied with `CHARACTER' variables.
407      This information pertains to internally-generated type, variable,
408      and other information, not to the longstanding deficiencies
409      vis-a-vis `COMMON' and `EQUIVALENCE'.
411    * The F90 `Date_and_Time' intrinsic now is supported.
413    * The F90 `System_Clock' intrinsic allows the optional arguments
414      (except for the `Count' argument) to be omitted.
416  40. Upgrade to `libf2c' as of 1998-06-18.
418  41. Improve documentation and indexing.
420 In previous versions:
421 =====================
423    Information on previous versions is not provided in this
424 `egcs/gcc/f/NEWS' file, to keep it short.  See `egcs/gcc/f/news.texi',
425 or any of its other derivations (Info, HTML, dvi forms) for such
426 information.