📄 bugs.texi
字号:
@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-06-29@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} versionof 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 preservethis 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 ifsetThis section identifies bugs that @code{g77} @emph{users}might run into in the @value{which-g77} versionof @code{g77}.This includes bugs that are actually in the @code{gcc}back end (GBE) or in @code{libf2c}, because thosesets of code are at least somewhat under the controlof (and necessarily intertwined with) @code{g77},so it isn't worth separating them out.@ifset DOC-G77For 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-BUGSFor 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 baseof which it is a part.Efforts are made to keep it somewhat up-to-date,but they are particularly concentratedon any version of this informationthat is distributed as part of a @emph{released} @code{g77}.In particular, while this information is intended to apply tothe @value{which-g77} version of @code{g77},only an official @emph{release} of that versionis expected to contain documentation that ismost consistent with the @code{g77} product in that version.@end ifsetAn online, ``live'' version of this document(derived directly from the mainline, development versionof @code{g77} within @code{egcs})is available via@uref{http://www.gnu.org/software/gcc/onlinedocs/g77_bugs.html}.Follow the ``Known Bugs'' link.@ifset DOC-G77For information on bugs that might afflict people whoconfigure, port, build, and install @code{g77},see @ref{Problems Installing}.@end ifset@ifset DOC-BUGSFor information on bugs that might afflict people whoconfigure, port, build, and install @code{g77},see "Problems Installing" in @file{@value{path-g77}/INSTALL}.@end ifsetThe following information was last updated on @value{last-update-bugs}:@itemize @bullet@item@code{g77} fails to warn aboutuse of a ``live'' iterative-DO variableas an implied-DO variablein a @code{WRITE} or @code{PRINT} statement(although it does warn about this in a @code{READ} statement).@itemSomething about @code{g77}'s straightforward handling oflabel references and definitions sometimes prevents the GBEfrom 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.@itemSome 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 rangefrom @samp{-2**31} to @samp{2**31-1} (the range fortwo's-complement 32-bit values),instead of determining their range from the actual range of thetype for the configuration (and, someday, for the constant).Further, it generally doesn't implement the handlingof constants very well in that it makes assumptions about theconfiguration that it no longer makes regarding variables (types).Included with this item is the fact that @code{g77} doesn't recognizethat, on IEEE-754/854-compliant systems, @samp{0./0.} should produce a NaNand 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 aggregateareas 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, includingthe 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, contiguousareas uninitialized---significantly.However, even with the improvements, these cases stillrequire too much memory and CPU time.(Version 0.5.18 also improves cases where the initial values arezero to a much greater degree, so if the above exampleends with @samp{DATA A(1)/0/}, the compile-time performancewill be about as good as it will ever get, aside from unrelatedimprovements to the compiler.)Note that @code{g77} does display a warning message tonotify 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 usewith a debugger (the @samp{-g} command-line option).The code is present to do this, but doesn't work with at leastone debug format---perhaps it works with others.And it turns out there's a similar bug forlocal equivalence areas, so that has been disabled as well.As of Version 0.5.19, a temporary kludge solution is provided wherebysome rudimentary information on a member is written as a string thatis 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@itemWhen debugging, after starting up the debugger but before being ableto see the source code for the main program unit, the user must currentlyset a breakpoint at @code{MAIN__} (or @code{MAIN___} or @code{MAIN_} if@code{MAIN__} doesn't exist)and run the program until it hits the breakpoint.At that point, themain program unit is activated and about to execute its firstexecutable statement, but that's the state in which the debugger shouldstart up, as is the case for languages like C.@cindex debugger@itemDebugging @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 knownproblem---getting @code{g77} to work properly with otherdebuggers, 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 debuggershave with @code{g77} output might make it easier to properlyfix @code{g77}, and perhaps even improve @code{gdb}, so itis definitely welcome.Such information might even lead to all relevant productsworking together properly sooner.@cindex Alpha, support@cindex support, Alpha@item@code{g77} doesn't work perfectly on 64-bit configurationssuch 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 arrayof specifications of alignment requirements and preferences for targets,and front ends like @code{g77} should take advantage of thiswhen it becomes available.@cindex complex performance@cindex aliasing@itemThe @code{libf2c} routines that perform some run-timearithmetic on @code{COMPLEX} operandswere 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 believethe @code{g77} version works properlyeven in the presence of @emph{partially} aliased operands.However, these modifications have reduced performanceon targets such as x86,due to the extra copies of operands involved.@end itemize
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -