| @c Copyright (C) 1995-1999 Free Software Foundation, Inc. |
| @c This is part of the G77 manual. |
| @c For copying conditions, see the file g77.texi. |
| |
| @c The text of this file appears in the file BUGS |
| @c in the G77 distribution, as well as in the G77 manual. |
| |
| @c Keep this the same as the dates above, since it's used |
| @c in the standalone derivations of this file (e.g. BUGS). |
| @set copyrights-bugs 1995-1999 |
| |
| @set last-update-bugs 1999-04-03 |
| |
| @include root.texi |
| |
| @ifset DOC-BUGS |
| @c The immediately following lines apply to the BUGS file |
| @c which is derived from this file. |
| @emph{Note:} This file is automatically generated from the files |
| @file{bugs0.texi} and @file{bugs.texi}. |
| @file{BUGS} is @emph{not} a source file, |
| although it is normally included within source distributions. |
| |
| This file lists known bugs in the @value{which-g77} version |
| of the GNU Fortran compiler. |
| Copyright (C) @value{copyrights-bugs} Free Software Foundation, Inc. |
| You may copy, distribute, and modify it freely as long as you preserve |
| this copyright notice and permission notice. |
| |
| @node Top,,, (dir) |
| @chapter Known Bugs In GNU Fortran |
| @end ifset |
| |
| @ifset DOC-G77 |
| @node Known Bugs |
| @section Known Bugs In GNU Fortran |
| @end ifset |
| |
| This section identifies bugs that @code{g77} @emph{users} |
| might run into in the @value{which-g77} version |
| of @code{g77}. |
| This includes bugs that are actually in the @code{gcc} |
| back end (GBE) or in @code{libf2c}, because those |
| sets of code are at least somewhat under the control |
| of (and necessarily intertwined with) @code{g77}, |
| so it isn't worth separating them out. |
| |
| @ifset DOC-G77 |
| For information on bugs in @emph{other} versions of @code{g77}, |
| see @ref{News,,News About GNU Fortran}. |
| There, lists of bugs fixed in various versions of @code{g77} |
| can help determine what bugs existed in prior versions. |
| @end ifset |
| |
| @ifset DOC-BUGS |
| For information on bugs in @emph{other} versions of @code{g77}, |
| see @file{@value{path-g77}/NEWS}. |
| There, lists of bugs fixed in various versions of @code{g77} |
| can help determine what bugs existed in prior versions. |
| @end ifset |
| |
| @ifset DEVELOPMENT |
| @emph{Warning:} The information below is still under development, |
| and might not accurately reflect the @code{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 @emph{released} @code{g77}. |
| |
| In particular, while this information is intended to apply to |
| the @value{which-g77} version of @code{g77}, |
| only an official @emph{release} of that version |
| is expected to contain documentation that is |
| most consistent with the @code{g77} product in that version. |
| @end ifset |
| |
| An online, ``live'' version of this document |
| (derived directly from the mainline, development version |
| of @code{g77} within @code{egcs}) |
| is available via |
| @uref{http://egcs.cygnus.com/onlinedocs/g77_bugs.html}. |
| Follow the ``Known Bugs'' link. |
| |
| @ifset DOC-G77 |
| For information on bugs that might afflict people who |
| configure, port, build, and install @code{g77}, |
| see @ref{Problems Installing}. |
| @end ifset |
| |
| @ifset DOC-BUGS |
| For information on bugs that might afflict people who |
| configure, port, build, and install @code{g77}, |
| see "Problems Installing" in @file{@value{path-g77}/INSTALL}. |
| @end ifset |
| |
| The following information was last updated on @value{last-update-bugs}: |
| |
| @itemize @bullet |
| @item |
| @c Tim Prince discovered this. |
| Automatic arrays possibly aren't working on HP-UX systems, |
| at least in HP-UX version 10.20. |
| Writing into them apparently causes over-writing |
| of statically declared data in the main program. |
| This probably means the arrays themselves are being under-allocated, |
| or pointers to them being improperly handled, |
| e.g. not passed to other procedures as they should be. |
| |
| @item |
| @code{g77} fails to warn about |
| use of a ``live'' iterative-DO variable |
| as an implied-DO variable |
| in a @samp{WRITE} or @samp{PRINT} statement |
| (although it does warn about this in a @samp{READ} statement). |
| |
| @item |
| Something about @code{g77}'s straightforward handling of |
| label references and definitions sometimes prevents the GBE |
| from unrolling loops. |
| Until this is solved, try inserting or removing @code{CONTINUE} |
| statements as the terminal statement, using the @code{END DO} |
| form instead, and so on. |
| |
| @item |
| Some confusion in diagnostics concerning failing @code{INCLUDE} |
| statements from within @code{INCLUDE}'d or @code{#include}'d files. |
| |
| @cindex integer constants |
| @cindex constants, integer |
| @item |
| @code{g77} assumes that @code{INTEGER(KIND=1)} constants range |
| from @samp{-2**31} to @samp{2**31-1} (the range for |
| two's-complement 32-bit values), |
| instead of determining their range from the actual range of the |
| type for the configuration (and, someday, for the constant). |
| |
| Further, it generally doesn't implement the handling |
| of constants very well in that it makes assumptions about the |
| configuration that it no longer makes regarding variables (types). |
| |
| Included with this item is the fact that @code{g77} doesn't recognize |
| that, on IEEE-754/854-compliant systems, @samp{0./0.} should produce a NaN |
| and no warning instead of the value @samp{0.} and a warning. |
| This is to be fixed in version 0.6, when @code{g77} will use the |
| @code{gcc} back end's constant-handling mechanisms to replace its own. |
| |
| @cindex compiler speed |
| @cindex speed, of compiler |
| @cindex compiler memory usage |
| @cindex memory usage, of compiler |
| @cindex large aggregate areas |
| @cindex initialization, bug |
| @cindex DATA statement |
| @cindex statements, DATA |
| @item |
| @code{g77} uses way too much memory and CPU time to process large aggregate |
| areas having any initialized elements. |
| |
| For example, @samp{REAL A(1000000)} followed by @samp{DATA A(1)/1/} |
| takes up way too much time and space, including |
| the size of the generated assembler file. |
| This is to be mitigated somewhat in version 0.6. |
| |
| Version 0.5.18 improves cases like this---specifically, |
| cases of @emph{sparse} initialization that leave large, contiguous |
| areas uninitialized---significantly. |
| However, even with the improvements, these cases still |
| require too much memory and CPU time. |
| |
| (Version 0.5.18 also improves cases where the initial values are |
| zero to a much greater degree, so if the above example |
| ends with @samp{DATA A(1)/0/}, the compile-time performance |
| will be about as good as it will ever get, aside from unrelated |
| improvements to the compiler.) |
| |
| Note that @code{g77} does display a warning message to |
| notify the user before the compiler appears to hang. |
| @ifset DOC-G77 |
| @xref{Large Initialization,,Initialization of Large Aggregate Areas}, |
| for information on how to change the point at which |
| @code{g77} decides to issue this warning. |
| @end ifset |
| |
| @cindex debugging |
| @cindex common blocks |
| @cindex equivalence areas |
| @cindex local equivalence areas |
| @item |
| @code{g77} doesn't emit variable and array members of common blocks for use |
| with a debugger (the @samp{-g} command-line option). |
| The code is present to do this, but doesn't work with at least |
| one debug format---perhaps it works with others. |
| And it turns out there's a similar bug for |
| local equivalence areas, so that has been disabled as well. |
| |
| As of Version 0.5.19, a temporary kludge solution is provided whereby |
| some rudimentary information on a member is written as a string that |
| is the member's value as a character string. |
| |
| @ifset DOC-G77 |
| @xref{Code Gen Options,,Options for Code Generation Conventions}, |
| for information on the @samp{-fdebug-kludge} option. |
| @end ifset |
| |
| @cindex code, displaying main source |
| @cindex displaying main source code |
| @cindex debugging main source code |
| @cindex printing main source |
| @item |
| When debugging, after starting up the debugger but before being able |
| to see the source code for the main program unit, the user must currently |
| set a breakpoint at @samp{MAIN__} (or @samp{MAIN___} or @samp{MAIN_} if |
| @samp{MAIN__} doesn't exist) |
| and run the program until it hits the breakpoint. |
| At that point, the |
| main program unit is activated and about to execute its first |
| executable statement, but that's the state in which the debugger should |
| start up, as is the case for languages like C. |
| |
| @cindex debugger |
| @item |
| Debugging @code{g77}-compiled code using debuggers other than |
| @code{gdb} is likely not to work. |
| |
| Getting @code{g77} and @code{gdb} to work together is a known |
| problem---getting @code{g77} to work properly with other |
| debuggers, for which source code often is unavailable to @code{g77} |
| developers, seems like a much larger, unknown problem, |
| and is a lower priority than making @code{g77} and @code{gdb} |
| work together properly. |
| |
| On the other hand, information about problems other debuggers |
| have with @code{g77} output might make it easier to properly |
| fix @code{g77}, and perhaps even improve @code{gdb}, so it |
| is definitely welcome. |
| Such information might even lead to all relevant products |
| working together properly sooner. |
| |
| @cindex Alpha, support |
| @cindex support, Alpha |
| @item |
| @code{g77} doesn't work perfectly on 64-bit configurations |
| such as the Digital Semiconductor (``DEC'') Alpha. |
| |
| This problem is largely resolved as of version 0.5.23. |
| Version 0.6 should solve most or all remaining problems |
| (such as cross-compiling involving 64-bit machines). |
| |
| @cindex padding |
| @cindex structures |
| @cindex common blocks |
| @cindex equivalence areas |
| @item |
| @code{g77} currently inserts needless padding for things like |
| @samp{COMMON A,IPAD} where @samp{A} is @code{CHARACTER*1} and @samp{IPAD} |
| is @code{INTEGER(KIND=1)} on machines like x86, |
| because the back end insists that @samp{IPAD} |
| be aligned to a 4-byte boundary, |
| but the processor has no such requirement |
| (though it is usually good for performance). |
| |
| The @code{gcc} back end needs to provide a wider array |
| of specifications of alignment requirements and preferences for targets, |
| and front ends like @code{g77} should take advantage of this |
| when it becomes available. |
| |
| @cindex alignment |
| @cindex double-precision performance |
| @cindex -malign-double |
| @item |
| The x86 target's @samp{-malign-double} option |
| no longer reliably aligns double-precision variables and arrays |
| when they are placed in the stack frame. |
| |
| This can significantly reduce the performance of some applications, |
| even on a run-to-run basis |
| (that is, performance measurements can vary fairly widely |
| depending on whether frequently used variables are properly aligned, |
| and that can change from one program run to the next, |
| even from one procedure call to the next). |
| |
| Versions 0.5.22 and earlier of @code{g77} |
| included a patch to @code{gcc} that enabled this, |
| but that patch has been deemed an improper (probably buggy) one |
| for version 2.8 of @code{gcc} and for @code{egcs}. |
| |
| Note that version 1.1 of @code{egcs} |
| aligns double-precision variables and arrays |
| when they are in static storage |
| even if @samp{-malign-double} is not specified. |
| |
| There is ongoing investigation into |
| how to make @samp{-malign-double} work properly, |
| also into how to make it unnecessary to get |
| all double-precision variables and arrays aligned |
| when such alignment would not violate |
| the relevant specifications for processor |
| and inter-procedural interfaces. |
| |
| For a suite of programs to test double-precision alignment, |
| see @uref{ftp://alpha.gnu.org/gnu/g77/align/}. |
| |
| @cindex complex performance |
| @cindex aliasing |
| @item |
| The @code{libf2c} routines that perform some run-time |
| arithmetic on @code{COMPLEX} operands |
| were modified circa version 0.5.20 of @code{g77} |
| to work properly even in the presence of aliased operands. |
| |
| While the @code{g77} and @code{netlib} versions of @code{libf2c} |
| differ on how this is accomplished, |
| the main differences are that we believe |
| the @code{g77} version works properly |
| even in the presence of @emph{partially} aliased operands. |
| |
| However, these modifications have reduced performance |
| on targets such as x86, |
| due to the extra copies of operands involved. |
| @end itemize |