| @c Copyright (C) 1995-1997 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 1996-09-09 |
| |
| @ifclear BUGSONLY |
| @node Actual Bugs |
| @section Actual Bugs We Haven't Fixed Yet |
| @end ifclear |
| |
| This section identifies bugs that @code{g77} @emph{users} |
| might run into. |
| 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. |
| |
| For information on bugs that might afflict people who |
| configure, port, build, and install @code{g77}, |
| @ref{Problems Installing}. |
| |
| @itemize @bullet |
| @cindex Alpha |
| @cindex -O2 |
| @item |
| @code{g77}'s version of @code{gcc}, and probably @code{g77} |
| itself, cannot be reliably used with the @samp{-O2} option |
| (or higher) on Digital Semiconductor Alpha AXP machines. |
| The problem is most immediately noticed in differences |
| discovered by @kbd{make compare} following a bootstrap |
| build using @samp{-O2}. |
| It also manifests itself as a failure to compile |
| @samp{DATA} statements such as @samp{DATA R/7./} correctly; |
| in this case, @samp{R} might be initialized to @samp{4.0}. |
| |
| Until this bug is fixed, use only @samp{-O1} or no optimization. |
| |
| @cindex DNRM2 |
| @cindex stack, 387 coprocessor |
| @cindex ix86 |
| @cindex -O2 |
| @item |
| A code-generation bug afflicts |
| Intel x86 targets when @samp{-O2} is specified |
| compiling, for example, an old version of |
| the @samp{DNRM2} routine. |
| The x87 coprocessor stack is being somewhat |
| mismanaged in cases where assigned @code{GOTO} |
| and @code{ASSIGN} are involved. |
| |
| Version 0.5.21 of @code{g77} contains an initial |
| effort to fix the problem, but this effort is |
| incomplete, and a more complete fix is planned |
| for the next release. |
| |
| @cindex SIGNAL() intrinsic |
| @cindex intrinsics, SIGNAL() |
| @item |
| Work is needed on the @code{SIGNAL()} intrinsic to ensure |
| that pointers and integers are properly handled on all |
| targets, including 64-bit machines. |
| |
| @cindex -fugly-comma option |
| @cindex options, -fugly-comma |
| @item |
| When using @samp{-fugly-comma}, @code{g77} assumes an extra |
| @samp{%VAL(0)} argument is to be passed to intrinsics |
| taking no arguments, such as @code{IARGC()}, which in |
| turn reject such a call. |
| Although this has been worked around for 0.5.18 due |
| to changes in the handling of intrinsics, |
| @code{g77} needs to do the ugly-argument-appending trick |
| only for external-function invocation, as this would |
| probably be more consistent with compilers that default |
| to using that trick. |
| |
| @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. |
| (Probably improved, but not wholly fixed, in 0.5.21.) |
| |
| @item |
| The @code{g77} command itself should more faithfully process |
| options the way the @code{gcc} command does. |
| For example, @code{gcc} accepts abbreviated forms of long options, |
| @code{g77} generally doesn't. |
| |
| @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 |
| @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. |
| @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. |
| |
| @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. |
| |
| @xref{Code Gen Options,,Options for Code Generation Conventions}, |
| for information on the @samp{-fdebug-kludge} option. |
| |
| @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 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's good for |
| performance). |
| |
| It is possible that this is not a real bug, and could be considered |
| a performance feature, but it might be important to provide |
| the ability to Fortran code to specify minimum padding for |
| aggregate areas such as common blocks---and, certainly, there |
| is the potential, with the current setup, for interface differences |
| in the way such areas are laid out between @code{g77} and other |
| compilers. |
| |
| @item |
| Some crashes occur when compiling under Solaris on x86 |
| machines. |
| |
| Nothing has been heard about any such problems for some time, |
| so this is considering a closed item as of 0.5.20. |
| Please submit any bug reports pertinent to @code{g77}'s support |
| for Solaris/x86 systems. |
| |
| @cindex RS/6000 support |
| @cindex support, RS/6000 |
| @item |
| RS/6000 support is not complete as of the gcc 2.6.3 back end. |
| The 2.7.0 back end appears to fix this problem, or at least mitigate |
| it significantly, but there is at least one known problem that is |
| likely to be a code-generation bug in @file{gcc-2.7.0} plus |
| @file{g77-0.5.16}. |
| This problem shows up only when compiling the Fortran program with @samp{-O}. |
| |
| Nothing has been heard about any RS/6000 problems for some time, |
| so this is considering a closed item as of 0.5.20. |
| Please submit any bug reports pertinent to @code{g77}'s support |
| for RS/6000 systems. |
| |
| @cindex SGI support |
| @cindex support, SGI |
| @item |
| SGI support is known to be a bit buggy. |
| The known problem shows up only when compiling the Fortran program with |
| @samp{-O}. |
| |
| It is possible these problems have all been fixed in 0.5.20 by |
| emulating complex arithmetic in the front end. |
| Please submit any bug reports pertinent to @code{g77}'s support |
| for SGI systems. |
| |
| @cindex Alpha, support |
| @cindex support, Alpha |
| @item |
| @code{g77} doesn't work perfectly on 64-bit configurations such as the Alpha. |
| This problem is expected to be largely resolved as of version 0.5.20, |
| and further addressed by 0.5.21. |
| Version 0.6 should solve most or all related problems (such as |
| 64-bit machines other than Digital Semiconductor (``DEC'') Alphas). |
| |
| One known bug that causes a compile-time crash occurs when compiling |
| code such as the following with optimization: |
| |
| @example |
| SUBROUTINE CRASH (TEMP) |
| INTEGER*2 HALF(2) |
| REAL TEMP |
| HALF(1) = NINT (TEMP) |
| END |
| @end example |
| |
| It is expected that a future version of @code{g77} will have a fix for this |
| problem, almost certainly by the time @code{g77} supports the forthcoming |
| version 2.8.0 of @code{gcc}. |
| |
| @cindex COMPLEX support |
| @cindex support, COMPLEX |
| @item |
| Maintainers of gcc report that the back end definitely has ``broken'' |
| support for @code{COMPLEX} types. |
| Based on their input, it seems many of |
| the problems affect only the more-general facilities for gcc's |
| @code{__complex__} type, such as @code{__complex__ int} |
| (where the real and imaginary parts are integers) that GNU |
| Fortran does not use. |
| |
| Version 0.5.20 of @code{g77} works around this |
| problem by not using the back end's support for @code{COMPLEX}. |
| The new option @samp{-fno-emulate-complex} avoids the work-around, |
| reverting to using the same ``broken'' mechanism as that used |
| by versions of @code{g77} prior to 0.5.20. |
| |
| @cindex ELF support |
| @cindex support, ELF |
| @cindex -fPIC option |
| @cindex options, -fPIC |
| @item |
| There seem to be some problems with passing constants, and perhaps |
| general expressions (other than simple variables/arrays), to procedures |
| when compiling on some systems (such as i386) with @samp{-fPIC}, as in |
| when compiling for ELF targets. |
| The symptom is that the assembler complains about invalid opcodes. |
| More investigation is needed, but the problem is almost certainly |
| in the gcc back end, and it apparently occurs only when |
| compiling sufficiently complicated functions @emph{without} the |
| @samp{-O} option. |
| @end itemize |
| |