1 @c Copyright (C) 1995-1997 Free Software Foundation, Inc.
2 @c This is part of the G77 manual.
3 @c For copying conditions, see the file g77.texi.
5 @c The text of this file appears in the file BUGS
6 @c in the G77 distribution, as well as in the G77 manual.
12 @chapter News About GNU Fortran
14 @cindex versions, recent
15 @cindex recent versions
17 Changes made to recent versions of GNU Fortran are listed
18 below, with the most recent version first.
20 The changes are generally listed with code-generation
21 bugs first, followed by compiler crashes involving valid
22 code, new features, fixes to existing features, new
23 diagnostics, internal improvements, and miscellany.
24 This order is not strict---for example, some items
25 involve a combination of these elements.
30 Fix a code-generation bug introduced by 0.5.20
31 caused by loop unrolling (by specifying
32 @samp{-funroll-loops} or similar).
33 This bug afflicted all code compiled by
34 version 2.7.2.2.f.2 of @code{gcc} (C, C++,
38 Fix a code-generation bug manifested when
39 combining local @code{EQUIVALENCE} with a
40 @code{DATA} statement that follows
41 the first executable statement (or is
42 treated as an executable-context statement
43 as a result of using the @samp{-fpedantic}
47 Fix a compiler crash that occured when an
48 integer division by a constant zero is detected.
49 Instead, when the @samp{-W} option is specified,
50 the @code{gcc} back end issues a warning about such a case.
51 This bug afflicted all code compiled by
52 version 2.7.2.2.f.2 of @code{gcc} (C, C++,
56 Fix a compiler crash that occurred in some cases
57 of procedure inlining.
58 (Such cases became more frequent in 0.5.20.)
61 Fix a compiler crash resulting from using @code{DATA}
62 or similar to initialize a @code{COMPLEX} variable or
66 Fix compiler crashes involving use of @code{AND}, @code{OR},
67 or @code{XOR} intrinsics.
70 Fix compiler bug triggered when using a @code{COMMON}
71 or @code{EQUIVALENCE} variable
72 as the target of an @code{ASSIGN}
73 or assigned-@code{GOTO} statement.
76 Fix compiler crashes due to using the name of a some
77 non-standard intrinsics (such as @samp{FTELL} or
78 @samp{FPUTC}) as such and as the name of a procedure
80 Such dual use of a name in a program is allowed by
83 @c @code{g77}'s version of @code{libf2c} has been modified
84 @c so that the external names of library's procedures do not
85 @c conflict with names used for Fortran procedures compiled
87 @c An additional layer of jacket procedures has been added
88 @c to @code{libf2c} to map the old names to the new names,
89 @c for automatic use by programs that interface to the
90 @c library procedures via the external-procedure mechanism.
92 @c For example, the intrinsic @code{FPUTC} previously was
93 @c implemented by @code{g77} as a call to the @code{libf2c}
94 @c routine @samp{fputc_}.
95 @c This would conflict with a Fortran procedure named @code{FPUTC}
96 @c (using default compiler options), and this conflict
97 @c would cause a crash under certain circumstances.
99 @c Now, the intrinsic @code{FPUTC} calls @samp{G77_fputc_0},
100 @c which does not conflict with the @samp{fputc_} external
101 @c that implements a Fortran procedure named @code{FPUTC}.
103 @c Programs that refer to @code{FPUTC} as an external procedure
104 @c without supplying their own implementation will link to
105 @c the new @code{libf2c} routine @samp{fputc_}, which is
106 @c simply a jacket routine that calls @samp{G77_fputc_0}.
109 Place automatic arrays on the stack, even if
110 @code{SAVE} or the @samp{-fno-automatic} option
112 This avoids a compiler crash in some cases.
115 The @samp{-malign-double} option now reliably aligns
116 @code{DOUBLE PRECISION} optimally on Pentium and
117 Pentium Pro architectures (586 and 686 in @code{gcc}).
120 New option @samp{-Wno-globals} disables warnings
121 about ``suspicious'' use of a name both as a global
122 name and as the implicit name of an intrinsic, and
123 warnings about disagreements over the number or natures of
124 arguments passed to global procedures, or the
125 natures of the procedures themselves.
127 The default is to issue such warnings, which are
128 new as of this version of @code{g77}.
131 New option @samp{-fno-globals} disables diagnostics
132 about potentially fatal disagreements
133 analysis problems, such as disagreements over the
134 number or natures of arguments passed to global
135 procedures, or the natures of those procedures themselves.
137 The default is to issue such diagnostics and flag
138 the compilation as unsuccessful.
139 With this option, the diagnostics are issued as
140 warnings, or, if @samp{-Wno-globals} is specified,
141 are not issued at all.
143 This option also disables inlining of global procedures,
144 to avoid compiler crashes resulting from coding errors
145 that these diagnostics normally would identify.
148 Diagnose cases where a reference to a procedure
149 disagrees with the type of that procedure, or
150 where disagreements about the number or nature
152 This avoids a compiler crash.
155 Improve performance of the @code{gcc} back end so
156 certain complicated expressions involving @code{COMPLEX}
157 arithmetic (especially multiplication) don't appear to
158 take forever to compile.
161 Fix a couple of profiling-related bugs in @code{gcc}
165 Integrate GNU Ada's (GNAT's) changes to the back end,
166 which consist almost entirely of bug fixes.
169 Include some other @code{gcc} fixes that seem useful in
170 @code{g77}'s version of @code{gcc}.
171 (See @file{gcc/ChangeLog} for details---compare it
172 to that file in the vanilla @code{gcc-2.7.2.2.tar.gz}
176 Fix @code{libU77} routines that accept file and other names
177 to strip trailing blanks from them, for consistency
178 with other implementations.
179 Blanks may be forcibly appended to such names by
180 appending a single null character (@samp{CHAR(0)})
181 to the significant trailing blanks.
184 Fix @code{CHMOD} intrinsic to work with file names
185 that have embedded blanks, commas, and so on.
188 Fix @code{SIGNAL} intrinsic so it accepts an
189 optional third @samp{Status} argument.
192 Fix @code{IDATE()} intrinsic subroutine (VXT form)
193 so it accepts arguments in the correct order.
194 Documentation fixed accordingly, and for
195 @code{GMTIME()} and @code{LTIME()} as well.
198 Make many changes to @code{libU77} intrinsics to
199 support existing code more directly.
201 Such changes include allowing both subroutine and
202 function forms of many routines, changing @code{MCLOCK()}
203 and @code{TIME()} to return @code{INTEGER(KIND=1)} values,
204 introducing @code{MCLOCK8()} and @code{TIME8()} to
205 return @code{INTEGER(KIND=2)} values,
206 and placing functions that are intended to perform
207 side effects in a new intrinsic group, @code{badu77}.
210 Improve @code{libU77} so it is more portable.
213 Add options @samp{-fbadu77-intrinsics-delete},
214 @samp{-fbadu77-intrinsics-hide}, and so on.
217 Fix crashes involving diagnosed or invalid code.
220 @code{g77} and @code{gcc} now do a somewhat better
221 job detecting and diagnosing arrays that are too
222 large to handle before these cause diagnostics
223 during the assembler or linker phase, a compiler
224 crash, or generation of incorrect code.
227 Improve alias analysis code to properly handle
228 output registers (such as the @samp{%o} registers
232 Add support for @code{restrict} keyword in @code{gcc}
236 Modify @code{make} rules and related code so that
237 generation of Info documentation doesn't require
238 compilation using @code{gcc}.
239 Now, any ANSI C compiler should be adequate to
240 produce the @code{g77} documentation (in particular,
241 the tables of intrinsics) from scratch.
244 Add @code{INT2} and @code{INT8} intrinsics.
247 Add @code{CPU_TIME} intrinsic.
250 Add @code{ALARM} intrinsic.
253 @code{CTIME} intrinsic now accepts any @code{INTEGER}
254 argument, not just @code{INTEGER(KIND=2)}.
257 Warn when explicit type declaration disagrees with
258 the type of an intrinsic invocation.
261 Support @samp{*f771} entry in @code{gcc} @file{specs} file.
264 Fix typo in @code{make} rule @samp{g77-cross}, used only for
268 Fix @code{libf2c} build procedure to re-archive library
269 if previous attempt to archive was interrupted.
272 Fix @code{gcc} to more easily support configuring on
273 Pentium Pro (686) systems.
276 Change @code{gcc} to unroll loops only during the last
277 invocation (of as many as two invocations) of loop
281 Improve handling of @samp{-fno-f2c} so that code that
282 attempts to pass an intrinsic as an actual argument,
283 such as @samp{CALL FOO(ABS)}, is rejected due to the fact
284 that the run-time-library routine is, effectively,
285 compiled with @samp{-ff2c} in effect.
288 Fix @code{g77} driver to recognize @samp{-fsyntax-only}
289 as an option that inhibits linking, just like @samp{-c} or
290 @samp{-S}, and to recognize and properly handle the
291 @samp{-nostdlib}, @samp{-M}, @samp{-MM}, @samp{-nodefaultlibs},
292 and @samp{-Xlinker} options.
295 Upgrade to @code{libf2c} as of 1997-08-16.
298 Modify @code{libf2c} to consistently and clearly diagnose
299 recursive I/O (at run time).
302 @code{g77} driver now prints version information (such as produced
303 by @kbd{g77 -v}) to @code{stderr} instead of @code{stdout}.
306 The @samp{.r} suffix now designates a Ratfor source file,
307 to be preprocessed via the @code{ratfor} command, available
311 Fix some aspects of how @code{gcc} determines what kind of
312 system is being configured and what kinds are supported.
313 For example, GNU Linux/Alpha ELF systems now are directly
320 Improve documentation and indexing.
323 Include all pertinent files for @code{libf2c} that come
324 from @code{netlib.bell-labs.com}; give any such files
325 that aren't quite accurate in @code{g77}'s version of
326 @code{libf2c} the suffix @samp{.netlib}.
329 Reserve @code{INTEGER(KIND=0)} for future use.
335 The @samp{-fno-typeless-boz} option is now the default.
337 This option specifies that non-decimal-radix
338 constants using the prefixed-radix form (such as @samp{Z'1234'})
339 are to be interpreted as @code{INTEGER} constants.
340 Specify @samp{-ftypeless-boz} to cause such
341 constants to be interpreted as typeless.
343 (Version 0.5.19 introduced @samp{-fno-typeless-boz} and
347 Options @samp{-ff90-intrinsics-enable} and
348 @samp{-fvxt-intrinsics-enable} now are the
351 Some programs might use names that clash with
352 intrinsic names defined (and now enabled) by these
353 options or by the new @code{libU77} intrinsics.
354 Users of such programs might need to compile them
355 differently (using, for example, @samp{-ff90-intrinsics-disable})
356 or, better yet, insert appropriate @code{EXTERNAL}
357 statements specifying that these names are not intended
358 to be names of intrinsics.
361 The @samp{ALWAYS_FLUSH} macro is no longer defined when
362 building @code{libf2c}, which should result in improved
363 I/O performance, especially over NFS.
365 @emph{Note:} If you have code that depends on the behavior
366 of @code{libf2c} when built with @samp{ALWAYS_FLUSH} defined,
367 you will have to modify @code{libf2c} accordingly before
368 building it from this and future versions of @code{g77}.
371 Dave Love's implementation of @code{libU77} has been
372 added to the version of @code{libf2c} distributed with
373 and built as part of @code{g77}.
374 @code{g77} now knows about the routines in this library
378 New option @samp{-fvxt} specifies that the
379 source file is written in VXT Fortran, instead of GNU Fortran.
382 The @samp{-fvxt-not-f90} option has been deleted,
383 along with its inverse, @samp{-ff90-not-vxt}.
385 If you used one of these deleted options, you should
386 re-read the pertinent documentation to determine which
387 options, if any, are appropriate for compiling your
388 code with this version of @code{g77}.
391 The @samp{-fugly} option now issues a warning, as it
392 likely will be removed in a future version.
394 (Enabling all the @samp{-fugly-*} options is unlikely
395 to be feasible, or sensible, in the future,
396 so users should learn to specify only those
397 @samp{-fugly-*} options they really need for a
398 particular source file.)
401 The @samp{-fugly-assumed} option, introduced in
402 version 0.5.19, has been changed to
403 better accommodate old and new code.
406 Make a number of fixes to the @code{g77} front end and
407 the @code{gcc} back end to better support Alpha (AXP)
409 This includes providing at least one bug-fix to the
410 @code{gcc} back end for Alphas.
413 Related to supporting Alpha (AXP) machines, the @code{LOC()}
414 intrinsic and @code{%LOC()} construct now return
415 values of integer type that is the same width (holds
416 the same number of bits) as the pointer type on the
419 On most machines, this won't make a difference, whereas
420 on Alphas, the type these constructs return is
421 @code{INTEGER*8} instead of the more common @code{INTEGER*4}.
424 Emulate @code{COMPLEX} arithmetic in the @code{g77} front
425 end, to avoid bugs in @code{complex} support in the
427 New option @samp{-fno-emulate-complex}
428 causes @code{g77} to revert the 0.5.19 behavior.
431 Fix bug whereby @samp{REAL A(1)}, for example, caused
432 a compiler crash if @samp{-fugly-assumed} was in effect
433 and @var{A} was a local (automatic) array.
434 That case is no longer affected by the new
435 handling of @samp{-fugly-assumed}.
438 Fix @code{g77} command driver so that @samp{g77 -o foo.f}
439 no longer deletes @file{foo.f} before issuing other
440 diagnostics, and so the @samp{-x} option is properly
444 Enable inlining of subroutines and functions by the @code{gcc}
446 This works as it does for @code{gcc} itself---program units
447 may be inlined for invocations that follow them in the same
448 program unit, as long as the appropriate compile-time
449 options are specified.
452 Dummy arguments are no longer assumed to potentially alias
454 other dummy arguments or @code{COMMON} areas when any of
455 these are defined (assigned to) by Fortran code.
457 This can result in faster and/or smaller programs when
458 compiling with optimization enabled, though on some
459 systems this effect is observed only when @samp{-fforce-addr}
462 New options @samp{-falias-check}, @samp{-fargument-alias},
463 @samp{-fargument-noalias},
464 and @samp{-fno-argument-noalias-global} control the
465 way @code{g77} handles potential aliasing.
468 The @code{CONJG()} and @code{DCONJG()} intrinsics now
469 are compiled in-line.
472 The bug-fix for 0.5.19.1 has been re-done.
473 The @code{g77} compiler has been changed back to
474 assume @code{libf2c} has no aliasing problems in
475 its implementations of the @code{COMPLEX} (and
476 @code{DOUBLE COMPLEX}) intrinsics.
477 The @code{libf2c} has been changed to have no such
480 As a result, 0.5.20 is expected to offer improved performance
481 over 0.5.19.1, perhaps as good as 0.5.19 in most
482 or all cases, due to this change alone.
484 @emph{Note:} This change requires version 0.5.20 of
485 @code{libf2c}, at least, when linking code produced
486 by any versions of @code{g77} other than 0.5.19.1.
487 Use @samp{g77 -v} to determine the version numbers
488 of the @code{libF77}, @code{libI77}, and @code{libU77}
489 components of the @code{libf2c} library.
490 (If these version numbers are not printed---in
491 particular, if the linker complains about unresolved
492 references to names like @samp{g77__fvers__}---that
493 strongly suggests your installation has an obsolete
494 version of @code{libf2c}.)
497 New option @samp{-fugly-assign} specifies that the
498 same memory locations are to be used to hold the
499 values assigned by both statements @samp{I = 3} and
500 @samp{ASSIGN 10 TO I}, for example.
501 (Normally, @code{g77} uses a separate memory location
502 to hold assigned statement labels.)
505 @code{FORMAT} and @code{ENTRY} statements now are allowed to
506 precede @code{IMPLICIT NONE} statements.
509 Produce diagnostic for unsupported @code{SELECT CASE} on
510 @code{CHARACTER} type, instead of crashing, at compile time.
513 Fix crashes involving diagnosed or invalid code.
516 Change approach to building @code{libf2c} archive
517 (@file{libf2c.a}) so that members are added to it
518 only when truly necessary, so the user that installs
519 an already-built @code{g77} doesn't need to have write
520 access to the build tree (whereas the user doing the
521 build might not have access to install new software
525 Support @code{gcc} version 2.7.2.2
526 (modified by @code{g77} into version 2.7.2.2.f.2),
528 support for prior versions of @code{gcc}.
531 Upgrade to @code{libf2c} as of 1997-02-08, and
532 fix up some of the build procedures.
535 Improve general build procedures for @code{g77},
536 fixing minor bugs (such as deletion of any file
537 named @file{f771} in the parent directory of @code{gcc/}).
540 Enable full support of @code{INTEGER*8} available in
541 @code{libf2c} and @file{f2c.h} so that @code{f2c} users
542 may make full use of its features via the @code{g77}
543 version of @file{f2c.h} and the @code{INTEGER*8}
544 support routines in the @code{g77} version of @code{libf2c}.
547 Improve @code{g77} driver and @code{libf2c} so that @samp{g77 -v}
548 yields version information on the library.
551 The @code{SNGL} and @code{FLOAT} intrinsics now are
552 specific intrinsics, instead of synonyms for the
553 generic intrinsic @code{REAL}.
556 New intrinsics have been added.
557 These are @code{REALPART}, @code{IMAGPART},
559 @code{LONG}, and @code{SHORT}.
562 A new group of intrinsics, @samp{gnu}, has been added
563 to contain the new @code{REALPART}, @code{IMAGPART},
564 and @code{COMPLEX} intrinsics.
565 An old group, @samp{dcp}, has been removed.
568 Complain about industry-wide ambiguous references
569 @samp{REAL(@var{expr})} and @samp{AIMAG(@var{expr})},
570 where @var{expr} is @code{DOUBLE COMPLEX} (or any
571 complex type other than @code{COMPLEX}), unless
572 @samp{-ff90} option specifies Fortran 90 interpretation
573 or new @samp{-fugly-complex} option, in conjunction with
574 @samp{-fnot-f90}, specifies @code{f2c} interpretation.
577 Make improvements to diagnostics.
580 Speed up compiler a bit.
583 Improvements to documentation and indexing, including
584 a new chapter containing information on one, later
585 more, diagnostics that users are directed to pull
586 up automatically via a message in the diagnostic itself.
588 (Hence the menu item @samp{M} for the node
589 @samp{Diagnostics} in the top-level menu of
590 the Info documentation.)
593 @heading In 0.5.19.1:
596 Code-generation bugs afflicting operations on complex
597 data have been fixed.
599 These bugs occurred when assigning the result of an
600 operation to a complex variable (or array element)
601 that also served as an input to that operation.
603 The operations affected by this bug were: @samp{CONJG()},
604 @samp{DCONJG()}, @samp{CCOS()}, @samp{CDCOS()},
605 @samp{CLOG()}, @samp{CDLOG()}, @samp{CSIN()}, @samp{CDSIN()},
606 @samp{CSQRT()}, @samp{CDSQRT()}, complex division, and
607 raising a @code{DOUBLE COMPLEX} operand to an @code{INTEGER}
609 (The related generic and @samp{Z}-prefixed intrinsics,
610 such as @samp{ZSIN()}, also were affected.)
612 For example, @samp{C = CSQRT(C)}, @samp{Z = Z/C}, and @samp{Z = Z**I}
613 (where @samp{C} is @code{COMPLEX} and @samp{Z} is
614 @code{DOUBLE COMPLEX}) have been fixed.
620 Fix @code{FORMAT} statement parsing so negative values for
621 specifiers such as @samp{P} (e.g. @samp{FORMAT(-1PF8.1)})
622 are correctly processed as negative.
625 Fix @code{SIGNAL} intrinsic so it once again accepts a
626 procedure as its second argument.
629 A temporary kludge option provides bare-bones information on
630 @code{COMMON} and @code{EQUIVALENCE} members at debug time.
633 New @samp{-fonetrip} option specifies FORTRAN-66-style
634 one-trip @code{DO} loops.
637 New @samp{-fno-silent} option causes names of program units
638 to be printed as they are compiled, in a fashion similar to
639 UNIX @code{f77} and @code{f2c}.
642 New @samp{-fugly-assumed} option specifies that arrays
643 dimensioned via @samp{DIMENSION X(1)}, for example, are to be
644 treated as assumed-size.
647 New @samp{-fno-typeless-boz} option specifies that non-decimal-radix
648 constants using the prefixed-radix form (such as @samp{Z'1234'})
649 are to be interpreted as @code{INTEGER} constants.
652 New @samp{-ff66} option is a ``shorthand'' option that specifies
653 behaviors considered appropriate for FORTRAN 66 programs.
656 New @samp{-ff77} option is a ``shorthand'' option that specifies
657 behaviors considered appropriate for UNIX @code{f77} programs.
660 New @samp{-fugly-comma} and @samp{-fugly-logint} options provided
661 to perform some of what @samp{-fugly} used to do.
662 @samp{-fugly} and @samp{-fno-ugly} are now ``shorthand'' options,
663 in that they do nothing more than enable (or disable) other
664 @samp{-fugly-*} options.
667 Fix parsing of assignment statements involving targets that
668 are substrings of elements of @code{CHARACTER} arrays having
669 names such as @samp{READ}, @samp{WRITE}, @samp{GOTO}, and
670 @samp{REALFUNCTIONFOO}.
673 Fix crashes involving diagnosed code.
676 Fix handling of local @code{EQUIVALENCE} areas so certain cases
677 of valid Fortran programs are not misdiagnosed as improperly
678 extending the area backwards.
681 Support @code{gcc} version 2.7.2.1.
684 Upgrade to @code{libf2c} as of 1996-09-26, and
685 fix up some of the build procedures.
688 Change code generation for list-directed I/O so it allows
689 for new versions of @code{libf2c} that might return non-zero
690 status codes for some operations previously assumed to always
693 This change not only affects how @code{IOSTAT=} variables
694 are set by list-directed I/O, it also affects whether
695 @code{END=} and @code{ERR=} labels are reached by these
699 Add intrinsic support for new @code{FTELL} and @code{FSEEK}
700 procedures in @code{libf2c}.
703 Modify @code{fseek_()} in @code{libf2c} to be more portable
704 (though, in practice, there might be no systems where this
705 matters) and to catch invalid @samp{whence} arguments.
708 Some useless warnings from the @samp{-Wunused} option have
712 Fix a problem building the @file{f771} executable
713 on AIX systems by linking with the @samp{-bbigtoc} option.
716 Abort configuration if @code{gcc} has not been patched
717 using the patch file provided in the @samp{gcc/f/gbe/}
721 Add options @samp{--help} and @samp{--version} to the
722 @code{g77} command, to conform to GNU coding guidelines.
723 Also add printing of @code{g77} version number when
724 the @samp{--verbose} (@samp{-v}) option is used.
727 Change internally generated name for local @code{EQUIVALENCE}
728 areas to one based on the alphabetically sorted first name
729 in the list of names for entities placed at the beginning
733 Improvements to documentation and indexing.
739 Add some rudimentary support for @code{INTEGER*1},
740 @code{INTEGER*2}, @code{INTEGER*8},
741 and their @code{LOGICAL} equivalents.
742 (This support works on most, maybe all, @code{gcc} targets.)
744 Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
745 for providing the patch for this!
747 Among the missing elements from the support for these
748 features are full intrinsic support and constants.
751 Add some rudimentary support for the @code{BYTE} and
752 @code{WORD} type-declaration statements.
753 @code{BYTE} corresponds to @code{INTEGER*1},
754 while @code{WORD} corresponds to @code{INTEGER*2}.
756 Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
757 for providing the patch for this!
760 The compiler code handling intrinsics has been largely
761 rewritten to accommodate the new types.
762 No new intrinsics or arguments for existing
763 intrinsics have been added, so there is, at this
764 point, no intrinsic to convert to @code{INTEGER*8},
768 Support automatic arrays in procedures.
771 Reduce space/time requirements for handling large
772 @emph{sparsely} initialized aggregate arrays.
773 This improvement applies to only a subset of
774 the general problem to be addressed in 0.6.
777 Treat initial values of zero as if they weren't
778 specified (in DATA and type-declaration statements).
779 The initial values will be set to zero anyway, but the amount
780 of compile time processing them will be reduced,
781 in some cases significantly (though, again, this
782 is only a subset of the general problem to be
785 A new option, @samp{-fzeros}, is introduced to
786 enable the traditional treatment of zeros as any
790 With @samp{-ff90} in force, @code{g77} incorrectly
791 interpreted @samp{REAL(Z)} as returning a @code{REAL}
792 result, instead of as a @code{DOUBLE PRECISION}
794 (Here, @samp{Z} is @code{DOUBLE COMPLEX}.)
796 With @samp{-fno-f90} in force, the interpretation remains
797 unchanged, since this appears to be how at least some
798 F77 code using the @code{DOUBLE COMPLEX} extension expected
801 Essentially, @samp{REAL(Z)} in F90 is the same as
802 @samp{DBLE(Z)}, while in extended F77, it appears to
803 be the same as @samp{REAL(REAL(Z))}.
806 An expression involving exponentiation, where both operands
807 were type @code{INTEGER} and the right-hand operand
808 was negative, was erroneously evaluated.
811 Fix bugs involving @code{DATA} implied-@code{DO} constructs
812 (these involved an errant diagnostic and a crash, both on good
813 code, one involving subsequent statement-function definition).
816 Close @code{INCLUDE} files after processing them, so compiling source
817 files with lots of @code{INCLUDE} statements does not result in
818 being unable to open @code{INCLUDE} files after all the available
819 file descriptors are used up.
822 Speed up compiling, especially of larger programs, and perhaps
823 slightly reduce memory utilization while compiling (this is
824 @emph{not} the improvement planned for 0.6 involving large aggregate
825 areas)---these improvements result from simply turning
826 off some low-level code to do self-checking that hasn't been
827 triggered in a long time.
830 Introduce three new options that
831 implement optimizations in the @code{gcc} back end (GBE).
832 These options are @samp{-fmove-all-movables}, @samp{-freduce-all-givs},
833 and @samp{-frerun-loop-opt}, which are enabled, by default,
834 for Fortran compilations.
835 These optimizations are intended to help toon Fortran programs.
838 Patch the GBE to do a better job optimizing certain
839 kinds of references to array elements.
842 Due to patches to the GBE, the version number of @code{gcc}
843 also is patched to make it easier to manage installations,
844 especially useful if it turns out a @code{g77} change to the
847 The @code{g77}-modified version number is the @code{gcc}
848 version number with the string @samp{.f.@var{n}} appended,
849 where @samp{f} identifies the version as enhanced for
850 Fortran, and @var{n} is @samp{1} for the first Fortran
851 patch for that version of @code{gcc}, @samp{2} for the
854 So, this introduces version 2.7.2.f.1 of @code{gcc}.
857 Make several improvements and fixes to diagnostics, including
858 the removal of two that were inappropriate or inadequate.
861 Warning about two successive arithmetic operators, produced
862 by @samp{-Wsurprising}, now produced @emph{only} when both
863 operators are, indeed, arithmetic (not relational/boolean).
866 @samp{-Wsurprising} now warns about the remaining cases
867 of using non-integral variables for implied-@code{DO}
868 loops, instead of these being rejected unless @samp{-fpedantic}
869 or @samp{-fugly} specified.
872 Allow @code{SAVE} of a local variable or array, even after
873 it has been given an initial value via @code{DATA}, for example.
876 Introduce an Info version of @code{g77} documentation, which
877 supercedes @file{gcc/f/CREDITS}, @file{gcc/f/DOC}, and
878 @file{gcc/f/PROJECTS}.
879 These files will be removed in a future release.
880 The files @file{gcc/f/BUGS}, @file{gcc/f/INSTALL}, and
881 @file{gcc/f/NEWS} now are automatically built from
882 the texinfo source when distributions are made.
884 This effort was inspired by a first pass at translating
885 @file{g77-0.5.16/f/DOC} that was contributed to Craig by
886 David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
889 New @samp{-fno-second-underscore} option to specify
890 that, when @samp{-funderscoring} is in effect, a second
891 underscore is not to be appended to Fortran names already
892 containing an underscore.
895 Change the way iterative @code{DO} loops work to follow
897 In particular, calculation of the iteration count is
898 still done by converting the start, end, and increment
899 parameters to the type of the @code{DO} variable, but
900 the result of the calculation is always converted to
901 the default @code{INTEGER} type.
903 (This should have no effect on existing code compiled
904 by @code{g77}, but code written to assume that use
905 of a @emph{wider} type for the @code{DO} variable
906 will result in an iteration count being fully calculated
907 using that wider type (wider
908 than default @code{INTEGER}) must be rewritten.)
911 Support @code{gcc} version 2.7.2.
914 Upgrade to @code{libf2c} as of 1996-03-23, and
915 fix up some of the build procedures.
917 Note that the email addresses related to @code{f2c}
918 have changed---the distribution site now is
919 named @code{netlib.bell-labs.com}, and the
920 maintainer's new address is @email{dmg@@bell-labs.com}.
926 @strong{Fix serious bug} in @samp{g77 -v} command that can cause removal of a
927 system's @file{/dev/null} special file if run by user @samp{root}.
929 @strong{All users} of version 0.5.16 should ensure that
930 they have not removed @file{/dev/null} or replaced it with an ordinary
931 file (e.g. by comparing the output of @samp{ls -l /dev/null} with
932 @samp{ls -l /dev/zero}.
933 If the output isn't basically the
934 same, contact your system
935 administrator about restoring @file{/dev/null} to its proper status).
937 This bug is particularly insidious because removing @file{/dev/null} as
938 a special file can go undetected for quite a while, aside from
939 various applications and programs exhibiting sudden, strange
942 I sincerely apologize for not realizing the
943 implications of the fact that when @samp{g77 -v} runs the @code{ld} command
944 with @samp{-o /dev/null} that @code{ld} tries to @emph{remove} the executable
945 it is supposed to build (especially if it reports unresolved
946 references, which it should in this case)!
949 Fix crash on @samp{CHARACTER*(*) FOO} in a main or block data program unit.
952 Fix crash that can occur when diagnostics given outside of any
953 program unit (such as when input file contains @samp{@@foo}).
956 Fix crashes, infinite loops (hangs), and such involving diagnosed code.
959 Fix @code{ASSIGN}'ed variables so they can be @code{SAVE}'d or dummy arguments,
960 and issue clearer error message in cases where target of @code{ASSIGN}
961 or @code{ASSIGN}ed @code{GOTO}/@code{FORMAT} is too small (which should
965 Make @code{libf2c} build procedures work on more systems again by
966 eliminating unnecessary invocations of @samp{ld -r -x} and @samp{mv}.
969 Fix omission of @samp{-funix-intrinsics-@dots{}} options in list of permitted
973 Fix failure to always diagnose missing type declaration for
974 @code{IMPLICIT NONE}.
977 Fix compile-time performance problem (which could sometimes
978 crash the compiler, cause a hang, or whatever, due to a bug
979 in the back end) involving exponentiation with a large @code{INTEGER}
980 constant for the right-hand operator (e.g. @samp{I**32767}).
983 Fix build procedures so cross-compiling @code{g77} (the @code{fini}
984 utility in particular) is properly built using the host compiler.
987 Add new @samp{-Wsurprising} option to warn about constructs that are
988 interpreted by the Fortran standard (and @code{g77}) in ways that
989 are surprising to many programmers.
992 Add @code{ERF()} and @code{ERFC()} as generic intrinsics mapping to existing
993 @code{ERF}/@code{DERF} and @code{ERFC}/@code{DERFC} specific intrinsics.
995 @emph{Note:} You should
996 specify @samp{INTRINSIC ERF,ERFC} in any code where you might use
997 these as generic intrinsics, to improve likelihood of diagnostics
998 (instead of subtle run-time bugs) when using a compiler that
999 doesn't support these as intrinsics (e.g. @code{f2c}).
1002 Remove from @samp{-fno-pedantic} the diagnostic about @code{DO}
1003 with non-@code{INTEGER} index variable; issue that under
1004 @samp{-Wsurprising} instead.
1007 Clarify some diagnostics that say things like ``ignored'' when that's
1011 Clarify diagnostic on use of @code{.EQ.}/@code{.NE.} on @code{LOGICAL}
1015 Minor improvements to code generation for various operations on
1016 @code{LOGICAL} operands.
1019 Minor improvement to code generation for some @code{DO} loops on some
1023 Support @code{gcc} version 2.7.1.
1026 Upgrade to @code{libf2c} as of 1995-11-15.
1032 Fix a code-generation bug involving complicated @code{EQUIVALENCE} statements
1033 not involving @code{COMMON}.
1036 Fix code-generation bugs involving invoking ``gratis'' library procedures
1037 in @code{libf2c} from code compiled with @samp{-fno-f2c} by making these
1038 procedures known to @code{g77} as intrinsics (not affected by -fno-f2c).
1039 This is known to fix code invoking @code{ERF()}, @code{ERFC()},
1040 @code{DERF()}, and @code{DERFC()}.
1043 Update @code{libf2c} to include netlib patches through 1995-08-16, and
1044 @code{#define} @samp{WANT_LEAD_0} to 1 to make @code{g77}-compiled code more
1045 consistent with other Fortran implementations by outputting
1046 leading zeros in formatted and list-directed output.
1049 Fix a code-generation bug involving adjustable dummy arrays with high
1050 bounds whose primaries are changed during procedure execution, and
1051 which might well improve code-generation performance for such arrays
1052 compared to @code{f2c} plus @code{gcc} (but apparently only when using
1053 @file{gcc-2.7.0} or later).
1056 Fix a code-generation bug involving invocation of @code{COMPLEX} and
1057 @code{DOUBLE COMPLEX} @code{FUNCTION}s and doing @code{COMPLEX} and
1058 @code{DOUBLE COMPLEX} divides, when the result
1059 of the invocation or divide is assigned directly to a variable
1060 that overlaps one or more of the arguments to the invocation or divide.
1063 Fix crash by not generating new optimal code for @samp{X**I} if @samp{I} is
1064 nonconstant and the expression is used to dimension a dummy
1065 array, since the @code{gcc} back end does not support the necessary
1066 mechanics (and the @code{gcc} front end rejects the equivalent
1067 construct, as it turns out).
1070 Fix crash on expressions like @samp{COMPLEX**INTEGER}.
1073 Fix crash on expressions like @samp{(1D0,2D0)**2}, i.e. raising a
1074 @code{DOUBLE COMPLEX} constant to an @code{INTEGER} constant power.
1077 Fix crashes and such involving diagnosed code.
1080 Diagnose, instead of crashing on, statement function definitions
1081 having duplicate dummy argument names.
1084 Fix bug causing rejection of good code involving statement function
1088 Fix bug resulting in debugger not knowing size of local equivalence
1089 area when any member of area has initial value (via @code{DATA},
1093 Fix installation bug that prevented installation of @code{g77} driver.
1094 Provide for easy selection of whether to install copy of @code{g77}
1095 as @code{f77} to replace the broken code.
1098 Fix @code{gcc} driver (affects @code{g77} thereby) to not
1099 gratuitously invoke the
1100 @code{f771} program (e.g. when @samp{-E} is specified).
1103 Fix diagnostic to point to correct source line when it immediately
1104 follows an @code{INCLUDE} statement.
1107 Support more compiler options in @code{gcc}/@code{g77} when
1108 compiling Fortran files.
1109 These options include @samp{-p}, @samp{-pg}, @samp{-aux-info}, @samp{-P},
1110 correct setting of version-number macros for preprocessing, full
1111 recognition of @samp{-O0}, and
1112 automatic insertion of configuration-specific linker specs.
1115 Add new intrinsics that interface to existing routines in @code{libf2c}:
1116 @code{ABORT}, @code{DERF}, @code{DERFC}, @code{ERF}, @code{ERFC}, @code{EXIT},
1117 @code{FLUSH}, @code{GETARG}, @code{GETENV}, @code{IARGC},
1118 @code{SIGNAL}, and @code{SYSTEM}.
1119 Note that @code{ABORT}, @code{EXIT}, @code{FLUSH}, @code{SIGNAL}, and
1120 @code{SYSTEM} are intrinsic subroutines, not functions (since they
1121 have side effects), so to get the return values from @code{SIGNAL}
1122 and @code{SYSTEM}, append a final argument specifying an @code{INTEGER}
1123 variable or array element (e.g. @samp{CALL SYSTEM('rm foo',ISTAT)}).
1126 Add new intrinsic group named @samp{unix} to contain the new intrinsics,
1127 and by default enable this new group.
1130 Move @code{LOC()} intrinsic out of the @samp{vxt} group to the new
1134 Improve @code{g77} so that @samp{g77 -v} by itself (or with
1135 certain other options, including @samp{-B}, @samp{-b}, @samp{-i},
1136 @samp{-nostdlib}, and @samp{-V}) reports lots more useful
1137 version info, and so that long-form options @code{gcc} accepts are
1138 understood by @code{g77} as well (even in truncated, unambiguous forms).
1141 Add new @code{g77} option @samp{--driver=name} to specify driver when
1142 default, @code{gcc}, isn't appropriate.
1145 Add support for @samp{#} directives (as output by the preprocessor) in the
1146 compiler, and enable generation of those directives by the
1147 preprocessor (when compiling @samp{.F} files) so diagnostics and debugging
1148 info are more useful to users of the preprocessor.
1151 Produce better diagnostics, more like @code{gcc}, with info such as
1152 @samp{In function `foo':} and @samp{In file included from...:}.
1155 Support @code{gcc}'s @samp{-fident} and @samp{-fno-ident} options.
1158 When @samp{-Wunused} in effect, don't warn about local variables used as
1159 statement-function dummy arguments or @code{DATA} implied-@code{DO} iteration
1160 variables, even though, strictly speaking, these are not uses
1161 of the variables themselves.
1164 When @samp{-W -Wunused} in effect, don't warn about unused dummy arguments
1165 at all, since there's no way to turn this off for individual
1166 cases (@code{g77} might someday start warning about these)---applies
1167 to @code{gcc} versions 2.7.0 and later, since earlier versions didn't
1168 warn about unused dummy arguments.
1171 New option @samp{-fno-underscoring} that inhibits transformation of names
1172 (by appending one or two underscores) so users may experiment
1173 with implications of such an environment.
1176 Minor improvement to @file{gcc/f/info} module to make it easier to build
1177 @code{g77} using the native (non-@code{gcc}) compiler on certain machines
1178 (but definitely not all machines nor all non-@code{gcc} compilers).
1180 do not report bugs showing problems compilers have with
1181 macros defined in @file{gcc/f/target.h} and used in places like
1182 @file{gcc/f/expr.c}.
1185 Add warning to be printed for each invocation of the compiler
1186 if the target machine @code{INTEGER}, @code{REAL}, or @code{LOGICAL} size
1188 since @code{g77} is known to not work well for such cases (to be
1189 fixed in Version 0.6---@pxref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet}).
1192 Lots of new documentation (though work is still needed to put it into
1193 canonical GNU format).
1196 Build @code{libf2c} with @samp{-g0}, not @samp{-g2}, in effect
1197 (by default), to produce
1198 smaller library without lots of debugging clutter.
1204 Fix bad code generation involving @samp{X**I} and temporary, internal variables
1205 generated by @code{g77} and the back end (such as for @code{DO} loops).
1208 Fix crash given @samp{CHARACTER A;DATA A/.TRUE./}.
1211 Replace crash with diagnostic given @samp{CHARACTER A;DATA A/1.0/}.
1214 Fix crash or other erratic behavior when null character constant
1215 (@samp{''}) is encountered.
1218 Fix crash or other erratic behavior involving diagnosed code.
1221 Fix code generation for external functions returning type @code{REAL} when
1222 the @samp{-ff2c} option is in force (which it is by default) so that
1223 @code{f2c} compatibility is indeed provided.
1226 Disallow @samp{COMMON I(10)} if @samp{I} has previously been specified
1227 with an array declarator.
1230 New @samp{-ffixed-line-length-@var{n}} option, where @var{n} is the
1232 of a typical fixed-form line, defaulting to 72 columns, such
1233 that characters beyond column @var{n} are ignored, or @var{n} is @samp{none},
1234 meaning no characters are ignored.
1235 does not affect lines
1236 with @samp{&} in column 1, which are always processed as if
1237 @samp{-ffixed-line-length-none} was in effect.
1240 No longer generate better code for some kinds of array references,
1241 as @code{gcc} back end is to be fixed to do this even better, and it
1242 turned out to slow down some code in some cases after all.
1245 In @code{COMMON} and @code{EQUIVALENCE} areas with any members given initial
1246 values (e.g. via @code{DATA}), uninitialized members now always
1247 initialized to binary zeros (though this is not required by
1248 the standard, and might not be done in future versions
1250 Previously, in some @code{COMMON}/@code{EQUIVALENCE} areas
1251 (essentially those with members of more than one type), the
1252 uninitialized members were initialized to spaces, to
1253 cater to @code{CHARACTER} types, but it seems no existing code expects
1254 that, while much existing code expects binary zeros.
1260 Don't emit bad code when low bound of adjustable array is nonconstant
1261 and thus might vary as an expression at run time.
1264 Emit correct code for calculation of number of trips in @code{DO} loops
1266 where the loop should not execute at all.
1267 (This bug affected cases
1268 where the difference between the begin and end values was less
1269 than the step count, though probably not for floating-point cases.)
1272 Fix crash when extra parentheses surround item in
1273 @code{DATA} implied-@code{DO} list.
1276 Fix crash over minor internal inconsistencies in handling diagnostics,
1277 just substitute dummy strings where necessary.
1280 Fix crash on some systems when compiling call to @code{MVBITS()} intrinsic.
1283 Fix crash on array assignment @samp{TYPE@var{ddd}(@dots{})=@dots{}}, where @var{ddd}
1284 is a string of one or more digits.
1287 Fix crash on @code{DCMPLX()} with a single @code{INTEGER} argument.
1290 Fix various crashes involving code with diagnosed errors.
1293 Support @samp{-I} option for @code{INCLUDE} statement, plus @code{gcc}'s
1294 @file{header.gcc} facility for handling systems like MS-DOS.
1297 Allow @code{INCLUDE} statement to be continued across multiple lines,
1298 even allow it to coexist with other statements on the same line.
1301 Incorporate Bellcore fixes to @code{libf2c} through 1995-03-15---this
1302 fixes a bug involving infinite loops reading EOF with empty list-directed
1306 Remove all the @code{g77}-specific auto-configuration scripts, code,
1308 except for temporary substitutes for bsearch() and strtoul(), as
1309 too many configure/build problems were reported in these areas.
1310 People will have to fix their systems' problems themselves, or at
1311 least somewhere other than @code{g77}, which expects a working ANSI C
1312 environment (and, for now, a GNU C compiler to compile @code{g77} itself).
1315 Complain if initialized common redeclared as larger in subsequent program
1319 Warn if blank common initialized, since its size can vary and hence
1320 related warnings that might be helpful won't be seen.
1323 New @samp{-fbackslash} option, on by default, that causes @samp{\}
1324 within @code{CHARACTER}
1325 and Hollerith constants to be interpreted a la GNU C.
1327 this behavior is somewhat different from @code{f2c}'s, which supports only
1328 a limited subset of backslash (escape) sequences.
1331 Make @samp{-fugly-args} the default.
1334 New @samp{-fugly-init} option, on by default, that allows typeless/Hollerith
1335 to be specified as initial values for variables or named constants
1336 (@code{PARAMETER}), and also allows character<->numeric conversion in
1337 those contexts---turn off via @samp{-fno-ugly-init}.
1340 New @samp{-finit-local-zero} option to initialize
1341 local variables to binary zeros.
1342 This does not affect whether they are @code{SAVE}d, i.e. made
1343 automatic or static.
1346 New @samp{-Wimplicit} option to warn about implicitly typed variables, arrays,
1348 (Basically causes all program units to default to @code{IMPLICIT NONE}.)
1351 @samp{-Wall} now implies @samp{-Wuninitialized} as with @code{gcc}
1352 (i.e. unless @samp{-O} not specified, since @samp{-Wuninitialized}
1353 requires @samp{-O}), and implies @samp{-Wunused} as well.
1356 @samp{-Wunused} no longer gives spurious messages for unused
1357 @code{EXTERNAL} names (since they are assumed to refer to block data
1358 program units, to make use of libraries more reliable).
1361 Support @code{%LOC()} and @code{LOC()} of character arguments.
1364 Support null (zero-length) character constants and expressions.
1367 Support @code{f2c}'s @code{IMAG()} generic intrinsic.
1370 Support @code{ICHAR()}, @code{IACHAR()}, and @code{LEN()} of
1371 character expressions that are valid in assignments but
1372 not normally as actual arguments.
1375 Support @code{f2c}-style @samp{&} in column 1 to mean continuation line.
1378 Allow @code{NAMELIST}, @code{EXTERNAL}, @code{INTRINSIC}, and @code{VOLATILE}
1379 in @code{BLOCK DATA}, even though these are not allowed by the standard.
1382 Allow @code{RETURN} in main program unit.
1385 Changes to Hollerith-constant support to obey Appendix C of the
1390 Now padded on the right with zeros, not spaces.
1393 Hollerith ``format specifications'' in the form of arrays of
1394 non-character allowed.
1397 Warnings issued when non-space truncation occurs when converting
1401 When specified as actual argument, now passed
1402 by reference to @code{INTEGER} (padded on right with spaces if constant
1403 too small, otherwise fully intact if constant wider the @code{INTEGER}
1404 type) instead of by value.
1407 @strong{Warning:} @code{f2c} differs on the
1408 interpretation of @samp{CALL FOO(1HX)}, which it treats exactly the
1409 same as @samp{CALL FOO('X')}, but which the standard and @code{g77} treat
1410 as @samp{CALL FOO(%REF('X '))} (padded with as many spaces as necessary
1411 to widen to @code{INTEGER}), essentially.
1414 Changes and fixes to typeless-constant support:
1418 Now treated as a typeless double-length @code{INTEGER} value.
1421 Warnings issued when overflow occurs.
1424 Padded on the left with zeros when converting
1428 Should be properly aligned and ordered on
1429 the target machine for whatever type it is turned into.
1432 When specified as actual argument, now passed as reference to
1433 a default @code{INTEGER} constant.
1437 @code{%DESCR()} of a non-@code{CHARACTER} expression now passes a pointer to
1438 the expression plus a length for the expression just as if
1439 it were a @code{CHARACTER} expression.
1440 For example, @samp{CALL FOO(%DESCR(D))}, where
1441 @samp{D} is @code{REAL*8}, is the same as @samp{CALL FOO(D,%VAL(8)))}.
1444 Name of multi-entrypoint master function changed to incorporate
1445 the name of the primary entry point instead of a decimal
1446 value, so the name of the master function for @samp{SUBROUTINE X}
1447 with alternate entry points is now @samp{__g77_masterfun_x}.
1450 Remove redundant message about zero-step-count @code{DO} loops.
1453 Clean up diagnostic messages, shortening many of them.
1456 Fix typo in @code{g77} man page.
1459 Clarify implications of constant-handling bugs in @file{f/BUGS}.
1462 Generate better code for @samp{**} operator with a right-hand operand of
1463 type @code{INTEGER}.
1466 Generate better code for @code{SQRT()} and @code{DSQRT()},
1467 also when @samp{-ffast-math}
1468 specified, enable better code generation for @code{SIN()} and @code{COS()}.
1471 Generate better code for some kinds of array references.
1474 Speed up lexing somewhat (this makes the compilation phase noticeably