OSDN Git Service

Thu May 28 21:32:18 1998 Craig Burley <burley@gnu.org>
[pf3gnuchains/gcc-fork.git] / gcc / f / news.texi
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.
4
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.
7
8 @c 1998-05-20
9
10 @ifclear NEWSONLY
11 @node News
12 @chapter News About GNU Fortran
13 @end ifclear
14 @cindex versions, recent
15 @cindex recent versions
16
17 Changes made to recent versions of GNU Fortran are listed
18 below, with the most recent version first.
19
20 The changes are generally listed in order:
21
22 @enumerate
23 @item
24 Code-generation and run-time-library bug-fixes
25
26 @item
27 Compiler and run-time-library crashes involving valid code
28 that have been fixed
29
30 @item
31 New features
32
33 @item
34 Fixes and enhancements to existing features
35
36 @item
37 New diagnostics
38
39 @item
40 Internal improvements
41
42 @item
43 Miscellany
44 @end enumerate
45
46 This order is not strict---for example, some items
47 involve a combination of these elements.
48
49 @heading In 0.5.24:
50 @itemize @bullet
51 @item
52 @code{g77} no longer crashes when compiling code
53 containing specification statements such as
54 @samp{INTEGER(KIND=7) PTR}.
55
56 @item
57 @code{g77} now treats @samp{%LOC(@var{expr})} and
58 @samp{LOC(@var{expr})} as ``ordinary'' expressions
59 when they are used as arguments in procedure calls.
60 This change applies only to global (filewide) analysis,
61 making it consistent with
62 how @code{g77} actually generates code
63 for these cases.
64
65 Previously, @code{g77} treated these expressions
66 as denoting special ``pointer'' arguments
67 for the purposes of filewide analysis.
68
69 @item
70 Improve documentation and indexing.
71 @end itemize
72
73 @heading In 0.5.23:
74 @itemize @bullet
75 @item
76 This release contains several regressions against
77 version 0.5.22 of @code{g77}, due to using the
78 ``vanilla'' @code{gcc} back end instead of patching
79 it to fix a few bugs and improve performance in a
80 few cases.
81
82 @xref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet},
83 available in plain-text format in @code{gcc/f/BUGS},
84 for information on the known bugs in this version,
85 including the regressions.
86
87 Features that have been dropped from this version
88 of @code{g77} due to their being implemented
89 via @code{g77}-specific patches to the @code{gcc}
90 back end in previous releases include:
91
92 @itemize --
93 @item
94 Support for @code{__restrict__} keyword,
95 the options @samp{-fargument-alias}, @samp{-fargument-noalias},
96 and @samp{-fargument-noalias-global},
97 and the corresponding alias-analysis code.
98
99 (Version 1.0.1 of @code{egcs} has the alias-analysis
100 code, but not the @code{__restrict__} keyword.
101 @code{egcs} @code{g77} users benefit from the alias-analysis
102 code despite the lack of the @code{__restrict__} keyword,
103 which is a C-language construct.)
104
105 @item
106 Support for the GNU compiler options
107 @samp{-fmove-all-movables},
108 @samp{-freduce-all-givs},
109 and @samp{-frerun-loop-opt}.
110
111 (Version 1.0.1 of @code{egcs} supports these options.
112 @code{g77} users of @code{egcs} benefit from them even if
113 they are not explicitly specified,
114 because the defaults are optimized for @code{g77} users.)
115
116 @item
117 Support for the @samp{-W} option warning about
118 integer division by zero.
119
120 @item
121 The Intel x86-specific option @samp{-malign-double}
122 applying to stack-allocated data
123 as well as statically-allocate data.
124 @end itemize
125
126 Note that the @file{gcc/f/gbe/} subdirectory has been removed
127 from this distribution as a result of @code{g77} no longer
128 including patches for the @code{gcc} back end.
129
130 @item
131 Fix bugs in the @code{libU77} intrinsic @samp{HostNm}
132 that wrote one byte beyond the end of its @samp{CHARACTER}
133 argument,
134 and in the @code{libU77} intrinsics
135 @samp{GMTime} and @samp{LTime}
136 that overwrote their arguments.
137
138 @item
139 Support @code{gcc} version 2.8,
140 and remove support for prior versions of @code{gcc}.
141
142 @cindex -@w{}-driver option
143 @cindex g77 options, -@w{}-driver
144 @cindex options, -@w{}-driver
145 @item
146 Remove support for the @samp{--driver} option,
147 as @code{g77} now does all the driving,
148 just like @code{gcc}.
149
150 @item
151 @code{CASE DEFAULT} no longer crashes @code{g77}.
152
153 @item
154 Valid combinations of @code{EXTERNAL},
155 passing that external as a dummy argument
156 without explicitly giving it a type,
157 and, in a subsequent program unit,
158 referencing that external as
159 an external function with a different type
160 no longer crash @code{g77}.
161
162 @item
163 @code{g77} no longer installs the @file{f77} command
164 and @file{f77.1} man page
165 in the @file{/usr} or @file{/usr/local} heirarchy,
166 even if the @file{f77-install-ok} file exists
167 in the source or build directory.
168 See the installation documentation for more information.
169
170 @item
171 @code{g77} no longer installs the @file{libf2c.a} library
172 and @file{f2c.h} include file
173 in the @file{/usr} or @file{/usr/local} heirarchy,
174 even if the @file{f2c-install-ok} or @file{f2c-exists-ok} files exist
175 in the source or build directory.
176 See the installation documentation for more information.
177
178 @item
179 The @file{libf2c.a} library produced by @code{g77} has been
180 renamed to @file{libg2c.a}.
181 It is installed only in the @code{gcc} ``private''
182 directory heirarchy, @file{gcc-lib}.
183 This allows system administrators and users to choose which
184 version of the @code{libf2c} library from @code{netlib} they
185 wish to use on a case-by-case basis.
186 See the installation documentation for more information.
187
188 @item
189 The @file{f2c.h} include (header) file produced by @code{g77}
190 has been renamed to @file{g2c.h}.
191 It is installed only in the @code{gcc} ``private''
192 directory heirarchy, @file{gcc-lib}.
193 This allows system administrators and users to choose which
194 version of the include file from @code{netlib} they
195 wish to use on a case-by-case basis.
196 See the installation documentation for more information.
197
198 @item
199 The @code{g77} command now expects the run-time library
200 to be named @code{libg2c.a} instead of @code{libf2c.a},
201 to ensure that a version other than the one built and
202 installed as part of the same @code{g77} version is picked up.
203
204 @item
205 The @samp{-Wunused} option no longer issues a spurious
206 warning about the ``master'' procedure generated by
207 @code{g77} for procedures containing @code{ENTRY} statements.
208
209 @item
210 @code{g77}'s version of @code{libf2c} separates out
211 the setting of global state
212 (such as command-line arguments and signal handling)
213 from @file{main.o} into distinct, new library
214 archive members.
215
216 This should make it easier to write portable applications
217 that have their own (non-Fortran) @code{main()} routine
218 properly set up the @code{libf2c} environment, even
219 when @code{libf2c} (now @code{libg2c}) is a shared library.
220
221 @item
222 During the configuration and build process,
223 @code{g77} creates subdirectories it needs only as it
224 needs them, thus avoiding unnecessary creation of, for example,
225 @file{stage1/f/runtime} when doing a non-bootstrap build.
226 Other cleaning up of the configuration and build process
227 has been performed as well.
228
229 @item
230 @code{install-info} now used to update the directory of
231 Info documentation to contain an entry for @code{g77}
232 (during installation).
233
234 @item
235 Some diagnostics have been changed from warnings to errors,
236 to prevent inadvertent use of the resulting, probably buggy,
237 programs.
238 These mostly include diagnostics about use of unsupported features
239 in the @code{OPEN}, @code{INQUIRE}, @code{READ}, and
240 @code{WRITE} statements,
241 and about truncations of various sorts of constants.
242
243 @item
244 Improve documentation and indexing.
245
246 @item
247 Upgrade to @code{libf2c} as of 1998-04-20.
248
249 This should fix a variety of problems, including
250 those involving some uses of the @samp{T} format
251 specifier, and perhaps some build (porting) problems
252 as well.
253 @end itemize
254
255 @heading In 0.5.22:
256 @itemize @bullet
257 @item
258 Fix code generation for iterative @code{DO} loops that
259 have one or more references to the iteration variable,
260 or to aliases of it, in their control expressions.
261 For example, @samp{DO 10 J=2,J} now is compiled correctly.
262
263 @cindex DNRM2
264 @cindex stack, 387 coprocessor
265 @cindex ix86
266 @cindex -O2
267 @item
268 Fix a code-generation bug that afflicted
269 Intel x86 targets when @samp{-O2} was specified
270 compiling, for example, an old version of
271 the @samp{DNRM2} routine.
272
273 The x87 coprocessor stack was being
274 mismanaged in cases involving assigned @code{GOTO}
275 and @code{ASSIGN}.
276
277 @item
278 Fix @code{DTime} intrinsic so as not to truncate
279 results to integer values (on some systems).
280
281 @item
282 Fix @code{SIGNAL} intrinsic so it offers portable
283 support for 64-bit systems (such as Digital Alphas
284 running GNU/Linux).
285
286 @item
287 Fix run-time crash involving @code{NAMELIST} on 64-bit
288 machines such as Alphas.
289
290 @item
291 Fix @code{g77} version of @code{libf2c} so it no longer
292 produces a spurious @samp{I/O recursion} diagnostic at run time
293 when an I/O operation (such as @samp{READ *,I}) is interrupted
294 in a manner that causes the program to be terminated
295 via the @samp{f_exit} routine (such as via @kbd{C-c}).
296
297 @item
298 Fix @code{g77} crash triggered by @code{CASE} statement with
299 an omitted lower or upper bound.
300
301 @item
302 Fix @code{g77} crash compiling references to @code{CPU_Time}
303 intrinsic.
304
305 @item
306 Fix @code{g77} crash
307 (or apparently infinite run-time)
308 when compiling certain complicated expressions
309 involving @code{COMPLEX} arithmetic
310 (especially multiplication).
311
312 @item
313 Fix @code{g77} crash on statements such as
314 @samp{PRINT *, (REAL(Z(I)),I=1,2)}, where
315 @samp{Z} is @code{DOUBLE COMPLEX}.
316
317 @item
318 Fix a @code{g++} crash.
319
320 @item
321 Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
322 compile-time constant @code{INTEGER} expression.
323
324 @item
325 Fix @code{g77} @samp{-g} option so procedures that
326 use @samp{ENTRY} can be stepped through, line by line,
327 in @code{gdb}.
328
329 @item
330 Fix a profiling-related bug in @code{gcc} back end for
331 Intel x86 architecture.
332
333 @item
334 Allow any @code{REAL} argument to intrinsics
335 @code{Second} and @code{CPU_Time}.
336
337 @item
338 Allow any numeric argument to intrinsics
339 @code{Int2} and @code{Int8}.
340
341 @item
342 Use @code{tempnam}, if available, to open scratch files
343 (as in @samp{OPEN(STATUS='SCRATCH')}
344 so that the @code{TMPDIR} environment variable,
345 if present, is used.
346
347 @item
348 Rename the @code{gcc} keyword @code{restrict} to
349 @code{__restrict__}, to avoid rejecting valid, existing,
350 C programs.
351 Support for @code{restrict} is now more like support
352 for @code{complex}.
353
354 @item
355 Fix @samp{-fpedantic} to not reject procedure invocations
356 such as @samp{I=J()} and @samp{CALL FOO()}.
357
358 @item
359 Fix @samp{-fugly-comma} to affect invocations of
360 only external procedures.
361 Restore rejection of gratuitous trailing omitted
362 arguments to intrinsics, as in @samp{I=MAX(3,4,,)}.
363
364 @item
365 Fix compiler so it accepts @samp{-fgnu-intrinsics-*} and
366 @samp{-fbadu77-intrinsics-*} options.
367
368 @item
369 Improve diagnostic messages from @code{libf2c}
370 so it is more likely that the printing of the
371 active format string is limited to the string,
372 with no trailing garbage being printed.
373
374 (Unlike @code{f2c}, @code{g77} did not append
375 a null byte to its compiled form of every
376 format string specified via a @code{FORMAT} statement.
377 However, @code{f2c} would exhibit the problem
378 anyway for a statement like @samp{PRINT '(I)garbage', 1}
379 by printing @samp{(I)garbage} as the format string.)
380
381 @item
382 Improve compilation of FORMAT expressions so that
383 a null byte is appended to the last operand if it
384 is a constant.
385 This provides a cleaner run-time diagnostic as provided
386 by @code{libf2c} for statements like @samp{PRINT '(I1', 42}.
387
388 @item
389 Fix various crashes involving code with diagnosed errors.
390
391 @item
392 Fix cross-compilation bug when configuring @code{libf2c}.
393
394 @item
395 Improve diagnostics.
396
397 @item
398 Improve documentation and indexing.
399
400 @item
401 Upgrade to @code{libf2c} as of 1997-09-23.
402 This fixes a formatted-I/O bug that afflicted
403 64-bit systems with 32-bit integers
404 (such as Digital Alpha running GNU/Linux).
405 @end itemize
406
407 @heading In 0.5.21:
408 @itemize @bullet
409 @item
410 Fix a code-generation bug introduced by 0.5.20
411 caused by loop unrolling (by specifying
412 @samp{-funroll-loops} or similar).
413 This bug afflicted all code compiled by
414 version 2.7.2.2.f.2 of @code{gcc} (C, C++,
415 Fortran, and so on).
416
417 @item
418 Fix a code-generation bug manifested when
419 combining local @code{EQUIVALENCE} with a
420 @code{DATA} statement that follows
421 the first executable statement (or is
422 treated as an executable-context statement
423 as a result of using the @samp{-fpedantic}
424 option).
425
426 @item
427 Fix a compiler crash that occured when an
428 integer division by a constant zero is detected.
429 Instead, when the @samp{-W} option is specified,
430 the @code{gcc} back end issues a warning about such a case.
431 This bug afflicted all code compiled by
432 version 2.7.2.2.f.2 of @code{gcc} (C, C++,
433 Fortran, and so on).
434
435 @item
436 Fix a compiler crash that occurred in some cases
437 of procedure inlining.
438 (Such cases became more frequent in 0.5.20.)
439
440 @item
441 Fix a compiler crash resulting from using @code{DATA}
442 or similar to initialize a @code{COMPLEX} variable or
443 array to zero.
444
445 @item
446 Fix compiler crashes involving use of @code{AND}, @code{OR},
447 or @code{XOR} intrinsics.
448
449 @item
450 Fix compiler bug triggered when using a @code{COMMON}
451 or @code{EQUIVALENCE} variable
452 as the target of an @code{ASSIGN}
453 or assigned-@code{GOTO} statement.
454
455 @item
456 Fix compiler crashes due to using the name of a some
457 non-standard intrinsics (such as @samp{FTELL} or
458 @samp{FPUTC}) as such and as the name of a procedure
459 or common block.
460 Such dual use of a name in a program is allowed by
461 the standard.
462
463 @c @code{g77}'s version of @code{libf2c} has been modified
464 @c so that the external names of library's procedures do not
465 @c conflict with names used for Fortran procedures compiled
466 @c by @code{g77}.
467 @c An additional layer of jacket procedures has been added
468 @c to @code{libf2c} to map the old names to the new names,
469 @c for automatic use by programs that interface to the
470 @c library procedures via the external-procedure mechanism.
471 @c 
472 @c For example, the intrinsic @code{FPUTC} previously was
473 @c implemented by @code{g77} as a call to the @code{libf2c}
474 @c routine @samp{fputc_}.
475 @c This would conflict with a Fortran procedure named @code{FPUTC}
476 @c (using default compiler options), and this conflict
477 @c would cause a crash under certain circumstances.
478 @c 
479 @c Now, the intrinsic @code{FPUTC} calls @samp{G77_fputc_0},
480 @c which does not conflict with the @samp{fputc_} external
481 @c that implements a Fortran procedure named @code{FPUTC}.
482 @c 
483 @c Programs that refer to @code{FPUTC} as an external procedure
484 @c without supplying their own implementation will link to
485 @c the new @code{libf2c} routine @samp{fputc_}, which is
486 @c simply a jacket routine that calls @samp{G77_fputc_0}.
487
488 @item
489 Place automatic arrays on the stack, even if
490 @code{SAVE} or the @samp{-fno-automatic} option
491 is in effect.
492 This avoids a compiler crash in some cases.
493
494 @item
495 The @samp{-malign-double} option now reliably aligns
496 @code{DOUBLE PRECISION} optimally on Pentium and
497 Pentium Pro architectures (586 and 686 in @code{gcc}).
498
499 @item
500 New option @samp{-Wno-globals} disables warnings
501 about ``suspicious'' use of a name both as a global
502 name and as the implicit name of an intrinsic, and
503 warnings about disagreements over the number or natures of
504 arguments passed to global procedures, or the
505 natures of the procedures themselves.
506
507 The default is to issue such warnings, which are
508 new as of this version of @code{g77}.
509
510 @item
511 New option @samp{-fno-globals} disables diagnostics
512 about potentially fatal disagreements
513 analysis problems, such as disagreements over the
514 number or natures of arguments passed to global
515 procedures, or the natures of those procedures themselves.
516
517 The default is to issue such diagnostics and flag
518 the compilation as unsuccessful.
519 With this option, the diagnostics are issued as
520 warnings, or, if @samp{-Wno-globals} is specified,
521 are not issued at all.
522
523 This option also disables inlining of global procedures,
524 to avoid compiler crashes resulting from coding errors
525 that these diagnostics normally would identify.
526
527 @item
528 Diagnose cases where a reference to a procedure
529 disagrees with the type of that procedure, or
530 where disagreements about the number or nature
531 of arguments exist.
532 This avoids a compiler crash.
533
534 @item
535 Fix parsing bug whereby @code{g77} rejected a
536 second initialization specification immediately
537 following the first's closing @samp{/} without
538 an intervening comma in a @code{DATA} statement,
539 and the second specification was an implied-DO list.
540
541 @item
542 Improve performance of the @code{gcc} back end so
543 certain complicated expressions involving @code{COMPLEX}
544 arithmetic (especially multiplication) don't appear to
545 take forever to compile.
546
547 @item
548 Fix a couple of profiling-related bugs in @code{gcc}
549 back end.
550
551 @item
552 Integrate GNU Ada's (GNAT's) changes to the back end,
553 which consist almost entirely of bug fixes.
554 These fixes are circa version 3.10p of GNAT.
555
556 @item
557 Include some other @code{gcc} fixes that seem useful in
558 @code{g77}'s version of @code{gcc}.
559 (See @file{gcc/ChangeLog} for details---compare it
560 to that file in the vanilla @code{gcc-2.7.2.3.tar.gz}
561 distribution.)
562
563 @item
564 Fix @code{libU77} routines that accept file and other names
565 to strip trailing blanks from them, for consistency
566 with other implementations.
567 Blanks may be forcibly appended to such names by
568 appending a single null character (@samp{CHAR(0)})
569 to the significant trailing blanks.
570
571 @item
572 Fix @code{CHMOD} intrinsic to work with file names
573 that have embedded blanks, commas, and so on.
574
575 @item
576 Fix @code{SIGNAL} intrinsic so it accepts an
577 optional third @samp{Status} argument.
578
579 @item
580 Fix @code{IDATE()} intrinsic subroutine (VXT form)
581 so it accepts arguments in the correct order.
582 Documentation fixed accordingly, and for
583 @code{GMTIME()} and @code{LTIME()} as well.
584
585 @item
586 Make many changes to @code{libU77} intrinsics to
587 support existing code more directly.
588
589 Such changes include allowing both subroutine and
590 function forms of many routines, changing @code{MCLOCK()}
591 and @code{TIME()} to return @code{INTEGER(KIND=1)} values,
592 introducing @code{MCLOCK8()} and @code{TIME8()} to
593 return @code{INTEGER(KIND=2)} values,
594 and placing functions that are intended to perform
595 side effects in a new intrinsic group, @code{badu77}.
596
597 @item
598 Improve @code{libU77} so it is more portable.
599
600 @item
601 Add options @samp{-fbadu77-intrinsics-delete},
602 @samp{-fbadu77-intrinsics-hide}, and so on.
603
604 @item
605 Fix crashes involving diagnosed or invalid code.
606
607 @item
608 @code{g77} and @code{gcc} now do a somewhat better
609 job detecting and diagnosing arrays that are too
610 large to handle before these cause diagnostics
611 during the assembler or linker phase, a compiler
612 crash, or generation of incorrect code.
613
614 @item
615 Make some fixes to alias analysis code.
616
617 @item
618 Add support for @code{restrict} keyword in @code{gcc}
619 front end.
620
621 @item
622 Support @code{gcc} version 2.7.2.3
623 (modified by @code{g77} into version 2.7.2.3.f.1),
624 and remove
625 support for prior versions of @code{gcc}.
626
627 @item
628 Incorporate GNAT's patches to the @code{gcc} back
629 end into @code{g77}'s, so GNAT users do not need
630 to apply GNAT's patches to build both GNAT and @code{g77}
631 from the same source tree.
632
633 @item
634 Modify @code{make} rules and related code so that
635 generation of Info documentation doesn't require
636 compilation using @code{gcc}.
637 Now, any ANSI C compiler should be adequate to
638 produce the @code{g77} documentation (in particular,
639 the tables of intrinsics) from scratch.
640
641 @item
642 Add @code{INT2} and @code{INT8} intrinsics.
643
644 @item
645 Add @code{CPU_TIME} intrinsic.
646
647 @item
648 Add @code{ALARM} intrinsic.
649
650 @item
651 @code{CTIME} intrinsic now accepts any @code{INTEGER}
652 argument, not just @code{INTEGER(KIND=2)}.
653
654 @item
655 Warn when explicit type declaration disagrees with
656 the type of an intrinsic invocation.
657
658 @item
659 Support @samp{*f771} entry in @code{gcc} @file{specs} file.
660
661 @item
662 Fix typo in @code{make} rule @samp{g77-cross}, used only for
663 cross-compiling.
664
665 @item
666 Fix @code{libf2c} build procedure to re-archive library
667 if previous attempt to archive was interrupted.
668
669 @item
670 Change @code{gcc} to unroll loops only during the last
671 invocation (of as many as two invocations) of loop
672 optimization.
673
674 @item
675 Improve handling of @samp{-fno-f2c} so that code that
676 attempts to pass an intrinsic as an actual argument,
677 such as @samp{CALL FOO(ABS)}, is rejected due to the fact
678 that the run-time-library routine is, effectively,
679 compiled with @samp{-ff2c} in effect.
680
681 @item
682 Fix @code{g77} driver to recognize @samp{-fsyntax-only}
683 as an option that inhibits linking, just like @samp{-c} or
684 @samp{-S}, and to recognize and properly handle the
685 @samp{-nostdlib}, @samp{-M}, @samp{-MM}, @samp{-nodefaultlibs},
686 and @samp{-Xlinker} options.
687
688 @item
689 Upgrade to @code{libf2c} as of 1997-08-16.
690
691 @item
692 Modify @code{libf2c} to consistently and clearly diagnose
693 recursive I/O (at run time).
694
695 @item
696 @code{g77} driver now prints version information (such as produced
697 by @kbd{g77 -v}) to @code{stderr} instead of @code{stdout}.
698
699 @item
700 The @samp{.r} suffix now designates a Ratfor source file,
701 to be preprocessed via the @code{ratfor} command, available
702 separately.
703
704 @item
705 Fix some aspects of how @code{gcc} determines what kind of
706 system is being configured and what kinds are supported.
707 For example, GNU Linux/Alpha ELF systems now are directly
708 supported.
709
710 @item
711 Improve diagnostics.
712
713 @item
714 Improve documentation and indexing.
715
716 @item
717 Include all pertinent files for @code{libf2c} that come
718 from @code{netlib.bell-labs.com}; give any such files
719 that aren't quite accurate in @code{g77}'s version of
720 @code{libf2c} the suffix @samp{.netlib}.
721
722 @item
723 Reserve @code{INTEGER(KIND=0)} for future use.
724 @end itemize
725
726 @heading In 0.5.20:
727 @itemize @bullet
728 @item
729 The @samp{-fno-typeless-boz} option is now the default.
730
731 This option specifies that non-decimal-radix
732 constants using the prefixed-radix form (such as @samp{Z'1234'})
733 are to be interpreted as @code{INTEGER} constants.
734 Specify @samp{-ftypeless-boz} to cause such
735 constants to be interpreted as typeless.
736
737 (Version 0.5.19 introduced @samp{-fno-typeless-boz} and
738 its inverse.)
739
740 @item
741 Options @samp{-ff90-intrinsics-enable} and
742 @samp{-fvxt-intrinsics-enable} now are the
743 defaults.
744
745 Some programs might use names that clash with
746 intrinsic names defined (and now enabled) by these
747 options or by the new @code{libU77} intrinsics.
748 Users of such programs might need to compile them
749 differently (using, for example, @samp{-ff90-intrinsics-disable})
750 or, better yet, insert appropriate @code{EXTERNAL}
751 statements specifying that these names are not intended
752 to be names of intrinsics.
753
754 @item
755 The @samp{ALWAYS_FLUSH} macro is no longer defined when
756 building @code{libf2c}, which should result in improved
757 I/O performance, especially over NFS.
758
759 @emph{Note:} If you have code that depends on the behavior
760 of @code{libf2c} when built with @samp{ALWAYS_FLUSH} defined,
761 you will have to modify @code{libf2c} accordingly before
762 building it from this and future versions of @code{g77}.
763
764 @item
765 Dave Love's implementation of @code{libU77} has been
766 added to the version of @code{libf2c} distributed with
767 and built as part of @code{g77}.
768 @code{g77} now knows about the routines in this library
769 as intrinsics.
770
771 @item
772 New option @samp{-fvxt} specifies that the
773 source file is written in VXT Fortran, instead of GNU Fortran.
774
775 @item
776 The @samp{-fvxt-not-f90} option has been deleted,
777 along with its inverse, @samp{-ff90-not-vxt}.
778
779 If you used one of these deleted options, you should
780 re-read the pertinent documentation to determine which
781 options, if any, are appropriate for compiling your
782 code with this version of @code{g77}.
783
784 @item
785 The @samp{-fugly} option now issues a warning, as it
786 likely will be removed in a future version.
787
788 (Enabling all the @samp{-fugly-*} options is unlikely
789 to be feasible, or sensible, in the future,
790 so users should learn to specify only those
791 @samp{-fugly-*} options they really need for a
792 particular source file.)
793
794 @item
795 The @samp{-fugly-assumed} option, introduced in
796 version 0.5.19, has been changed to
797 better accommodate old and new code.
798
799 @item
800 Make a number of fixes to the @code{g77} front end and
801 the @code{gcc} back end to better support Alpha (AXP)
802 machines.
803 This includes providing at least one bug-fix to the
804 @code{gcc} back end for Alphas.
805
806 @item
807 Related to supporting Alpha (AXP) machines, the @code{LOC()}
808 intrinsic and @code{%LOC()} construct now return
809 values of integer type that is the same width (holds
810 the same number of bits) as the pointer type on the
811 machine.
812
813 On most machines, this won't make a difference, whereas
814 on Alphas, the type these constructs return is
815 @code{INTEGER*8} instead of the more common @code{INTEGER*4}.
816
817 @item
818 Emulate @code{COMPLEX} arithmetic in the @code{g77} front
819 end, to avoid bugs in @code{complex} support in the
820 @code{gcc} back end.
821 New option @samp{-fno-emulate-complex}
822 causes @code{g77} to revert the 0.5.19 behavior.
823
824 @item
825 Fix bug whereby @samp{REAL A(1)}, for example, caused
826 a compiler crash if @samp{-fugly-assumed} was in effect
827 and @var{A} was a local (automatic) array.
828 That case is no longer affected by the new
829 handling of @samp{-fugly-assumed}.
830
831 @item
832 Fix @code{g77} command driver so that @samp{g77 -o foo.f}
833 no longer deletes @file{foo.f} before issuing other
834 diagnostics, and so the @samp{-x} option is properly
835 handled.
836
837 @item
838 Enable inlining of subroutines and functions by the @code{gcc}
839 back end.
840 This works as it does for @code{gcc} itself---program units
841 may be inlined for invocations that follow them in the same
842 program unit, as long as the appropriate compile-time
843 options are specified.
844
845 @item
846 Dummy arguments are no longer assumed to potentially alias
847 (overlap)
848 other dummy arguments or @code{COMMON} areas when any of
849 these are defined (assigned to) by Fortran code.
850
851 This can result in faster and/or smaller programs when
852 compiling with optimization enabled, though on some
853 systems this effect is observed only when @samp{-fforce-addr}
854 also is specified.
855
856 New options @samp{-falias-check}, @samp{-fargument-alias},
857 @samp{-fargument-noalias},
858 and @samp{-fno-argument-noalias-global} control the
859 way @code{g77} handles potential aliasing.
860
861 @item
862 The @code{CONJG()} and @code{DCONJG()} intrinsics now
863 are compiled in-line.
864
865 @item
866 The bug-fix for 0.5.19.1 has been re-done.
867 The @code{g77} compiler has been changed back to
868 assume @code{libf2c} has no aliasing problems in
869 its implementations of the @code{COMPLEX} (and
870 @code{DOUBLE COMPLEX}) intrinsics.
871 The @code{libf2c} has been changed to have no such
872 problems.
873
874 As a result, 0.5.20 is expected to offer improved performance
875 over 0.5.19.1, perhaps as good as 0.5.19 in most
876 or all cases, due to this change alone.
877
878 @emph{Note:} This change requires version 0.5.20 of
879 @code{libf2c}, at least, when linking code produced
880 by any versions of @code{g77} other than 0.5.19.1.
881 Use @samp{g77 -v} to determine the version numbers
882 of the @code{libF77}, @code{libI77}, and @code{libU77}
883 components of the @code{libf2c} library.
884 (If these version numbers are not printed---in
885 particular, if the linker complains about unresolved
886 references to names like @samp{g77__fvers__}---that
887 strongly suggests your installation has an obsolete
888 version of @code{libf2c}.)
889
890 @item
891 New option @samp{-fugly-assign} specifies that the
892 same memory locations are to be used to hold the
893 values assigned by both statements @samp{I = 3} and
894 @samp{ASSIGN 10 TO I}, for example.
895 (Normally, @code{g77} uses a separate memory location
896 to hold assigned statement labels.)
897
898 @item
899 @code{FORMAT} and @code{ENTRY} statements now are allowed to
900 precede @code{IMPLICIT NONE} statements.
901
902 @item
903 Produce diagnostic for unsupported @code{SELECT CASE} on
904 @code{CHARACTER} type, instead of crashing, at compile time.
905
906 @item
907 Fix crashes involving diagnosed or invalid code.
908
909 @item
910 Change approach to building @code{libf2c} archive
911 (@file{libf2c.a}) so that members are added to it
912 only when truly necessary, so the user that installs
913 an already-built @code{g77} doesn't need to have write
914 access to the build tree (whereas the user doing the
915 build might not have access to install new software
916 on the system).
917
918 @item
919 Support @code{gcc} version 2.7.2.2
920 (modified by @code{g77} into version 2.7.2.2.f.2),
921 and remove
922 support for prior versions of @code{gcc}.
923
924 @item
925 Upgrade to @code{libf2c} as of 1997-02-08, and
926 fix up some of the build procedures.
927
928 @item
929 Improve general build procedures for @code{g77},
930 fixing minor bugs (such as deletion of any file
931 named @file{f771} in the parent directory of @code{gcc/}).
932
933 @item
934 Enable full support of @code{INTEGER*8} available in
935 @code{libf2c} and @file{f2c.h} so that @code{f2c} users
936 may make full use of its features via the @code{g77}
937 version of @file{f2c.h} and the @code{INTEGER*8}
938 support routines in the @code{g77} version of @code{libf2c}.
939
940 @item
941 Improve @code{g77} driver and @code{libf2c} so that @samp{g77 -v}
942 yields version information on the library.
943
944 @item
945 The @code{SNGL} and @code{FLOAT} intrinsics now are
946 specific intrinsics, instead of synonyms for the
947 generic intrinsic @code{REAL}.
948
949 @item
950 New intrinsics have been added.
951 These are @code{REALPART}, @code{IMAGPART},
952 @code{COMPLEX},
953 @code{LONG}, and @code{SHORT}.
954
955 @item
956 A new group of intrinsics, @samp{gnu}, has been added
957 to contain the new @code{REALPART}, @code{IMAGPART},
958 and @code{COMPLEX} intrinsics.
959 An old group, @samp{dcp}, has been removed.
960
961 @item
962 Complain about industry-wide ambiguous references
963 @samp{REAL(@var{expr})} and @samp{AIMAG(@var{expr})},
964 where @var{expr} is @code{DOUBLE COMPLEX} (or any
965 complex type other than @code{COMPLEX}), unless
966 @samp{-ff90} option specifies Fortran 90 interpretation
967 or new @samp{-fugly-complex} option, in conjunction with
968 @samp{-fnot-f90}, specifies @code{f2c} interpretation.
969
970 @item
971 Make improvements to diagnostics.
972
973 @item
974 Speed up compiler a bit.
975
976 @item
977 Improvements to documentation and indexing, including
978 a new chapter containing information on one, later
979 more, diagnostics that users are directed to pull
980 up automatically via a message in the diagnostic itself.
981
982 (Hence the menu item @samp{M} for the node
983 @samp{Diagnostics} in the top-level menu of
984 the Info documentation.)
985 @end itemize
986
987 @heading In 0.5.19.1:
988 @itemize @bullet
989 @item
990 Code-generation bugs afflicting operations on complex
991 data have been fixed.
992
993 These bugs occurred when assigning the result of an
994 operation to a complex variable (or array element)
995 that also served as an input to that operation.
996
997 The operations affected by this bug were: @samp{CONJG()},
998 @samp{DCONJG()}, @samp{CCOS()}, @samp{CDCOS()},
999 @samp{CLOG()}, @samp{CDLOG()}, @samp{CSIN()}, @samp{CDSIN()},
1000 @samp{CSQRT()}, @samp{CDSQRT()}, complex division, and
1001 raising a @code{DOUBLE COMPLEX} operand to an @code{INTEGER}
1002 power.
1003 (The related generic and @samp{Z}-prefixed intrinsics,
1004 such as @samp{ZSIN()}, also were affected.)
1005
1006 For example, @samp{C = CSQRT(C)}, @samp{Z = Z/C}, and @samp{Z = Z**I}
1007 (where @samp{C} is @code{COMPLEX} and @samp{Z} is
1008 @code{DOUBLE COMPLEX}) have been fixed.
1009 @end itemize
1010
1011 @heading In 0.5.19:
1012 @itemize @bullet
1013 @item
1014 Fix @code{FORMAT} statement parsing so negative values for
1015 specifiers such as @samp{P} (e.g. @samp{FORMAT(-1PF8.1)})
1016 are correctly processed as negative.
1017
1018 @item
1019 Fix @code{SIGNAL} intrinsic so it once again accepts a
1020 procedure as its second argument.
1021
1022 @item
1023 A temporary kludge option provides bare-bones information on
1024 @code{COMMON} and @code{EQUIVALENCE} members at debug time.
1025
1026 @item
1027 New @samp{-fonetrip} option specifies FORTRAN-66-style
1028 one-trip @code{DO} loops.
1029
1030 @item
1031 New @samp{-fno-silent} option causes names of program units
1032 to be printed as they are compiled, in a fashion similar to
1033 UNIX @code{f77} and @code{f2c}.
1034
1035 @item
1036 New @samp{-fugly-assumed} option specifies that arrays
1037 dimensioned via @samp{DIMENSION X(1)}, for example, are to be
1038 treated as assumed-size.
1039
1040 @item
1041 New @samp{-fno-typeless-boz} option specifies that non-decimal-radix
1042 constants using the prefixed-radix form (such as @samp{Z'1234'})
1043 are to be interpreted as @code{INTEGER} constants.
1044
1045 @item
1046 New @samp{-ff66} option is a ``shorthand'' option that specifies
1047 behaviors considered appropriate for FORTRAN 66 programs.
1048
1049 @item
1050 New @samp{-ff77} option is a ``shorthand'' option that specifies
1051 behaviors considered appropriate for UNIX @code{f77} programs.
1052
1053 @item
1054 New @samp{-fugly-comma} and @samp{-fugly-logint} options provided
1055 to perform some of what @samp{-fugly} used to do.
1056 @samp{-fugly} and @samp{-fno-ugly} are now ``shorthand'' options,
1057 in that they do nothing more than enable (or disable) other
1058 @samp{-fugly-*} options.
1059
1060 @item
1061 Fix parsing of assignment statements involving targets that
1062 are substrings of elements of @code{CHARACTER} arrays having
1063 names such as @samp{READ}, @samp{WRITE}, @samp{GOTO}, and
1064 @samp{REALFUNCTIONFOO}.
1065
1066 @item
1067 Fix crashes involving diagnosed code.
1068
1069 @item
1070 Fix handling of local @code{EQUIVALENCE} areas so certain cases
1071 of valid Fortran programs are not misdiagnosed as improperly
1072 extending the area backwards.
1073
1074 @item
1075 Support @code{gcc} version 2.7.2.1.
1076
1077 @item
1078 Upgrade to @code{libf2c} as of 1996-09-26, and
1079 fix up some of the build procedures.
1080
1081 @item
1082 Change code generation for list-directed I/O so it allows
1083 for new versions of @code{libf2c} that might return non-zero
1084 status codes for some operations previously assumed to always
1085 return zero.
1086
1087 This change not only affects how @code{IOSTAT=} variables
1088 are set by list-directed I/O, it also affects whether
1089 @code{END=} and @code{ERR=} labels are reached by these
1090 operations.
1091
1092 @item
1093 Add intrinsic support for new @code{FTELL} and @code{FSEEK}
1094 procedures in @code{libf2c}.
1095
1096 @item
1097 Modify @code{fseek_()} in @code{libf2c} to be more portable
1098 (though, in practice, there might be no systems where this
1099 matters) and to catch invalid @samp{whence} arguments.
1100
1101 @item
1102 Some useless warnings from the @samp{-Wunused} option have
1103 been eliminated.
1104
1105 @item
1106 Fix a problem building the @file{f771} executable
1107 on AIX systems by linking with the @samp{-bbigtoc} option.
1108
1109 @item
1110 Abort configuration if @code{gcc} has not been patched
1111 using the patch file provided in the @samp{gcc/f/gbe/}
1112 subdirectory.
1113
1114 @item
1115 Add options @samp{--help} and @samp{--version} to the
1116 @code{g77} command, to conform to GNU coding guidelines.
1117 Also add printing of @code{g77} version number when
1118 the @samp{--verbose} (@samp{-v}) option is used.
1119
1120 @item
1121 Change internally generated name for local @code{EQUIVALENCE}
1122 areas to one based on the alphabetically sorted first name
1123 in the list of names for entities placed at the beginning
1124 of the areas.
1125
1126 @item
1127 Improvements to documentation and indexing.
1128 @end itemize
1129
1130 @heading In 0.5.18:
1131 @itemize @bullet
1132 @item
1133 Add some rudimentary support for @code{INTEGER*1},
1134 @code{INTEGER*2}, @code{INTEGER*8},
1135 and their @code{LOGICAL} equivalents.
1136 (This support works on most, maybe all, @code{gcc} targets.)
1137
1138 Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
1139 for providing the patch for this!
1140
1141 Among the missing elements from the support for these
1142 features are full intrinsic support and constants.
1143
1144 @item
1145 Add some rudimentary support for the @code{BYTE} and
1146 @code{WORD} type-declaration statements.
1147 @code{BYTE} corresponds to @code{INTEGER*1},
1148 while @code{WORD} corresponds to @code{INTEGER*2}.
1149
1150 Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
1151 for providing the patch for this!
1152
1153 @item
1154 The compiler code handling intrinsics has been largely
1155 rewritten to accommodate the new types.
1156 No new intrinsics or arguments for existing
1157 intrinsics have been added, so there is, at this
1158 point, no intrinsic to convert to @code{INTEGER*8},
1159 for example.
1160
1161 @item
1162 Support automatic arrays in procedures.
1163
1164 @item
1165 Reduce space/time requirements for handling large
1166 @emph{sparsely} initialized aggregate arrays.
1167 This improvement applies to only a subset of
1168 the general problem to be addressed in 0.6.
1169
1170 @item
1171 Treat initial values of zero as if they weren't
1172 specified (in DATA and type-declaration statements).
1173 The initial values will be set to zero anyway, but the amount
1174 of compile time processing them will be reduced,
1175 in some cases significantly (though, again, this
1176 is only a subset of the general problem to be
1177 addressed in 0.6).
1178
1179 A new option, @samp{-fzeros}, is introduced to
1180 enable the traditional treatment of zeros as any
1181 other value.
1182
1183 @item
1184 With @samp{-ff90} in force, @code{g77} incorrectly
1185 interpreted @samp{REAL(Z)} as returning a @code{REAL}
1186 result, instead of as a @code{DOUBLE PRECISION}
1187 result.
1188 (Here, @samp{Z} is @code{DOUBLE COMPLEX}.)
1189
1190 With @samp{-fno-f90} in force, the interpretation remains
1191 unchanged, since this appears to be how at least some
1192 F77 code using the @code{DOUBLE COMPLEX} extension expected
1193 it to work.
1194
1195 Essentially, @samp{REAL(Z)} in F90 is the same as
1196 @samp{DBLE(Z)}, while in extended F77, it appears to
1197 be the same as @samp{REAL(REAL(Z))}.
1198
1199 @item
1200 An expression involving exponentiation, where both operands
1201 were type @code{INTEGER} and the right-hand operand
1202 was negative, was erroneously evaluated.
1203
1204 @item
1205 Fix bugs involving @code{DATA} implied-@code{DO} constructs
1206 (these involved an errant diagnostic and a crash, both on good
1207 code, one involving subsequent statement-function definition).
1208
1209 @item
1210 Close @code{INCLUDE} files after processing them, so compiling source
1211 files with lots of @code{INCLUDE} statements does not result in
1212 being unable to open @code{INCLUDE} files after all the available
1213 file descriptors are used up.
1214
1215 @item
1216 Speed up compiling, especially of larger programs, and perhaps
1217 slightly reduce memory utilization while compiling (this is
1218 @emph{not} the improvement planned for 0.6 involving large aggregate
1219 areas)---these improvements result from simply turning
1220 off some low-level code to do self-checking that hasn't been
1221 triggered in a long time.
1222
1223 @item
1224 Introduce three new options that
1225 implement optimizations in the @code{gcc} back end (GBE).
1226 These options are @samp{-fmove-all-movables}, @samp{-freduce-all-givs},
1227 and @samp{-frerun-loop-opt}, which are enabled, by default,
1228 for Fortran compilations.
1229 These optimizations are intended to help toon Fortran programs.
1230
1231 @item
1232 Patch the GBE to do a better job optimizing certain
1233 kinds of references to array elements.
1234
1235 @item
1236 Due to patches to the GBE, the version number of @code{gcc}
1237 also is patched to make it easier to manage installations,
1238 especially useful if it turns out a @code{g77} change to the
1239 GBE has a bug.
1240
1241 The @code{g77}-modified version number is the @code{gcc}
1242 version number with the string @samp{.f.@var{n}} appended,
1243 where @samp{f} identifies the version as enhanced for
1244 Fortran, and @var{n} is @samp{1} for the first Fortran
1245 patch for that version of @code{gcc}, @samp{2} for the
1246 second, and so on.
1247
1248 So, this introduces version 2.7.2.f.1 of @code{gcc}.
1249
1250 @item
1251 Make several improvements and fixes to diagnostics, including
1252 the removal of two that were inappropriate or inadequate.
1253
1254 @item
1255 Warning about two successive arithmetic operators, produced
1256 by @samp{-Wsurprising}, now produced @emph{only} when both
1257 operators are, indeed, arithmetic (not relational/boolean).
1258
1259 @item
1260 @samp{-Wsurprising} now warns about the remaining cases
1261 of using non-integral variables for implied-@code{DO}
1262 loops, instead of these being rejected unless @samp{-fpedantic}
1263 or @samp{-fugly} specified.
1264
1265 @item
1266 Allow @code{SAVE} of a local variable or array, even after
1267 it has been given an initial value via @code{DATA}, for example.
1268
1269 @item
1270 Introduce an Info version of @code{g77} documentation, which
1271 supercedes @file{gcc/f/CREDITS}, @file{gcc/f/DOC}, and
1272 @file{gcc/f/PROJECTS}.
1273 These files will be removed in a future release.
1274 The files @file{gcc/f/BUGS}, @file{gcc/f/INSTALL}, and
1275 @file{gcc/f/NEWS} now are automatically built from
1276 the texinfo source when distributions are made.
1277
1278 This effort was inspired by a first pass at translating
1279 @file{g77-0.5.16/f/DOC} that was contributed to Craig by
1280 David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
1281
1282 @item
1283 New @samp{-fno-second-underscore} option to specify
1284 that, when @samp{-funderscoring} is in effect, a second
1285 underscore is not to be appended to Fortran names already
1286 containing an underscore.
1287
1288 @item
1289 Change the way iterative @code{DO} loops work to follow
1290 the F90 standard.
1291 In particular, calculation of the iteration count is
1292 still done by converting the start, end, and increment
1293 parameters to the type of the @code{DO} variable, but
1294 the result of the calculation is always converted to
1295 the default @code{INTEGER} type.
1296
1297 (This should have no effect on existing code compiled
1298 by @code{g77}, but code written to assume that use
1299 of a @emph{wider} type for the @code{DO} variable
1300 will result in an iteration count being fully calculated
1301 using that wider type (wider
1302 than default @code{INTEGER}) must be rewritten.)
1303
1304 @item
1305 Support @code{gcc} version 2.7.2.
1306
1307 @item
1308 Upgrade to @code{libf2c} as of 1996-03-23, and
1309 fix up some of the build procedures.
1310
1311 Note that the email addresses related to @code{f2c}
1312 have changed---the distribution site now is
1313 named @code{netlib.bell-labs.com}, and the
1314 maintainer's new address is @email{dmg@@bell-labs.com}.
1315 @end itemize
1316
1317 @heading In 0.5.17:
1318 @itemize @bullet
1319 @item
1320 @strong{Fix serious bug} in @samp{g77 -v} command that can cause removal of a
1321 system's @file{/dev/null} special file if run by user @samp{root}.
1322
1323 @strong{All users} of version 0.5.16 should ensure that
1324 they have not removed @file{/dev/null} or replaced it with an ordinary
1325 file (e.g. by comparing the output of @samp{ls -l /dev/null} with
1326 @samp{ls -l /dev/zero}.
1327 If the output isn't basically the
1328 same, contact your system
1329 administrator about restoring @file{/dev/null} to its proper status).
1330
1331 This bug is particularly insidious because removing @file{/dev/null} as
1332 a special file can go undetected for quite a while, aside from
1333 various applications and programs exhibiting sudden, strange
1334 behaviors.
1335
1336 I sincerely apologize for not realizing the
1337 implications of the fact that when @samp{g77 -v} runs the @code{ld} command
1338 with @samp{-o /dev/null} that @code{ld} tries to @emph{remove} the executable
1339 it is supposed to build (especially if it reports unresolved
1340 references, which it should in this case)!
1341
1342 @item
1343 Fix crash on @samp{CHARACTER*(*) FOO} in a main or block data program unit.
1344
1345 @item
1346 Fix crash that can occur when diagnostics given outside of any
1347 program unit (such as when input file contains @samp{@@foo}).
1348
1349 @item
1350 Fix crashes, infinite loops (hangs), and such involving diagnosed code.
1351
1352 @item
1353 Fix @code{ASSIGN}'ed variables so they can be @code{SAVE}'d or dummy arguments,
1354 and issue clearer error message in cases where target of @code{ASSIGN}
1355 or @code{ASSIGN}ed @code{GOTO}/@code{FORMAT} is too small (which should
1356 never happen).
1357
1358 @item
1359 Make @code{libf2c} build procedures work on more systems again by
1360 eliminating unnecessary invocations of @samp{ld -r -x} and @samp{mv}.
1361
1362 @item
1363 Fix omission of @samp{-funix-intrinsics-@dots{}} options in list of permitted
1364 options to compiler.
1365
1366 @item
1367 Fix failure to always diagnose missing type declaration for
1368 @code{IMPLICIT NONE}.
1369
1370 @item
1371 Fix compile-time performance problem (which could sometimes
1372 crash the compiler, cause a hang, or whatever, due to a bug
1373 in the back end) involving exponentiation with a large @code{INTEGER}
1374 constant for the right-hand operator (e.g. @samp{I**32767}).
1375
1376 @item
1377 Fix build procedures so cross-compiling @code{g77} (the @code{fini}
1378 utility in particular) is properly built using the host compiler.
1379
1380 @item
1381 Add new @samp{-Wsurprising} option to warn about constructs that are
1382 interpreted by the Fortran standard (and @code{g77}) in ways that
1383 are surprising to many programmers.
1384
1385 @item
1386 Add @code{ERF()} and @code{ERFC()} as generic intrinsics mapping to existing
1387 @code{ERF}/@code{DERF} and @code{ERFC}/@code{DERFC} specific intrinsics.
1388
1389 @emph{Note:} You should
1390 specify @samp{INTRINSIC ERF,ERFC} in any code where you might use
1391 these as generic intrinsics, to improve likelihood of diagnostics
1392 (instead of subtle run-time bugs) when using a compiler that
1393 doesn't support these as intrinsics (e.g. @code{f2c}).
1394
1395 @item
1396 Remove from @samp{-fno-pedantic} the diagnostic about @code{DO}
1397 with non-@code{INTEGER} index variable; issue that under
1398 @samp{-Wsurprising} instead.
1399
1400 @item
1401 Clarify some diagnostics that say things like ``ignored'' when that's
1402 misleading.
1403
1404 @item
1405 Clarify diagnostic on use of @code{.EQ.}/@code{.NE.} on @code{LOGICAL}
1406 operands.
1407
1408 @item
1409 Minor improvements to code generation for various operations on
1410 @code{LOGICAL} operands.
1411
1412 @item
1413 Minor improvement to code generation for some @code{DO} loops on some
1414 machines.
1415
1416 @item
1417 Support @code{gcc} version 2.7.1.
1418
1419 @item
1420 Upgrade to @code{libf2c} as of 1995-11-15.
1421 @end itemize
1422
1423 @heading In 0.5.16:
1424 @itemize @bullet
1425 @item
1426 Fix a code-generation bug involving complicated @code{EQUIVALENCE} statements
1427 not involving @code{COMMON}.
1428
1429 @item
1430 Fix code-generation bugs involving invoking ``gratis'' library procedures
1431 in @code{libf2c} from code compiled with @samp{-fno-f2c} by making these
1432 procedures known to @code{g77} as intrinsics (not affected by -fno-f2c).
1433 This is known to fix code invoking @code{ERF()}, @code{ERFC()},
1434 @code{DERF()}, and @code{DERFC()}.
1435
1436 @item
1437 Update @code{libf2c} to include netlib patches through 1995-08-16, and
1438 @code{#define} @samp{WANT_LEAD_0} to 1 to make @code{g77}-compiled code more
1439 consistent with other Fortran implementations by outputting
1440 leading zeros in formatted and list-directed output.
1441
1442 @item
1443 Fix a code-generation bug involving adjustable dummy arrays with high
1444 bounds whose primaries are changed during procedure execution, and
1445 which might well improve code-generation performance for such arrays
1446 compared to @code{f2c} plus @code{gcc} (but apparently only when using
1447 @file{gcc-2.7.0} or later).
1448
1449 @item
1450 Fix a code-generation bug involving invocation of @code{COMPLEX} and
1451 @code{DOUBLE COMPLEX} @code{FUNCTION}s and doing @code{COMPLEX} and
1452 @code{DOUBLE COMPLEX} divides, when the result
1453 of the invocation or divide is assigned directly to a variable
1454 that overlaps one or more of the arguments to the invocation or divide.
1455
1456 @item
1457 Fix crash by not generating new optimal code for @samp{X**I} if @samp{I} is
1458 nonconstant and the expression is used to dimension a dummy
1459 array, since the @code{gcc} back end does not support the necessary
1460 mechanics (and the @code{gcc} front end rejects the equivalent
1461 construct, as it turns out).
1462
1463 @item
1464 Fix crash on expressions like @samp{COMPLEX**INTEGER}.
1465
1466 @item
1467 Fix crash on expressions like @samp{(1D0,2D0)**2}, i.e. raising a
1468 @code{DOUBLE COMPLEX} constant to an @code{INTEGER} constant power.
1469
1470 @item
1471 Fix crashes and such involving diagnosed code.
1472
1473 @item
1474 Diagnose, instead of crashing on, statement function definitions
1475 having duplicate dummy argument names.
1476
1477 @item
1478 Fix bug causing rejection of good code involving statement function
1479 definitions.
1480
1481 @item
1482 Fix bug resulting in debugger not knowing size of local equivalence
1483 area when any member of area has initial value (via @code{DATA},
1484 for example).
1485
1486 @item
1487 Fix installation bug that prevented installation of @code{g77} driver.
1488 Provide for easy selection of whether to install copy of @code{g77}
1489 as @code{f77} to replace the broken code.
1490
1491 @item
1492 Fix @code{gcc} driver (affects @code{g77} thereby) to not
1493 gratuitously invoke the
1494 @code{f771} program (e.g. when @samp{-E} is specified).
1495
1496 @item
1497 Fix diagnostic to point to correct source line when it immediately
1498 follows an @code{INCLUDE} statement.
1499
1500 @item
1501 Support more compiler options in @code{gcc}/@code{g77} when
1502 compiling Fortran files.
1503 These options include @samp{-p}, @samp{-pg}, @samp{-aux-info}, @samp{-P},
1504 correct setting of version-number macros for preprocessing, full
1505 recognition of @samp{-O0}, and
1506 automatic insertion of configuration-specific linker specs.
1507
1508 @item
1509 Add new intrinsics that interface to existing routines in @code{libf2c}:
1510 @code{ABORT}, @code{DERF}, @code{DERFC}, @code{ERF}, @code{ERFC}, @code{EXIT},
1511 @code{FLUSH}, @code{GETARG}, @code{GETENV}, @code{IARGC},
1512 @code{SIGNAL}, and @code{SYSTEM}.
1513 Note that @code{ABORT}, @code{EXIT}, @code{FLUSH}, @code{SIGNAL}, and
1514 @code{SYSTEM} are intrinsic subroutines, not functions (since they
1515 have side effects), so to get the return values from @code{SIGNAL}
1516 and @code{SYSTEM}, append a final argument specifying an @code{INTEGER}
1517 variable or array element (e.g. @samp{CALL SYSTEM('rm foo',ISTAT)}).
1518
1519 @item
1520 Add new intrinsic group named @samp{unix} to contain the new intrinsics,
1521 and by default enable this new group.
1522
1523 @item
1524 Move @code{LOC()} intrinsic out of the @samp{vxt} group to the new
1525 @samp{unix} group.
1526
1527 @item
1528 Improve @code{g77} so that @samp{g77 -v} by itself (or with
1529 certain other options, including @samp{-B}, @samp{-b}, @samp{-i},
1530 @samp{-nostdlib}, and @samp{-V}) reports lots more useful
1531 version info, and so that long-form options @code{gcc} accepts are
1532 understood by @code{g77} as well (even in truncated, unambiguous forms).
1533
1534 @item
1535 Add new @code{g77} option @samp{--driver=name} to specify driver when
1536 default, @code{gcc}, isn't appropriate.
1537
1538 @item
1539 Add support for @samp{#} directives (as output by the preprocessor) in the
1540 compiler, and enable generation of those directives by the
1541 preprocessor (when compiling @samp{.F} files) so diagnostics and debugging
1542 info are more useful to users of the preprocessor.
1543
1544 @item
1545 Produce better diagnostics, more like @code{gcc}, with info such as
1546 @samp{In function `foo':} and @samp{In file included from...:}.
1547
1548 @item
1549 Support @code{gcc}'s @samp{-fident} and @samp{-fno-ident} options.
1550
1551 @item
1552 When @samp{-Wunused} in effect, don't warn about local variables used as
1553 statement-function dummy arguments or @code{DATA} implied-@code{DO} iteration
1554 variables, even though, strictly speaking, these are not uses
1555 of the variables themselves.
1556
1557 @item
1558 When @samp{-W -Wunused} in effect, don't warn about unused dummy arguments
1559 at all, since there's no way to turn this off for individual
1560 cases (@code{g77} might someday start warning about these)---applies
1561 to @code{gcc} versions 2.7.0 and later, since earlier versions didn't
1562 warn about unused dummy arguments.
1563
1564 @item
1565 New option @samp{-fno-underscoring} that inhibits transformation of names
1566 (by appending one or two underscores) so users may experiment
1567 with implications of such an environment.
1568
1569 @item
1570 Minor improvement to @file{gcc/f/info} module to make it easier to build
1571 @code{g77} using the native (non-@code{gcc}) compiler on certain machines
1572 (but definitely not all machines nor all non-@code{gcc} compilers).
1573 Please
1574 do not report bugs showing problems compilers have with
1575 macros defined in @file{gcc/f/target.h} and used in places like
1576 @file{gcc/f/expr.c}.
1577
1578 @item
1579 Add warning to be printed for each invocation of the compiler
1580 if the target machine @code{INTEGER}, @code{REAL}, or @code{LOGICAL} size
1581 is not 32 bits,
1582 since @code{g77} is known to not work well for such cases (to be
1583 fixed in Version 0.6---@pxref{Actual Bugs,,Actual Bugs We Haven't Fixed Yet}).
1584
1585 @item
1586 Lots of new documentation (though work is still needed to put it into
1587 canonical GNU format).
1588
1589 @item
1590 Build @code{libf2c} with @samp{-g0}, not @samp{-g2}, in effect
1591 (by default), to produce
1592 smaller library without lots of debugging clutter.
1593 @end itemize
1594
1595 @heading In 0.5.15:
1596 @itemize @bullet
1597 @item
1598 Fix bad code generation involving @samp{X**I} and temporary, internal variables
1599 generated by @code{g77} and the back end (such as for @code{DO} loops).
1600
1601 @item
1602 Fix crash given @samp{CHARACTER A;DATA A/.TRUE./}.
1603
1604 @item
1605 Replace crash with diagnostic given @samp{CHARACTER A;DATA A/1.0/}.
1606
1607 @item
1608 Fix crash or other erratic behavior when null character constant
1609 (@samp{''}) is encountered.
1610
1611 @item
1612 Fix crash or other erratic behavior involving diagnosed code.
1613
1614 @item
1615 Fix code generation for external functions returning type @code{REAL} when
1616 the @samp{-ff2c} option is in force (which it is by default) so that
1617 @code{f2c} compatibility is indeed provided.
1618
1619 @item
1620 Disallow @samp{COMMON I(10)} if @samp{I} has previously been specified
1621 with an array declarator.
1622
1623 @item
1624 New @samp{-ffixed-line-length-@var{n}} option, where @var{n} is the
1625 maximum length
1626 of a typical fixed-form line, defaulting to 72 columns, such
1627 that characters beyond column @var{n} are ignored, or @var{n} is @samp{none},
1628 meaning no characters are ignored.
1629 does not affect lines
1630 with @samp{&} in column 1, which are always processed as if
1631 @samp{-ffixed-line-length-none} was in effect.
1632
1633 @item
1634 No longer generate better code for some kinds of array references,
1635 as @code{gcc} back end is to be fixed to do this even better, and it
1636 turned out to slow down some code in some cases after all.
1637
1638 @item
1639 In @code{COMMON} and @code{EQUIVALENCE} areas with any members given initial
1640 values (e.g. via @code{DATA}), uninitialized members now always
1641 initialized to binary zeros (though this is not required by
1642 the standard, and might not be done in future versions
1643 of @code{g77}).
1644 Previously, in some @code{COMMON}/@code{EQUIVALENCE} areas
1645 (essentially those with members of more than one type), the
1646 uninitialized members were initialized to spaces, to
1647 cater to @code{CHARACTER} types, but it seems no existing code expects
1648 that, while much existing code expects binary zeros.
1649 @end itemize
1650
1651 @heading In 0.5.14:
1652 @itemize @bullet
1653 @item
1654 Don't emit bad code when low bound of adjustable array is nonconstant
1655 and thus might vary as an expression at run time.
1656
1657 @item
1658 Emit correct code for calculation of number of trips in @code{DO} loops
1659 for cases
1660 where the loop should not execute at all.
1661 (This bug affected cases
1662 where the difference between the begin and end values was less
1663 than the step count, though probably not for floating-point cases.)
1664
1665 @item
1666 Fix crash when extra parentheses surround item in
1667 @code{DATA} implied-@code{DO} list.
1668
1669 @item
1670 Fix crash over minor internal inconsistencies in handling diagnostics,
1671 just substitute dummy strings where necessary.
1672
1673 @item
1674 Fix crash on some systems when compiling call to @code{MVBITS()} intrinsic.
1675
1676 @item
1677 Fix crash on array assignment @samp{TYPE@var{ddd}(@dots{})=@dots{}}, where @var{ddd}
1678 is a string of one or more digits.
1679
1680 @item
1681 Fix crash on @code{DCMPLX()} with a single @code{INTEGER} argument.
1682
1683 @item
1684 Fix various crashes involving code with diagnosed errors.
1685
1686 @item
1687 Support @samp{-I} option for @code{INCLUDE} statement, plus @code{gcc}'s
1688 @file{header.gcc} facility for handling systems like MS-DOS.
1689
1690 @item
1691 Allow @code{INCLUDE} statement to be continued across multiple lines,
1692 even allow it to coexist with other statements on the same line.
1693
1694 @item
1695 Incorporate Bellcore fixes to @code{libf2c} through 1995-03-15---this
1696 fixes a bug involving infinite loops reading EOF with empty list-directed
1697 I/O list.
1698
1699 @item
1700 Remove all the @code{g77}-specific auto-configuration scripts, code,
1701 and so on,
1702 except for temporary substitutes for bsearch() and strtoul(), as
1703 too many configure/build problems were reported in these areas.
1704 People will have to fix their systems' problems themselves, or at
1705 least somewhere other than @code{g77}, which expects a working ANSI C
1706 environment (and, for now, a GNU C compiler to compile @code{g77} itself).
1707
1708 @item
1709 Complain if initialized common redeclared as larger in subsequent program
1710 unit.
1711
1712 @item
1713 Warn if blank common initialized, since its size can vary and hence
1714 related warnings that might be helpful won't be seen.
1715
1716 @item
1717 New @samp{-fbackslash} option, on by default, that causes @samp{\}
1718 within @code{CHARACTER}
1719 and Hollerith constants to be interpreted a la GNU C.
1720 Note that
1721 this behavior is somewhat different from @code{f2c}'s, which supports only
1722 a limited subset of backslash (escape) sequences.
1723
1724 @item
1725 Make @samp{-fugly-args} the default.
1726
1727 @item
1728 New @samp{-fugly-init} option, on by default, that allows typeless/Hollerith
1729 to be specified as initial values for variables or named constants
1730 (@code{PARAMETER}), and also allows character<->numeric conversion in
1731 those contexts---turn off via @samp{-fno-ugly-init}.
1732
1733 @item
1734 New @samp{-finit-local-zero} option to initialize
1735 local variables to binary zeros.
1736 This does not affect whether they are @code{SAVE}d, i.e. made
1737 automatic or static.
1738
1739 @item
1740 New @samp{-Wimplicit} option to warn about implicitly typed variables, arrays,
1741 and functions.
1742 (Basically causes all program units to default to @code{IMPLICIT NONE}.)
1743
1744 @item
1745 @samp{-Wall} now implies @samp{-Wuninitialized} as with @code{gcc}
1746 (i.e. unless @samp{-O} not specified, since @samp{-Wuninitialized}
1747 requires @samp{-O}), and implies @samp{-Wunused} as well.
1748
1749 @item
1750 @samp{-Wunused} no longer gives spurious messages for unused
1751 @code{EXTERNAL} names (since they are assumed to refer to block data
1752 program units, to make use of libraries more reliable).
1753
1754 @item
1755 Support @code{%LOC()} and @code{LOC()} of character arguments.
1756
1757 @item
1758 Support null (zero-length) character constants and expressions.
1759
1760 @item
1761 Support @code{f2c}'s @code{IMAG()} generic intrinsic.
1762
1763 @item
1764 Support @code{ICHAR()}, @code{IACHAR()}, and @code{LEN()} of
1765 character expressions that are valid in assignments but
1766 not normally as actual arguments.
1767
1768 @item
1769 Support @code{f2c}-style @samp{&} in column 1 to mean continuation line.
1770
1771 @item
1772 Allow @code{NAMELIST}, @code{EXTERNAL}, @code{INTRINSIC}, and @code{VOLATILE}
1773 in @code{BLOCK DATA}, even though these are not allowed by the standard.
1774
1775 @item
1776 Allow @code{RETURN} in main program unit.
1777
1778 @item
1779 Changes to Hollerith-constant support to obey Appendix C of the
1780 standard:
1781
1782 @itemize --
1783 @item
1784 Now padded on the right with zeros, not spaces.
1785
1786 @item
1787 Hollerith ``format specifications'' in the form of arrays of
1788 non-character allowed.
1789
1790 @item
1791 Warnings issued when non-space truncation occurs when converting
1792 to another type.
1793
1794 @item
1795 When specified as actual argument, now passed
1796 by reference to @code{INTEGER} (padded on right with spaces if constant
1797 too small, otherwise fully intact if constant wider the @code{INTEGER}
1798 type) instead of by value.
1799 @end itemize
1800
1801 @strong{Warning:} @code{f2c} differs on the
1802 interpretation of @samp{CALL FOO(1HX)}, which it treats exactly the
1803 same as @samp{CALL FOO('X')}, but which the standard and @code{g77} treat
1804 as @samp{CALL FOO(%REF('X   '))} (padded with as many spaces as necessary
1805 to widen to @code{INTEGER}), essentially.
1806
1807 @item
1808 Changes and fixes to typeless-constant support:
1809
1810 @itemize --
1811 @item
1812 Now treated as a typeless double-length @code{INTEGER} value.
1813
1814 @item
1815 Warnings issued when overflow occurs.
1816
1817 @item
1818 Padded on the left with zeros when converting
1819 to a larger type.
1820
1821 @item
1822 Should be properly aligned and ordered on
1823 the target machine for whatever type it is turned into.
1824
1825 @item
1826 When specified as actual argument, now passed as reference to
1827 a default @code{INTEGER} constant.
1828 @end itemize
1829
1830 @item
1831 @code{%DESCR()} of a non-@code{CHARACTER} expression now passes a pointer to
1832 the expression plus a length for the expression just as if
1833 it were a @code{CHARACTER} expression.
1834 For example, @samp{CALL FOO(%DESCR(D))}, where
1835 @samp{D} is @code{REAL*8}, is the same as @samp{CALL FOO(D,%VAL(8)))}.
1836
1837 @item
1838 Name of multi-entrypoint master function changed to incorporate
1839 the name of the primary entry point instead of a decimal
1840 value, so the name of the master function for @samp{SUBROUTINE X}
1841 with alternate entry points is now @samp{__g77_masterfun_x}.
1842
1843 @item
1844 Remove redundant message about zero-step-count @code{DO} loops.
1845
1846 @item
1847 Clean up diagnostic messages, shortening many of them.
1848
1849 @item
1850 Fix typo in @code{g77} man page.
1851
1852 @item
1853 Clarify implications of constant-handling bugs in @file{f/BUGS}.
1854
1855 @item
1856 Generate better code for @samp{**} operator with a right-hand operand of
1857 type @code{INTEGER}.
1858
1859 @item
1860 Generate better code for @code{SQRT()} and @code{DSQRT()},
1861 also when @samp{-ffast-math}
1862 specified, enable better code generation for @code{SIN()} and @code{COS()}.
1863
1864 @item
1865 Generate better code for some kinds of array references.
1866
1867 @item
1868 Speed up lexing somewhat (this makes the compilation phase noticeably
1869 faster).
1870 @end itemize