FSF GCC merge 02/23/03
[official-gcc.git] / gcc / f / g77.texi
blob3c1fce2a49a0f23c77234391b537e04d959902ab
1 \input texinfo  @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename g77.info
5 @set last-update 2002-04-29
6 @set copyrights-g77 1995,1996,1997,1998,1999,2000,2001,2002
8 @include root.texi
10 @c This tells @include'd files that they're part of the overall G77 doc
11 @c set.  (They might be part of a higher-level doc set too.)
12 @set DOC-G77
14 @c @setfilename useg77.info
15 @c @setfilename portg77.info
16 @c To produce the full manual, use the "g77.info" setfilename, and
17 @c make sure the following do NOT begin with '@c' (and the @clear lines DO)
18 @set INTERNALS
19 @set USING
20 @c To produce a user-only manual, use the "useg77.info" setfilename, and
21 @c make sure the following does NOT begin with '@c':
22 @c @clear INTERNALS
23 @c To produce a porter-only manual, use the "portg77.info" setfilename,
24 @c and make sure the following does NOT begin with '@c':
25 @c @clear USING
27 @ifset INTERNALS
28 @ifset USING
29 @settitle Using and Porting GNU Fortran
30 @end ifset
31 @end ifset
32 @c seems reasonable to assume at least one of INTERNALS or USING is set...
33 @ifclear INTERNALS
34 @settitle Using GNU Fortran
35 @end ifclear
36 @ifclear USING
37 @settitle Porting GNU Fortran
38 @end ifclear
39 @c then again, have some fun
40 @ifclear INTERNALS
41 @ifclear USING
42 @settitle Doing Squat with GNU Fortran
43 @end ifclear
44 @end ifclear
46 @syncodeindex fn cp
47 @syncodeindex vr cp
48 @c %**end of header
50 @c Cause even numbered pages to be printed on the left hand side of
51 @c the page and odd numbered pages to be printed on the right hand
52 @c side of the page.  Using this, you can print on both sides of a
53 @c sheet of paper and have the text on the same part of the sheet.
55 @c The text on right hand pages is pushed towards the right hand
56 @c margin and the text on left hand pages is pushed toward the left
57 @c hand margin.
58 @c (To provide the reverse effect, set bindingoffset to -0.75in.)
60 @c @tex
61 @c \global\bindingoffset=0.75in
62 @c \global\normaloffset =0.75in
63 @c @end tex
65 @copying
66 Copyright @copyright{} @value{copyrights-g77} Free Software Foundation, Inc.
68 Permission is granted to copy, distribute and/or modify this document
69 under the terms of the GNU Free Documentation License, Version 1.2 or
70 any later version published by the Free Software Foundation; with the
71 Invariant Sections being ``GNU General Public License'' and ``Funding
72 Free Software'', the Front-Cover
73 texts being (a) (see below), and with the Back-Cover Texts being (b)
74 (see below).  A copy of the license is included in the section entitled
75 ``GNU Free Documentation License''.
77 (a) The FSF's Front-Cover Text is:
79      A GNU Manual
81 (b) The FSF's Back-Cover Text is:
83      You have freedom to copy and modify this GNU Manual, like GNU
84      software.  Copies published by the Free Software Foundation raise
85      funds for GNU development.
86 @end copying
88 @ifinfo
89 @dircategory Programming
90 @direntry
91 * g77: (g77).                  The GNU Fortran compiler.
92 @end direntry
93 @ifset INTERNALS
94 @ifset USING
95 This file documents the use and the internals of the GNU Fortran (@command{g77})
96 compiler.
97 It corresponds to the @value{which-g77} version of @command{g77}.
98 @end ifset
99 @end ifset
100 @ifclear USING
101 This file documents the internals of the GNU Fortran (@command{g77}) compiler.
102 It corresponds to the @value{which-g77} version of @command{g77}.
103 @end ifclear
104 @ifclear INTERNALS
105 This file documents the use of the GNU Fortran (@command{g77}) compiler.
106 It corresponds to the @value{which-g77} version of @command{g77}.
107 @end ifclear
109 Published by the Free Software Foundation
110 59 Temple Place - Suite 330
111 Boston, MA 02111-1307 USA
113 @insertcopying
114 @end ifinfo
116 Contributed by James Craig Burley (@email{@value{email-burley}}).
117 Inspired by a first pass at translating @file{g77-0.5.16/f/DOC} that
118 was contributed to Craig by David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
120 @setchapternewpage odd
121 @titlepage
122 @ifset INTERNALS
123 @ifset USING
124 @center @titlefont{Using and Porting GNU Fortran}
126 @end ifset
127 @end ifset
128 @ifclear INTERNALS
129 @title Using GNU Fortran
130 @end ifclear
131 @ifclear USING
132 @title Porting GNU Fortran
133 @end ifclear
134 @sp 2
135 @center James Craig Burley
136 @sp 3
137 @center Last updated @value{last-update}
138 @sp 1
139 @center for version @value{which-g77}
140 @page
141 @vskip 0pt plus 1filll
142 For the @value{which-g77} Version*
143 @sp 1
144 Published by the Free Software Foundation @*
145 59 Temple Place - Suite 330@*
146 Boston, MA 02111-1307, USA@*
147 @c Last printed ??ber, 19??.@*
148 @c Printed copies are available for $? each.@*
149 @c ISBN ???
150 @sp 1
151 @insertcopying
152 @end titlepage
153 @summarycontents
154 @contents
155 @page
157 @node Top, Copying,, (DIR)
158 @top Introduction
159 @cindex Introduction
161 @ifset INTERNALS
162 @ifset USING
163 This manual documents how to run, install and port @command{g77},
164 as well as its new features and incompatibilities,
165 and how to report bugs.
166 It corresponds to the @value{which-g77} version of @command{g77}.
167 @end ifset
168 @end ifset
170 @ifclear INTERNALS
171 This manual documents how to run and install @command{g77},
172 as well as its new features and incompatibilities, and how to report
173 bugs.
174 It corresponds to the @value{which-g77} version of @command{g77}.
175 @end ifclear
176 @ifclear USING
177 This manual documents how to port @command{g77},
178 as well as its new features and incompatibilities,
179 and how to report bugs.
180 It corresponds to the @value{which-g77} version of @command{g77}.
181 @end ifclear
183 @ifset DEVELOPMENT
184 @emph{Warning:} This document is still under development,
185 and might not accurately reflect the @command{g77} code base
186 of which it is a part.
187 Efforts are made to keep it somewhat up-to-date,
188 but they are particularly concentrated
189 on any version of this information
190 that is distributed as part of a @emph{released} @command{g77}.
192 In particular, while this document is intended to apply to
193 the @value{which-g77} version of @command{g77},
194 only an official @emph{release} of that version
195 is expected to contain documentation that is
196 most consistent with the @command{g77} product in that version.
197 @end ifset
199 @menu
200 * Copying::         GNU General Public License says
201                     how you can copy and share GNU Fortran.
202 * GNU Free Documentation License::
203                     How you can copy and share this manual.
204 * Contributors::    People who have contributed to GNU Fortran.
205 * Funding::         How to help assure continued work for free software.
206 * Funding GNU Fortran::  How to help assure continued work on GNU Fortran.
207 @ifset USING
208 * Getting Started:: Finding your way around this manual.
209 * What is GNU Fortran?::  How @command{g77} fits into the universe.
210 * G77 and GCC::     You can compile Fortran, C, or other programs.
211 * Invoking G77::    Command options supported by @command{g77}.
212 * News::            News about recent releases of @command{g77}.
213 * Changes::         User-visible changes to recent releases of @command{g77}.
214 * Language::        The GNU Fortran language.
215 * Compiler::        The GNU Fortran compiler.
216 * Other Dialects::  Dialects of Fortran supported by @command{g77}.
217 * Other Compilers:: Fortran compilers other than @command{g77}.
218 * Other Languages:: Languages other than Fortran.
219 * Debugging and Interfacing::  How @command{g77} generates code.
220 * Collected Fortran Wisdom::  How to avoid Trouble.
221 * Trouble::         If you have trouble with GNU Fortran.
222 * Open Questions::  Things we'd like to know.
223 * Bugs::            How, why, and where to report bugs.
224 * Service::         How to find suppliers of support for GNU Fortran.
225 @end ifset
226 @ifset INTERNALS
227 * Adding Options::  Guidance on teaching @command{g77} about new options.
228 * Projects::        Projects for @command{g77} internals hackers.
229 * Front End::       Design and implementation of the @command{g77} front end.
230 @end ifset
232 * M: Diagnostics.   Diagnostics produced by @command{g77}.
234 * Keyword Index::   Index of concepts and symbol names.
235 @end menu
236 @c yes, the "M: " @emph{is} intentional -- bad.def references it (CMPAMBIG)!
238 @include gpl.texi
240 @include fdl.texi
242 @node Contributors
243 @unnumbered Contributors to GNU Fortran
244 @cindex contributors
245 @cindex credits
247 In addition to James Craig Burley, who wrote the front end,
248 many people have helped create and improve GNU Fortran.
250 @itemize @bullet
251 @item
252 The packaging and compiler portions of GNU Fortran are based largely
253 on the GNU CC compiler.
254 @xref{Contributors,,Contributors to GCC,gcc,Using the GNU Compiler
255 Collection (GCC)},
256 for more information.
258 @item
259 The run-time library used by GNU Fortran is a repackaged version
260 of the @code{libf2c} library (combined from the @code{libF77} and
261 @code{libI77} libraries) provided as part of @command{f2c}, available for
262 free from @code{netlib} sites on the Internet.
264 @item
265 Cygnus Support and The Free Software Foundation contributed
266 significant money and/or equipment to Craig's efforts.
268 @item
269 The following individuals served as alpha testers prior to @command{g77}'s
270 public release.  This work consisted of testing, researching, sometimes
271 debugging, and occasionally providing small amounts of code and fixes
272 for @command{g77}, plus offering plenty of helpful advice to Craig:
274 @itemize @w{}
275 @item
276 Jonathan Corbet
277 @item
278 Dr.@: Mark Fernyhough
279 @item
280 Takafumi Hayashi (The University of Aizu)---@email{takafumi@@u-aizu.ac.jp}
281 @item
282 Kate Hedstrom
283 @item
284 Michel Kern (INRIA and Rice University)---@email{Michel.Kern@@inria.fr}
285 @item
286 Dr.@: A. O. V. Le Blanc
287 @item
288 Dave Love
289 @item
290 Rick Lutowski
291 @item
292 Toon Moene
293 @item
294 Rick Niles
295 @item
296 Derk Reefman
297 @item
298 Wayne K. Schroll
299 @item
300 Bill Thorson
301 @item
302 Pedro A. M. Vazquez
303 @item
304 Ian Watson
305 @end itemize
307 @item
308 Dave Love (@email{d.love@@dl.ac.uk})
309 wrote the libU77 part of the run-time library.
311 @item
312 Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
313 provided the patch to add rudimentary support
314 for @code{INTEGER*1}, @code{INTEGER*2}, and
315 @code{LOGICAL*1}.
316 This inspired Craig to add further support,
317 even though the resulting support
318 would still be incomplete.
320 @item
321 David Ronis (@email{ronis@@onsager.chem.mcgill.ca}) inspired
322 and encouraged Craig to rewrite the documentation in texinfo
323 format by contributing a first pass at a translation of the
324 old @file{g77-0.5.16/f/DOC} file.
326 @item
327 Toon Moene (@email{toon@@moene.indiv.nluug.nl}) performed
328 some analysis of generated code as part of an overall project
329 to improve @command{g77} code generation to at least be as good
330 as @command{f2c} used in conjunction with @command{gcc}.
331 So far, this has resulted in the three, somewhat
332 experimental, options added by @command{g77} to the @command{gcc}
333 compiler and its back end.
335 (These, in turn, had made their way into the @code{egcs}
336 version of the compiler, and do not exist in @command{gcc}
337 version 2.8 or versions of @command{g77} based on that version
338 of @command{gcc}.)
340 @item
341 John Carr (@email{jfc@@mit.edu}) wrote the alias analysis improvements.
343 @item
344 Thanks to Mary Cortani and the staff at Craftwork Solutions
345 (@email{support@@craftwork.com}) for all of their support.
347 @item
348 Many other individuals have helped debug, test, and improve @command{g77}
349 over the past several years, and undoubtedly more people
350 will be doing so in the future.
351 If you have done so, and would like
352 to see your name listed in the above list, please ask!
353 The default is that people wish to remain anonymous.
354 @end itemize
356 @include funding.texi
358 @node Funding GNU Fortran
359 @chapter Funding GNU Fortran
360 @cindex funding improvements
361 @cindex improvements, funding
363 James Craig Burley (@email{@value{email-burley}}), the original author
364 of @command{g77}, stopped working on it in September 1999
365 (He has a web page at @uref{@value{www-burley}}.)
367 GNU Fortran is currently maintained by Toon Moene
368 (@email{toon@@moene.indiv.nluug.nl}), with the help of countless other
369 volunteers.
371 As with other GNU software, funding is important because it can pay for
372 needed equipment, personnel, and so on.
374 @cindex FSF, funding the
375 @cindex funding the FSF
376 The FSF provides information on the best way to fund ongoing
377 development of GNU software (such as GNU Fortran) in documents
378 such as the ``GNUS Bulletin''.
379 Email @email{gnu@@gnu.org} for information on funding the FSF.
381 Another important way to support work on GNU Fortran is to volunteer
382 to help out.
384 Email @email{@value{email-general}} to volunteer for this work.
386 However, we strongly expect that there will never be a version 0.6
387 of @command{g77}.  Work on this compiler has stopped as of the release
388 of GCC 3.1, except for bug fixing.  @command{g77} will be succeeded by
389 @command{g95} - see @uref{http://g95.sourceforge.net}.
391 @xref{Funding,,Funding Free Software}, for more information.
393 @node Getting Started
394 @chapter Getting Started
395 @cindex getting started
396 @cindex new users
397 @cindex newbies
398 @cindex beginners
400 If you don't need help getting started reading the portions
401 of this manual that are most important to you, you should skip
402 this portion of the manual.
404 If you are new to compilers, especially Fortran compilers, or
405 new to how compilers are structured under UNIX and UNIX-like
406 systems, you'll want to see @ref{What is GNU Fortran?}.
408 If you are new to GNU compilers, or have used only one GNU
409 compiler in the past and not had to delve into how it lets
410 you manage various versions and configurations of @command{gcc},
411 you should see @ref{G77 and GCC}.
413 Everyone except experienced @command{g77} users should
414 see @ref{Invoking G77}.
416 If you're acquainted with previous versions of @command{g77},
417 you should see @ref{News,,News About GNU Fortran}.
418 Further, if you've actually used previous versions of @command{g77},
419 especially if you've written or modified Fortran code to
420 be compiled by previous versions of @command{g77}, you
421 should see @ref{Changes}.
423 If you intend to write or otherwise compile code that is
424 not already strictly conforming ANSI FORTRAN 77---and this
425 is probably everyone---you should see @ref{Language}.
427 If you run into trouble getting Fortran code to compile,
428 link, run, or work properly, you might find answers
429 if you see @ref{Debugging and Interfacing},
430 see @ref{Collected Fortran Wisdom},
431 and see @ref{Trouble}.
432 You might also find that the problems you are encountering
433 are bugs in @command{g77}---see @ref{Bugs}, for information on
434 reporting them, after reading the other material.
436 If you need further help with @command{g77}, or with
437 freely redistributable software in general,
438 see @ref{Service}.
440 If you would like to help the @command{g77} project,
441 see @ref{Funding GNU Fortran}, for information on
442 helping financially, and see @ref{Projects}, for information
443 on helping in other ways.
445 If you're generally curious about the future of
446 @command{g77}, see @ref{Projects}.
447 If you're curious about its past,
448 see @ref{Contributors},
449 and see @ref{Funding GNU Fortran}.
451 To see a few of the questions maintainers of @command{g77} have,
452 and that you might be able to answer,
453 see @ref{Open Questions}.
455 @ifset USING
456 @node What is GNU Fortran?
457 @chapter What is GNU Fortran?
458 @cindex concepts, basic
459 @cindex basic concepts
461 GNU Fortran, or @command{g77}, is designed initially as a free replacement
462 for, or alternative to, the UNIX @command{f77} command.
463 (Similarly, @command{gcc} is designed as a replacement
464 for the UNIX @command{cc} command.)
466 @command{g77} also is designed to fit in well with the other
467 fine GNU compilers and tools.
469 Sometimes these design goals conflict---in such cases, resolution
470 often is made in favor of fitting in well with Project GNU.
471 These cases are usually identified in the appropriate
472 sections of this manual.
474 @cindex compilers
475 As compilers, @command{g77}, @command{gcc}, and @command{f77}
476 share the following characteristics:
478 @itemize @bullet
479 @cindex source code
480 @cindex file, source
481 @cindex code, source
482 @cindex source file
483 @item
484 They read a user's program, stored in a file and
485 containing instructions written in the appropriate
486 language (Fortran, C, and so on).
487 This file contains @dfn{source code}.
489 @cindex translation of user programs
490 @cindex machine code
491 @cindex code, machine
492 @cindex mistakes
493 @item
494 They translate the user's program into instructions
495 a computer can carry out more quickly than it takes
496 to translate the instructions in the first place.
497 These instructions are called @dfn{machine code}---code
498 designed to be efficiently translated and processed
499 by a machine such as a computer.
500 Humans usually aren't as good writing machine code
501 as they are at writing Fortran or C, because
502 it is easy to make tiny mistakes writing machine code.
503 When writing Fortran or C, it is easy
504 to make big mistakes.
506 @cindex debugger
507 @cindex bugs, finding
508 @cindex @command{gdb}, command
509 @cindex commands, @command{gdb}
510 @item
511 They provide information in the generated machine code
512 that can make it easier to find bugs in the program
513 (using a debugging tool, called a @dfn{debugger},
514 such as @command{gdb}).
516 @cindex libraries
517 @cindex linking
518 @cindex @command{ld} command
519 @cindex commands, @command{ld}
520 @item
521 They locate and gather machine code already generated
522 to perform actions requested by statements in
523 the user's program.
524 This machine code is organized
525 into @dfn{libraries} and is located and gathered
526 during the @dfn{link} phase of the compilation
527 process.
528 (Linking often is thought of as a separate
529 step, because it can be directly invoked via the
530 @command{ld} command.
531 However, the @command{g77} and @command{gcc}
532 commands, as with most compiler commands, automatically
533 perform the linking step by calling on @command{ld}
534 directly, unless asked to not do so by the user.)
536 @cindex language, incorrect use of
537 @cindex incorrect use of language
538 @item
539 They attempt to diagnose cases where the user's
540 program contains incorrect usages of the language.
541 The @dfn{diagnostics} produced by the compiler
542 indicate the problem and the location in the user's
543 source file where the problem was first noticed.
544 The user can use this information to locate and
545 fix the problem.
546 @cindex diagnostics, incorrect
547 @cindex incorrect diagnostics
548 @cindex error messages, incorrect
549 @cindex incorrect error messages
550 (Sometimes an incorrect usage
551 of the language leads to a situation where the
552 compiler can no longer make any sense of what
553 follows---while a human might be able to---and
554 thus ends up complaining about many ``problems''
555 it encounters that, in fact, stem from just one
556 problem, usually the first one reported.)
558 @cindex warnings
559 @cindex questionable instructions
560 @item
561 They attempt to diagnose cases where the user's
562 program contains a correct usage of the language,
563 but instructs the computer to do something questionable.
564 These diagnostics often are in the form of @dfn{warnings},
565 instead of the @dfn{errors} that indicate incorrect
566 usage of the language.
567 @end itemize
569 How these actions are performed is generally under the
570 control of the user.
571 Using command-line options, the user can specify
572 how persnickety the compiler is to be regarding
573 the program (whether to diagnose questionable usage
574 of the language), how much time to spend making
575 the generated machine code run faster, and so on.
577 @cindex components of @command{g77}
578 @cindex @command{g77}, components of
579 @command{g77} consists of several components:
581 @cindex @command{gcc}, command
582 @cindex commands, @command{gcc}
583 @itemize @bullet
584 @item
585 A modified version of the @command{gcc} command, which also might be
586 installed as the system's @command{cc} command.
587 (In many cases, @command{cc} refers to the
588 system's ``native'' C compiler, which
589 might be a non-GNU compiler, or an older version
590 of @command{gcc} considered more stable or that is
591 used to build the operating system kernel.)
593 @cindex @command{g77}, command
594 @cindex commands, @command{g77}
595 @item
596 The @command{g77} command itself, which also might be installed as the
597 system's @command{f77} command.
599 @cindex libg2c library
600 @cindex libf2c library
601 @cindex libraries, libf2c
602 @cindex libraries, libg2c
603 @cindex run-time, library
604 @item
605 The @code{libg2c} run-time library.
606 This library contains the machine code needed to support
607 capabilities of the Fortran language that are not directly
608 provided by the machine code generated by the @command{g77}
609 compilation phase.
611 @code{libg2c} is just the unique name @command{g77} gives
612 to its version of @code{libf2c} to distinguish it from
613 any copy of @code{libf2c} installed from @command{f2c}
614 (or versions of @command{g77} that built @code{libf2c} under
615 that same name)
616 on the system.
618 The maintainer of @code{libf2c} currently is
619 @email{dmg@@bell-labs.com}.
621 @cindex @code{f771}, program
622 @cindex programs, @code{f771}
623 @cindex assembler
624 @cindex @command{as} command
625 @cindex commands, @command{as}
626 @cindex assembly code
627 @cindex code, assembly
628 @item
629 The compiler itself, internally named @code{f771}.
631 Note that @code{f771} does not generate machine code directly---it
632 generates @dfn{assembly code} that is a more readable form
633 of machine code, leaving the conversion to actual machine code
634 to an @dfn{assembler}, usually named @command{as}.
635 @end itemize
637 @command{gcc} is often thought of as ``the C compiler'' only,
638 but it does more than that.
639 Based on command-line options and the names given for files
640 on the command line, @command{gcc} determines which actions to perform, including
641 preprocessing, compiling (in a variety of possible languages), assembling,
642 and linking.
644 @cindex driver, gcc command as
645 @cindex @command{gcc}, command as driver
646 @cindex executable file
647 @cindex files, executable
648 @cindex cc1 program
649 @cindex programs, cc1
650 @cindex preprocessor
651 @cindex cpp program
652 @cindex programs, cpp
653 For example, the command @samp{gcc foo.c} @dfn{drives} the file
654 @file{foo.c} through the preprocessor @command{cpp}, then
655 the C compiler (internally named
656 @code{cc1}), then the assembler (usually @command{as}), then the linker
657 (@command{ld}), producing an executable program named @file{a.out} (on
658 UNIX systems).
660 @cindex cc1plus program
661 @cindex programs, cc1plus
662 As another example, the command @samp{gcc foo.cc} would do much the same as
663 @samp{gcc foo.c}, but instead of using the C compiler named @code{cc1},
664 @command{gcc} would use the C++ compiler (named @code{cc1plus}).
666 @cindex @code{f771}, program
667 @cindex programs, @code{f771}
668 In a GNU Fortran installation, @command{gcc} recognizes Fortran source
669 files by name just like it does C and C++ source files.
670 It knows to use the Fortran compiler named @code{f771}, instead of
671 @code{cc1} or @code{cc1plus}, to compile Fortran files.
673 @cindex @command{gcc}, not recognizing Fortran source
674 @cindex unrecognized file format
675 @cindex file format not recognized
676 Non-Fortran-related operation of @command{gcc} is generally
677 unaffected by installing the GNU Fortran version of @command{gcc}.
678 However, without the installed version of @command{gcc} being the
679 GNU Fortran version, @command{gcc} will not be able to compile
680 and link Fortran programs---and since @command{g77} uses @command{gcc}
681 to do most of the actual work, neither will @command{g77}!
683 @cindex @command{g77}, command
684 @cindex commands, @command{g77}
685 The @command{g77} command is essentially just a front-end for
686 the @command{gcc} command.
687 Fortran users will normally use @command{g77} instead of @command{gcc},
688 because @command{g77}
689 knows how to specify the libraries needed to link with Fortran programs
690 (@code{libg2c} and @code{lm}).
691 @command{g77} can still compile and link programs and
692 source files written in other languages, just like @command{gcc}.
694 @cindex printing version information
695 @cindex version information, printing
696 The command @samp{g77 -v} is a quick
697 way to display lots of version information for the various programs
698 used to compile a typical preprocessed Fortran source file---this
699 produces much more output than @samp{gcc -v} currently does.
700 (If it produces an error message near the end of the output---diagnostics
701 from the linker, usually @command{ld}---you might
702 have an out-of-date @code{libf2c} that improperly handles
703 complex arithmetic.)
704 In the output of this command, the line beginning @samp{GNU Fortran Front
705 End} identifies the version number of GNU Fortran; immediately
706 preceding that line is a line identifying the version of @command{gcc}
707 with which that version of @command{g77} was built.
709 @cindex libf2c library
710 @cindex libraries, libf2c
711 The @code{libf2c} library is distributed with GNU Fortran for
712 the convenience of its users, but is not part of GNU Fortran.
713 It contains the procedures
714 needed by Fortran programs while they are running.
716 @cindex in-line code
717 @cindex code, in-line
718 For example, while code generated by @command{g77} is likely
719 to do additions, subtractions, and multiplications @dfn{in line}---in
720 the actual compiled code---it is not likely to do trigonometric
721 functions this way.
723 Instead, operations like trigonometric
724 functions are compiled by the @code{f771} compiler
725 (invoked by @command{g77} when compiling Fortran code) into machine
726 code that, when run, calls on functions in @code{libg2c}, so
727 @code{libg2c} must be linked with almost every useful program
728 having any component compiled by GNU Fortran.
729 (As mentioned above, the @command{g77} command takes
730 care of all this for you.)
732 The @code{f771} program represents most of what is unique to GNU Fortran.
733 While much of the @code{libg2c} component comes from
734 the @code{libf2c} component of @command{f2c},
735 a free Fortran-to-C converter distributed by Bellcore (AT&T),
736 plus @code{libU77}, provided by Dave Love,
737 and the @command{g77} command is just a small front-end to @command{gcc},
738 @code{f771} is a combination of two rather
739 large chunks of code.
741 @cindex GNU Back End (GBE)
742 @cindex GBE
743 @cindex @command{gcc}, back end
744 @cindex back end, gcc
745 @cindex code generator
746 One chunk is the so-called @dfn{GNU Back End}, or GBE,
747 which knows how to generate fast code for a wide variety of processors.
748 The same GBE is used by the C, C++, and Fortran compiler programs @code{cc1},
749 @code{cc1plus}, and @code{f771}, plus others.
750 Often the GBE is referred to as the ``gcc back end'' or
751 even just ``gcc''---in this manual, the term GBE is used
752 whenever the distinction is important.
754 @cindex GNU Fortran Front End (FFE)
755 @cindex FFE
756 @cindex @command{g77}, front end
757 @cindex front end, @command{g77}
758 The other chunk of @code{f771} is the
759 majority of what is unique about GNU Fortran---the code that knows how
760 to interpret Fortran programs to determine what they are intending to
761 do, and then communicate that knowledge to the GBE for actual compilation
762 of those programs.
763 This chunk is called the @dfn{Fortran Front End} (FFE).
764 The @code{cc1} and @code{cc1plus} programs have their own front ends,
765 for the C and C++ languages, respectively.
766 These fronts ends are responsible for diagnosing
767 incorrect usage of their respective languages by the
768 programs the process, and are responsible for most of
769 the warnings about questionable constructs as well.
770 (The GBE handles producing some warnings, like those
771 concerning possible references to undefined variables.)
773 Because so much is shared among the compilers for various languages,
774 much of the behavior and many of the user-selectable options for these
775 compilers are similar.
776 For example, diagnostics (error messages and
777 warnings) are similar in appearance; command-line
778 options like @option{-Wall} have generally similar effects; and the quality
779 of generated code (in terms of speed and size) is roughly similar
780 (since that work is done by the shared GBE).
782 @node G77 and GCC
783 @chapter Compile Fortran, C, or Other Programs
784 @cindex compiling programs
785 @cindex programs, compiling
787 @cindex @command{gcc}, command
788 @cindex commands, @command{gcc}
789 A GNU Fortran installation includes a modified version of the @command{gcc}
790 command.
792 In a non-Fortran installation, @command{gcc} recognizes C, C++,
793 and Objective-C source files.
795 In a GNU Fortran installation, @command{gcc} also recognizes Fortran source
796 files and accepts Fortran-specific command-line options, plus some
797 command-line options that are designed to cater to Fortran users
798 but apply to other languages as well.
800 @xref{G++ and GCC,,Compile C; C++; Objective-C; Ada; Fortran;
801 or Java,gcc,Using the GNU Compiler Collection (GCC)},
802 for information on the way different languages are handled
803 by the GNU CC compiler (@command{gcc}).
805 @cindex @command{g77}, command
806 @cindex commands, @command{g77}
807 Also provided as part of GNU Fortran is the @command{g77} command.
808 The @command{g77} command is designed to make compiling and linking Fortran
809 programs somewhat easier than when using the @command{gcc} command for
810 these tasks.
811 It does this by analyzing the command line somewhat and changing it
812 appropriately before submitting it to the @command{gcc} command.
814 @cindex -v option
815 @cindex @command{g77} options, -v
816 @cindex options, -v
817 Use the @option{-v} option with @command{g77}
818 to see what is going on---the first line of output is the invocation
819 of the @command{gcc} command.
821 @include invoke.texi
823 @include news.texi
825 @set USERVISONLY
826 @include news.texi
827 @clear USERVISONLY
829 @node Language
830 @chapter The GNU Fortran Language
832 @cindex standard, ANSI FORTRAN 77
833 @cindex ANSI FORTRAN 77 standard
834 @cindex reference works
835 GNU Fortran supports a variety of extensions to, and dialects
836 of, the Fortran language.
837 Its primary base is the ANSI FORTRAN 77 standard, currently available on
838 the network at
839 @uref{http://www.fortran.com/fortran/F77_std/rjcnf0001.html}
840 or as monolithic text at
841 @uref{http://www.fortran.com/fortran/F77_std/f77_std.html}.
842 It offers some extensions that are popular among users
843 of UNIX @command{f77} and @command{f2c} compilers, some that
844 are popular among users of other compilers (such as Digital
845 products), some that are popular among users of the
846 newer Fortran 90 standard, and some that are introduced
847 by GNU Fortran.
849 @cindex textbooks
850 (If you need a text on Fortran,
851 a few freely available electronic references have pointers from
852 @uref{http://www.fortran.com/fortran/Books/}.  There is a `cooperative
853 net project', @cite{User Notes on Fortran Programming} at
854 @uref{ftp://vms.huji.ac.il/fortran/} and mirrors elsewhere; some of this
855 material might not apply specifically to @command{g77}.)
857 Part of what defines a particular implementation of a Fortran
858 system, such as @command{g77}, is the particular characteristics
859 of how it supports types, constants, and so on.
860 Much of this is left up to the implementation by the various
861 Fortran standards and accepted practice in the industry.
863 The GNU Fortran @emph{language} is described below.
864 Much of the material is organized along the same lines
865 as the ANSI FORTRAN 77 standard itself.
867 @xref{Other Dialects}, for information on features @command{g77} supports
868 that are not part of the GNU Fortran language.
870 @emph{Note}: This portion of the documentation definitely needs a lot
871 of work!
873 @menu
874 Relationship to the ANSI FORTRAN 77 standard:
875 * Direction of Language Development::  Where GNU Fortran is headed.
876 * Standard Support::  Degree of support for the standard.
878 Extensions to the ANSI FORTRAN 77 standard:
879 * Conformance::
880 * Notation Used::
881 * Terms and Concepts::
882 * Characters Lines Sequence::
883 * Data Types and Constants::
884 * Expressions::
885 * Specification Statements::
886 * Control Statements::
887 * Functions and Subroutines::
888 * Scope and Classes of Names::
889 * I/O::
890 * Fortran 90 Features::
891 @end menu
893 @node Direction of Language Development
894 @section Direction of Language Development
895 @cindex direction of language development
896 @cindex features, language
897 @cindex language, features
899 The purpose of the following description of the GNU Fortran
900 language is to promote wide portability of GNU Fortran programs.
902 GNU Fortran is an evolving language, due to the
903 fact that @command{g77} itself is in beta test.
904 Some current features of the language might later
905 be redefined as dialects of Fortran supported by @command{g77}
906 when better ways to express these features are added to @command{g77},
907 for example.
908 Such features would still be supported by
909 @command{g77}, but would be available only when
910 one or more command-line options were used.
912 The GNU Fortran @emph{language} is distinct from the
913 GNU Fortran @emph{compilation system} (@command{g77}).
915 For example, @command{g77} supports various dialects of
916 Fortran---in a sense, these are languages other than
917 GNU Fortran---though its primary
918 purpose is to support the GNU Fortran language, which also is
919 described in its documentation and by its implementation.
921 On the other hand, non-GNU compilers might offer
922 support for the GNU Fortran language, and are encouraged
923 to do so.
925 Currently, the GNU Fortran language is a fairly fuzzy object.
926 It represents something of a cross between what @command{g77} accepts
927 when compiling using the prevailing defaults and what this
928 document describes as being part of the language.
930 Future versions of @command{g77} are expected to clarify the
931 definition of the language in the documentation.
932 Often, this will mean adding new features to the language, in the form
933 of both new documentation and new support in @command{g77}.
934 However, it might occasionally mean removing a feature
935 from the language itself to ``dialect'' status.
936 In such a case, the documentation would be adjusted
937 to reflect the change, and @command{g77} itself would likely be changed
938 to require one or more command-line options to continue supporting
939 the feature.
941 The development of the GNU Fortran language is intended to strike
942 a balance between:
944 @itemize @bullet
945 @item
946 Serving as a mostly-upwards-compatible language from the
947 de facto UNIX Fortran dialect as supported by @command{f77}.
949 @item
950 Offering new, well-designed language features.
951 Attributes of such features include
952 not making existing code any harder to read
953 (for those who might be unaware that the new
954 features are not in use) and
955 not making state-of-the-art
956 compilers take longer to issue diagnostics,
957 among others.
959 @item
960 Supporting existing, well-written code without gratuitously
961 rejecting non-standard constructs, regardless of the origin
962 of the code (its dialect).
964 @item
965 Offering default behavior and command-line options to reduce
966 and, where reasonable, eliminate the need for programmers to make
967 any modifications to code that already works in existing
968 production environments.
970 @item
971 Diagnosing constructs that have different meanings in different
972 systems, languages, and dialects, while offering clear,
973 less ambiguous ways to express each of the different meanings
974 so programmers can change their code appropriately.
975 @end itemize
977 One of the biggest practical challenges for the developers of the
978 GNU Fortran language is meeting the sometimes contradictory demands
979 of the above items.
981 For example, a feature might be widely used in one popular environment,
982 but the exact same code that utilizes that feature might not work
983 as expected---perhaps it might mean something entirely different---in
984 another popular environment.
986 Traditionally, Fortran compilers---even portable ones---have solved this
987 problem by simply offering the appropriate feature to users of
988 the respective systems.
989 This approach treats users of various Fortran systems and dialects
990 as remote ``islands'', or camps, of programmers, and assume that these
991 camps rarely come into contact with each other (or,
992 especially, with each other's code).
994 Project GNU takes a radically different approach to software and language
995 design, in that it assumes that users of GNU software do not necessarily
996 care what kind of underlying system they are using, regardless
997 of whether they are using software (at the user-interface
998 level) or writing it (for example, writing Fortran or C code).
1000 As such, GNU users rarely need consider just what kind of underlying
1001 hardware (or, in many cases, operating system) they are using at any
1002 particular time.
1003 They can use and write software designed for a general-purpose,
1004 widely portable, heterogeneous environment---the GNU environment.
1006 In line with this philosophy, GNU Fortran must evolve into a product
1007 that is widely ported and portable not only in the sense that it can
1008 be successfully built, installed, and run by users, but in the larger
1009 sense that its users can use it in the same way, and expect largely the
1010 same behaviors from it, regardless of the kind of system they are using
1011 at any particular time.
1013 This approach constrains the solutions @command{g77} can use to resolve
1014 conflicts between various camps of Fortran users.
1015 If these two camps disagree about what a particular construct should
1016 mean, @command{g77} cannot simply be changed to treat that particular construct as
1017 having one meaning without comment (such as a warning), lest the users
1018 expecting it to have the other meaning are unpleasantly surprised that
1019 their code misbehaves when executed.
1021 The use of the ASCII backslash character in character constants is
1022 an excellent (and still somewhat unresolved) example of this kind of
1023 controversy.
1024 @xref{Backslash in Constants}.
1025 Other examples are likely to arise in the future, as @command{g77} developers
1026 strive to improve its ability to accept an ever-wider variety of existing
1027 Fortran code without requiring significant modifications to said code.
1029 Development of GNU Fortran is further constrained by the desire
1030 to avoid requiring programmers to change their code.
1031 This is important because it allows programmers, administrators,
1032 and others to more faithfully evaluate and validate @command{g77}
1033 (as an overall product and as new versions are distributed)
1034 without having to support multiple versions of their programs
1035 so that they continue to work the same way on their existing
1036 systems (non-GNU perhaps, but possibly also earlier versions
1037 of @command{g77}).
1039 @node Standard Support
1040 @section ANSI FORTRAN 77 Standard Support
1041 @cindex ANSI FORTRAN 77 support
1042 @cindex standard, support for
1043 @cindex support, FORTRAN 77
1044 @cindex compatibility, FORTRAN 77
1045 @cindex FORTRAN 77 compatibility
1047 GNU Fortran supports ANSI FORTRAN 77 with the following caveats.
1048 In summary, the only ANSI FORTRAN 77 features @command{g77} doesn't
1049 support are those that are probably rarely used in actual code,
1050 some of which are explicitly disallowed by the Fortran 90 standard.
1052 @menu
1053 * No Passing External Assumed-length::  CHAR*(*) CFUNC restriction.
1054 * No Passing Dummy Assumed-length::     CHAR*(*) CFUNC restriction.
1055 * No Pathological Implied-DO::          No @samp{((@dots{}, I=@dots{}), I=@dots{})}.
1056 * No Useless Implied-DO::               No @samp{(A, I=1, 1)}.
1057 @end menu
1059 @node No Passing External Assumed-length
1060 @subsection No Passing External Assumed-length
1062 @command{g77} disallows passing of an external procedure
1063 as an actual argument if the procedure's
1064 type is declared @code{CHARACTER*(*)}.  For example:
1066 @example
1067 CHARACTER*(*) CFUNC
1068 EXTERNAL CFUNC
1069 CALL FOO(CFUNC)
1071 @end example
1073 @noindent
1074 It isn't clear whether the standard considers this conforming.
1076 @node No Passing Dummy Assumed-length
1077 @subsection No Passing Dummy Assumed-length
1079 @command{g77} disallows passing of a dummy procedure
1080 as an actual argument if the procedure's
1081 type is declared @code{CHARACTER*(*)}.
1083 @example
1084 SUBROUTINE BAR(CFUNC)
1085 CHARACTER*(*) CFUNC
1086 EXTERNAL CFUNC
1087 CALL FOO(CFUNC)
1089 @end example
1091 @noindent
1092 It isn't clear whether the standard considers this conforming.
1094 @node No Pathological Implied-DO
1095 @subsection No Pathological Implied-DO
1097 The @code{DO} variable for an implied-@code{DO} construct in a
1098 @code{DATA} statement may not be used as the @code{DO} variable
1099 for an outer implied-@code{DO} construct.  For example, this
1100 fragment is disallowed by @command{g77}:
1102 @smallexample
1103 DATA ((A(I, I), I= 1, 10), I= 1, 10) /@dots{}/
1104 @end smallexample
1106 @noindent
1107 This also is disallowed by Fortran 90, as it offers no additional
1108 capabilities and would have a variety of possible meanings.
1110 Note that it is @emph{very} unlikely that any production Fortran code
1111 tries to use this unsupported construct.
1113 @node No Useless Implied-DO
1114 @subsection No Useless Implied-DO
1116 An array element initializer in an implied-@code{DO} construct in a
1117 @code{DATA} statement must contain at least one reference to the @code{DO}
1118 variables of each outer implied-@code{DO} construct.  For example,
1119 this fragment is disallowed by @command{g77}:
1121 @smallexample
1122 DATA (A, I= 1, 1) /1./
1123 @end smallexample
1125 @noindent
1126 This also is disallowed by Fortran 90, as FORTRAN 77's more permissive
1127 requirements offer no additional capabilities.
1128 However, @command{g77} doesn't necessarily diagnose all cases
1129 where this requirement is not met.
1131 Note that it is @emph{very} unlikely that any production Fortran code
1132 tries to use this unsupported construct.
1134 @node Conformance
1135 @section Conformance
1137 (The following information augments or overrides the information in
1138 Section 1.4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
1139 language.
1140 Chapter 1 of that document otherwise serves as the basis
1141 for the relevant aspects of GNU Fortran.)
1143 The definition of the GNU Fortran language is akin to that of
1144 the ANSI FORTRAN 77 language in that it does not generally require
1145 conforming implementations to diagnose cases where programs do
1146 not conform to the language.
1148 However, @command{g77} as a compiler is being developed in a way that
1149 is intended to enable it to diagnose such cases in an easy-to-understand
1150 manner.
1152 A program that conforms to the GNU Fortran language should, when
1153 compiled, linked, and executed using a properly installed @command{g77}
1154 system, perform as described by the GNU Fortran language definition.
1155 Reasons for different behavior include, among others:
1157 @itemize @bullet
1158 @item
1159 Use of resources (memory---heap, stack, and so on; disk space; CPU
1160 time; etc.) exceeds those of the system.
1162 @item
1163 Range and/or precision of calculations required by the program
1164 exceeds that of the system.
1166 @item
1167 Excessive reliance on behaviors that are system-dependent
1168 (non-portable Fortran code).
1170 @item
1171 Bugs in the program.
1173 @item
1174 Bug in @command{g77}.
1176 @item
1177 Bugs in the system.
1178 @end itemize
1180 Despite these ``loopholes'', the availability of a clear specification
1181 of the language of programs submitted to @command{g77}, as this document
1182 is intended to provide, is considered an important aspect of providing
1183 a robust, clean, predictable Fortran implementation.
1185 The definition of the GNU Fortran language, while having no special
1186 legal status, can therefore be viewed as a sort of contract, or agreement.
1187 This agreement says, in essence, ``if you write a program in this language,
1188 and run it in an environment (such as a @command{g77} system) that supports
1189 this language, the program should behave in a largely predictable way''.
1191 @node Notation Used
1192 @section Notation Used in This Chapter
1194 (The following information augments or overrides the information in
1195 Section 1.5 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
1196 language.
1197 Chapter 1 of that document otherwise serves as the basis
1198 for the relevant aspects of GNU Fortran.)
1200 In this chapter, ``must'' denotes a requirement, ``may'' denotes permission,
1201 and ``must not'' and ``may not'' denote prohibition.
1202 Terms such as ``might'', ``should'', and ``can'' generally add little or
1203 nothing in the way of weight to the GNU Fortran language itself,
1204 but are used to explain or illustrate the language.
1206 For example:
1208 @display
1209 ``The @code{FROBNITZ} statement must precede all executable
1210 statements in a program unit, and may not specify any dummy
1211 arguments.  It may specify local or common variables and arrays.
1212 Its use should be limited to portions of the program designed to
1213 be non-portable and system-specific, because it might cause the
1214 containing program unit to behave quite differently on different
1215 systems.''
1216 @end display
1218 Insofar as the GNU Fortran language is specified,
1219 the requirements and permissions denoted by the above sample statement
1220 are limited to the placement of the statement and the kinds of
1221 things it may specify.
1222 The rest of the statement---the content regarding non-portable portions
1223 of the program and the differing behavior of program units containing
1224 the @code{FROBNITZ} statement---does not pertain the GNU Fortran
1225 language itself.
1226 That content offers advice and warnings about the @code{FROBNITZ}
1227 statement.
1229 @emph{Remember:} The GNU Fortran language definition specifies
1230 both what constitutes a valid GNU Fortran program and how,
1231 given such a program, a valid GNU Fortran implementation is
1232 to interpret that program.
1234 It is @emph{not} incumbent upon a valid GNU Fortran implementation
1235 to behave in any particular way, any consistent way, or any
1236 predictable way when it is asked to interpret input that is
1237 @emph{not} a valid GNU Fortran program.
1239 Such input is said to have @dfn{undefined} behavior when
1240 interpreted by a valid GNU Fortran implementation, though
1241 an implementation may choose to specify behaviors for some
1242 cases of inputs that are not valid GNU Fortran programs.
1244 Other notation used herein is that of the GNU texinfo format,
1245 which is used to generate printed hardcopy, on-line hypertext
1246 (Info), and on-line HTML versions, all from a single source
1247 document.
1248 This notation is used as follows:
1250 @itemize @bullet
1251 @item
1252 Keywords defined by the GNU Fortran language are shown
1253 in uppercase, as in: @code{COMMON}, @code{INTEGER}, and
1254 @code{BLOCK DATA}.
1256 Note that, in practice, many Fortran programs are written
1257 in lowercase---uppercase is used in this manual as a
1258 means to readily distinguish keywords and sample Fortran-related
1259 text from the prose in this document.
1261 @item
1262 Portions of actual sample program, input, or output text
1263 look like this: @samp{Actual program text}.
1265 Generally, uppercase is used for all Fortran-specific and
1266 Fortran-related text, though this does not always include
1267 literal text within Fortran code.
1269 For example: @samp{PRINT *, 'My name is Bob'}.
1271 @item
1272 A metasyntactic variable---that is, a name used in this document
1273 to serve as a placeholder for whatever text is used by the
1274 user or programmer---appears as shown in the following example:
1276 ``The @code{INTEGER @var{ivar}} statement specifies that
1277 @var{ivar} is a variable or array of type @code{INTEGER}.''
1279 In the above example, any valid text may be substituted for
1280 the metasyntactic variable @var{ivar} to make the statement
1281 apply to a specific instance, as long as the same text is
1282 substituted for @emph{both} occurrences of @var{ivar}.
1284 @item
1285 Ellipses (``@dots{}'') are used to indicate further text that
1286 is either unimportant or expanded upon further, elsewhere.
1288 @item
1289 Names of data types are in the style of Fortran 90, in most
1290 cases.
1292 @xref{Kind Notation}, for information on the relationship
1293 between Fortran 90 nomenclature (such as @code{INTEGER(KIND=1)})
1294 and the more traditional, less portably concise nomenclature
1295 (such as @code{INTEGER*4}).
1296 @end itemize
1298 @node Terms and Concepts
1299 @section Fortran Terms and Concepts
1301 (The following information augments or overrides the information in
1302 Chapter 2 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
1303 language.
1304 Chapter 2 of that document otherwise serves as the basis
1305 for the relevant aspects of GNU Fortran.)
1307 @menu
1308 * Syntactic Items::
1309 * Statements Comments Lines::
1310 * Scope of Names and Labels::
1311 @end menu
1313 @node Syntactic Items
1314 @subsection Syntactic Items
1316 (Corresponds to Section 2.2 of ANSI X3.9-1978 FORTRAN 77.)
1318 @cindex limits, lengths of names
1319 In GNU Fortran, a symbolic name is at least one character long,
1320 and has no arbitrary upper limit on length.
1321 However, names of entities requiring external linkage (such as
1322 external functions, external subroutines, and @code{COMMON} areas)
1323 might be restricted to some arbitrary length by the system.
1324 Such a restriction is no more constrained than that of one
1325 through six characters.
1327 Underscores (@samp{_}) are accepted in symbol names after the first
1328 character (which must be a letter).
1330 @node Statements Comments Lines
1331 @subsection Statements, Comments, and Lines
1333 (Corresponds to Section 2.3 of ANSI X3.9-1978 FORTRAN 77.)
1335 @cindex trailing comment
1336 @cindex comment
1337 @cindex characters, comment
1338 @cindex !
1339 @cindex exclamation point
1340 @cindex continuation character
1341 @cindex characters, continuation
1342 Use of an exclamation point (@samp{!}) to begin a
1343 trailing comment (a comment that extends to the end of the same
1344 source line) is permitted under the following conditions:
1346 @itemize @bullet
1347 @item
1348 The exclamation point does not appear in column 6.
1349 Otherwise, it is treated as an indicator of a continuation
1350 line.
1352 @item
1353 The exclamation point appears outside a character or Hollerith
1354 constant.
1355 Otherwise, the exclamation point is considered part of the
1356 constant.
1358 @item
1359 The exclamation point appears to the left of any other possible
1360 trailing comment.
1361 That is, a trailing comment may contain exclamation points
1362 in their commentary text.
1363 @end itemize
1365 @cindex ;
1366 @cindex semicolon
1367 @cindex statements, separated by semicolon
1368 Use of a semicolon (@samp{;}) as a statement separator
1369 is permitted under the following conditions:
1371 @itemize @bullet
1372 @item
1373 The semicolon appears outside a character or Hollerith
1374 constant.
1375 Otherwise, the semicolon is considered part of the
1376 constant.
1378 @item
1379 The semicolon appears to the left of a trailing comment.
1380 Otherwise, the semicolon is considered part of that
1381 comment.
1383 @item
1384 Neither a logical @code{IF} statement nor a non-construct
1385 @code{WHERE} statement (a Fortran 90 feature) may be
1386 followed (in the same, possibly continued, line) by
1387 a semicolon used as a statement separator.
1389 This restriction avoids the confusion
1390 that can result when reading a line such as:
1392 @smallexample
1393 IF (VALIDP) CALL FOO; CALL BAR
1394 @end smallexample
1396 @noindent
1397 Some readers might think the @samp{CALL BAR} is executed
1398 only if @samp{VALIDP} is @code{.TRUE.}, while others might
1399 assume its execution is unconditional.
1401 (At present, @command{g77} does not diagnose code that
1402 violates this restriction.)
1403 @end itemize
1405 @node Scope of Names and Labels
1406 @subsection Scope of Symbolic Names and Statement Labels
1407 @cindex scope
1409 (Corresponds to Section 2.9 of ANSI X3.9-1978 FORTRAN 77.)
1411 Included in the list of entities that have a scope of a
1412 program unit are construct names (a Fortran 90 feature).
1413 @xref{Construct Names}, for more information.
1415 @node Characters Lines Sequence
1416 @section Characters, Lines, and Execution Sequence
1418 (The following information augments or overrides the information in
1419 Chapter 3 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
1420 language.
1421 Chapter 3 of that document otherwise serves as the basis
1422 for the relevant aspects of GNU Fortran.)
1424 @menu
1425 * Character Set::
1426 * Lines::
1427 * Continuation Line::
1428 * Statements::
1429 * Statement Labels::
1430 * Order::
1431 * INCLUDE::
1432 * Cpp-style directives::
1433 @end menu
1435 @node Character Set
1436 @subsection GNU Fortran Character Set
1437 @cindex characters
1439 (Corresponds to Section 3.1 of ANSI X3.9-1978 FORTRAN 77.)
1441 Letters include uppercase letters (the twenty-six characters
1442 of the English alphabet) and lowercase letters (their lowercase
1443 equivalent).
1444 Generally, lowercase letters may be used in place of uppercase
1445 letters, though in character and Hollerith constants, they
1446 are distinct.
1448 Special characters include:
1450 @itemize @bullet
1451 @item
1452 @cindex ;
1453 @cindex semicolon
1454 Semicolon (@samp{;})
1456 @item
1457 @cindex !
1458 @cindex exclamation point
1459 Exclamation point (@samp{!})
1461 @item
1462 @cindex "
1463 @cindex double quote
1464 Double quote (@samp{"})
1466 @item
1467 @cindex \
1468 @cindex backslash
1469 Backslash (@samp{\})
1471 @item
1472 @cindex ?
1473 @cindex question mark
1474 Question mark (@samp{?})
1476 @item
1477 @cindex #
1478 @cindex hash mark
1479 @cindex pound sign
1480 Hash mark (@samp{#})
1482 @item
1483 @cindex &
1484 @cindex ampersand
1485 Ampersand (@samp{&})
1487 @item
1488 @cindex %
1489 @cindex percent sign
1490 Percent sign (@samp{%})
1492 @item
1493 @cindex _
1494 @cindex underscore
1495 Underscore (@samp{_})
1497 @item
1498 @cindex <
1499 @cindex open angle
1500 @cindex left angle
1501 @cindex open bracket
1502 @cindex left bracket
1503 Open angle (@samp{<})
1505 @item
1506 @cindex >
1507 @cindex close angle
1508 @cindex right angle
1509 @cindex close bracket
1510 @cindex right bracket
1511 Close angle (@samp{>})
1513 @item
1514 The FORTRAN 77 special characters (@key{SPC}, @samp{=},
1515 @samp{+}, @samp{-}, @samp{*}, @samp{/}, @samp{(},
1516 @samp{)}, @samp{,}, @samp{.}, @samp{$}, @samp{'},
1517 and @samp{:})
1518 @end itemize
1520 @cindex blank
1521 @cindex space
1522 @cindex SPC
1523 Note that this document refers to @key{SPC} as @dfn{space},
1524 while X3.9-1978 FORTRAN 77 refers to it as @dfn{blank}.
1526 @node Lines
1527 @subsection Lines
1528 @cindex lines
1529 @cindex source file format
1530 @cindex source format
1531 @cindex file, source
1532 @cindex source code
1533 @cindex code, source
1534 @cindex fixed form
1535 @cindex free form
1537 (Corresponds to Section 3.2 of ANSI X3.9-1978 FORTRAN 77.)
1539 The way a Fortran compiler views source files depends entirely on the
1540 implementation choices made for the compiler, since those choices
1541 are explicitly left to the implementation by the published Fortran
1542 standards.
1544 The GNU Fortran language mandates a view applicable to UNIX-like
1545 text files---files that are made up of an arbitrary number of lines,
1546 each with an arbitrary number of characters (sometimes called stream-based
1547 files).
1549 This view does not apply to types of files that are specified as
1550 having a particular number of characters on every single line (sometimes
1551 referred to as record-based files).
1553 Because a ``line in a program unit is a sequence of 72 characters'',
1554 to quote X3.9-1978, the GNU Fortran language specifies that a
1555 stream-based text file is translated to GNU Fortran lines as follows:
1557 @itemize @bullet
1558 @item
1559 A newline in the file is the character that represents the end of
1560 a line of text to the underlying system.
1561 For example, on ASCII-based systems, a newline is the @key{NL}
1562 character, which has ASCII value 10 (decimal).
1564 @item
1565 Each newline in the file serves to end the line of text that precedes
1566 it (and that does not contain a newline).
1568 @item
1569 The end-of-file marker (@code{EOF}) also serves to end the line
1570 of text that precedes it (and that does not contain a newline).
1572 @item
1573 @cindex blank
1574 @cindex space
1575 @cindex SPC
1576 Any line of text that is shorter than 72 characters is padded to that length
1577 with spaces (called ``blanks'' in the standard).
1579 @item
1580 Any line of text that is longer than 72 characters is truncated to that
1581 length, but the truncated remainder must consist entirely of spaces.
1583 @item
1584 Characters other than newline and the GNU Fortran character set
1585 are invalid.
1586 @end itemize
1588 For the purposes of the remainder of this description of the GNU
1589 Fortran language, the translation described above has already
1590 taken place, unless otherwise specified.
1592 The result of the above translation is that the source file appears,
1593 in terms of the remainder of this description of the GNU Fortran language,
1594 as if it had an arbitrary
1595 number of 72-character lines, each character being among the GNU Fortran
1596 character set.
1598 For example, if the source file itself has two newlines in a row,
1599 the second newline becomes, after the above translation, a single
1600 line containing 72 spaces.
1602 @node Continuation Line
1603 @subsection Continuation Line
1604 @cindex continuation line, number of
1605 @cindex lines, continuation
1606 @cindex number of continuation lines
1607 @cindex limits, continuation lines
1609 (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.)
1611 A continuation line is any line that both
1613 @itemize @bullet
1614 @item
1615 Contains a continuation character, and
1617 @item
1618 Contains only spaces in columns 1 through 5
1619 @end itemize
1621 A continuation character is any character of the GNU Fortran character set
1622 other than space (@key{SPC}) or zero (@samp{0})
1623 in column 6, or a digit (@samp{0} through @samp{9}) in column
1624 7 through 72 of a line that has only spaces to the left of that
1625 digit.
1627 The continuation character is ignored as far as the content of
1628 the statement is concerned.
1630 The GNU Fortran language places no limit on the number of
1631 continuation lines in a statement.
1632 In practice, the limit depends on a variety of factors, such as
1633 available memory, statement content, and so on, but no
1634 GNU Fortran system may impose an arbitrary limit.
1636 @node Statements
1637 @subsection Statements
1639 (Corresponds to Section 3.3 of ANSI X3.9-1978 FORTRAN 77.)
1641 Statements may be written using an arbitrary number of continuation
1642 lines.
1644 Statements may be separated using the semicolon (@samp{;}), except
1645 that the logical @code{IF} and non-construct @code{WHERE} statements
1646 may not be separated from subsequent statements using only a semicolon
1647 as statement separator.
1649 The @code{END PROGRAM}, @code{END SUBROUTINE}, @code{END FUNCTION},
1650 and @code{END BLOCK DATA} statements are alternatives to the @code{END}
1651 statement.
1652 These alternatives may be written as normal statements---they are not
1653 subject to the restrictions of the @code{END} statement.
1655 However, no statement other than @code{END} may have an initial line
1656 that appears to be an @code{END} statement---even @code{END PROGRAM},
1657 for example, must not be written as:
1659 @example
1660       END
1661      &PROGRAM
1662 @end example
1664 @node Statement Labels
1665 @subsection Statement Labels
1667 (Corresponds to Section 3.4 of ANSI X3.9-1978 FORTRAN 77.)
1669 A statement separated from its predecessor via a semicolon may be
1670 labeled as follows:
1672 @itemize @bullet
1673 @item
1674 The semicolon is followed by the label for the statement,
1675 which in turn follows the label.
1677 @item
1678 The label must be no more than five digits in length.
1680 @item
1681 The first digit of the label for the statement is not
1682 the first non-space character on a line.
1683 Otherwise, that character is treated as a continuation
1684 character.
1685 @end itemize
1687 A statement may have only one label defined for it.
1689 @node Order
1690 @subsection Order of Statements and Lines
1692 (Corresponds to Section 3.5 of ANSI X3.9-1978 FORTRAN 77.)
1694 Generally, @code{DATA} statements may precede executable statements.
1695 However, specification statements pertaining to any entities
1696 initialized by a @code{DATA} statement must precede that @code{DATA}
1697 statement.
1698 For example,
1699 after @samp{DATA I/1/}, @samp{INTEGER I} is not permitted, but
1700 @samp{INTEGER J} is permitted.
1702 The last line of a program unit may be an @code{END} statement,
1703 or may be:
1705 @itemize @bullet
1706 @item
1707 An @code{END PROGRAM} statement, if the program unit is a main program.
1709 @item
1710 An @code{END SUBROUTINE} statement, if the program unit is a subroutine.
1712 @item
1713 An @code{END FUNCTION} statement, if the program unit is a function.
1715 @item
1716 An @code{END BLOCK DATA} statement, if the program unit is a block data.
1717 @end itemize
1719 @node INCLUDE
1720 @subsection Including Source Text
1721 @cindex INCLUDE directive
1723 Additional source text may be included in the processing of
1724 the source file via the @code{INCLUDE} directive:
1726 @example
1727 INCLUDE @var{filename}
1728 @end example
1730 @noindent
1731 The source text to be included is identified by @var{filename},
1732 which is a literal GNU Fortran character constant.
1733 The meaning and interpretation of @var{filename} depends on the
1734 implementation, but typically is a filename.
1736 (@command{g77} treats it as a filename that it searches for
1737 in the current directory and/or directories specified
1738 via the @option{-I} command-line option.)
1740 The effect of the @code{INCLUDE} directive is as if the
1741 included text directly replaced the directive in the source
1742 file prior to interpretation of the program.
1743 Included text may itself use @code{INCLUDE}.
1744 The depth of nested @code{INCLUDE} references depends on
1745 the implementation, but typically is a positive integer.
1747 This virtual replacement treats the statements and @code{INCLUDE}
1748 directives in the included text as syntactically distinct from
1749 those in the including text.
1751 Therefore, the first non-comment line of the included text
1752 must not be a continuation line.
1753 The included text must therefore have, after the non-comment
1754 lines, either an initial line (statement), an @code{INCLUDE}
1755 directive, or nothing (the end of the included text).
1757 Similarly, the including text may end the @code{INCLUDE}
1758 directive with a semicolon or the end of the line, but it
1759 cannot follow an @code{INCLUDE} directive at the end of its
1760 line with a continuation line.
1761 Thus, the last statement in an included text may not be
1762 continued.
1764 Any statements between two @code{INCLUDE} directives on the
1765 same line are treated as if they appeared in between the
1766 respective included texts.
1767 For example:
1769 @smallexample
1770 INCLUDE 'A'; PRINT *, 'B'; INCLUDE 'C'; END PROGRAM
1771 @end smallexample
1773 @noindent
1774 If the text included by @samp{INCLUDE 'A'} constitutes
1775 a @samp{PRINT *, 'A'} statement and the text included by
1776 @samp{INCLUDE 'C'} constitutes a @samp{PRINT *, 'C'} statement,
1777 then the output of the above sample program would be
1779 @example
1783 @end example
1785 @noindent
1786 (with suitable allowances for how an implementation defines
1787 its handling of output).
1789 Included text must not include itself directly or indirectly,
1790 regardless of whether the @var{filename} used to reference
1791 the text is the same.
1793 Note that @code{INCLUDE} is @emph{not} a statement.
1794 As such, it is neither a non-executable or executable
1795 statement.
1796 However, if the text it includes constitutes one or more
1797 executable statements, then the placement of @code{INCLUDE}
1798 is subject to effectively the same restrictions as those
1799 on executable statements.
1801 An @code{INCLUDE} directive may be continued across multiple
1802 lines as if it were a statement.
1803 This permits long names to be used for @var{filename}.
1805 @node Cpp-style directives
1806 @subsection Cpp-style directives
1807 @cindex #
1808 @cindex preprocessor
1810 @code{cpp} output-style @code{#} directives
1811 (@pxref{C Preprocessor Output,,, cpp, The C Preprocessor})
1812 are recognized by the compiler even
1813 when the preprocessor isn't run on the input (as it is when compiling
1814 @samp{.F} files).  (Note the distinction between these @command{cpp}
1815 @code{#} @emph{output} directives and @code{#line} @emph{input}
1816 directives.)
1818 @node Data Types and Constants
1819 @section Data Types and Constants
1821 (The following information augments or overrides the information in
1822 Chapter 4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
1823 language.
1824 Chapter 4 of that document otherwise serves as the basis
1825 for the relevant aspects of GNU Fortran.)
1827 To more concisely express the appropriate types for
1828 entities, this document uses the more concise
1829 Fortran 90 nomenclature such as @code{INTEGER(KIND=1)}
1830 instead of the more traditional, but less portably concise,
1831 byte-size-based nomenclature such as @code{INTEGER*4},
1832 wherever reasonable.
1834 When referring to generic types---in contexts where the
1835 specific precision and range of a type are not important---this
1836 document uses the generic type names @code{INTEGER}, @code{LOGICAL},
1837 @code{REAL}, @code{COMPLEX}, and @code{CHARACTER}.
1839 In some cases, the context requires specification of a
1840 particular type.
1841 This document uses the @samp{KIND=} notation to accomplish
1842 this throughout, sometimes supplying the more traditional
1843 notation for clarification, though the traditional notation
1844 might not work the same way on all GNU Fortran implementations.
1846 Use of @samp{KIND=} makes this document more concise because
1847 @command{g77} is able to define values for @samp{KIND=} that
1848 have the same meanings on all systems, due to the way the
1849 Fortran 90 standard specifies these values are to be used.
1851 (In particular, that standard permits an implementation to
1852 arbitrarily assign nonnegative values.
1853 There are four distinct sets of assignments: one to the @code{CHARACTER}
1854 type; one to the @code{INTEGER} type; one to the @code{LOGICAL} type;
1855 and the fourth to both the @code{REAL} and @code{COMPLEX} types.
1856 Implementations are free to assign these values in any order,
1857 leave gaps in the ordering of assignments, and assign more than
1858 one value to a representation.)
1860 This makes @samp{KIND=} values superior to the values used
1861 in non-standard statements such as @samp{INTEGER*4}, because
1862 the meanings of the values in those statements vary from machine
1863 to machine, compiler to compiler, even operating system to
1864 operating system.
1866 However, use of @samp{KIND=} is @emph{not} generally recommended
1867 when writing portable code (unless, for example, the code is
1868 going to be compiled only via @command{g77}, which is a widely
1869 ported compiler).
1870 GNU Fortran does not yet have adequate language constructs to
1871 permit use of @samp{KIND=} in a fashion that would make the
1872 code portable to Fortran 90 implementations; and, this construct
1873 is known to @emph{not} be accepted by many popular FORTRAN 77
1874 implementations, so it cannot be used in code that is to be ported
1875 to those.
1877 The distinction here is that this document is able to use
1878 specific values for @samp{KIND=} to concisely document the
1879 types of various operations and operands.
1881 A Fortran program should use the FORTRAN 77 designations for the
1882 appropriate GNU Fortran types---such as @code{INTEGER} for
1883 @code{INTEGER(KIND=1)}, @code{REAL} for @code{REAL(KIND=1)},
1884 and @code{DOUBLE COMPLEX} for @code{COMPLEX(KIND=2)}---and,
1885 where no such designations exist, make use of appropriate
1886 techniques (preprocessor macros, parameters, and so on)
1887 to specify the types in a fashion that may be easily adjusted
1888 to suit each particular implementation to which the program
1889 is ported.
1890 (These types generally won't need to be adjusted for ports of
1891 @command{g77}.)
1893 Further details regarding GNU Fortran data types and constants
1894 are provided below.
1896 @menu
1897 * Types::
1898 * Constants::
1899 * Integer Type::
1900 * Character Type::
1901 @end menu
1903 @node Types
1904 @subsection Data Types
1906 (Corresponds to Section 4.1 of ANSI X3.9-1978 FORTRAN 77.)
1908 GNU Fortran supports these types:
1910 @enumerate
1911 @item
1912 Integer (generic type @code{INTEGER})
1914 @item
1915 Real (generic type @code{REAL})
1917 @item
1918 Double precision
1920 @item
1921 Complex (generic type @code{COMPLEX})
1923 @item
1924 Logical (generic type @code{LOGICAL})
1926 @item
1927 Character (generic type @code{CHARACTER})
1929 @item
1930 Double Complex
1931 @end enumerate
1933 (The types numbered 1 through 6 above are standard FORTRAN 77 types.)
1935 The generic types shown above are referred to in this document
1936 using only their generic type names.
1937 Such references usually indicate that any specific type (kind)
1938 of that generic type is valid.
1940 For example, a context described in this document as accepting
1941 the @code{COMPLEX} type also is likely to accept the
1942 @code{DOUBLE COMPLEX} type.
1944 The GNU Fortran language supports three ways to specify
1945 a specific kind of a generic type.
1947 @menu
1948 * Double Notation::  As in @code{DOUBLE COMPLEX}.
1949 * Star Notation::    As in @code{INTEGER*4}.
1950 * Kind Notation::    As in @code{INTEGER(KIND=1)}.
1951 @end menu
1953 @node Double Notation
1954 @subsubsection Double Notation
1956 The GNU Fortran language supports two uses of the keyword
1957 @code{DOUBLE} to specify a specific kind of type:
1959 @itemize @bullet
1960 @item
1961 @code{DOUBLE PRECISION}, equivalent to @code{REAL(KIND=2)}
1963 @item
1964 @code{DOUBLE COMPLEX}, equivalent to @code{COMPLEX(KIND=2)}
1965 @end itemize
1967 Use one of the above forms where a type name is valid.
1969 While use of this notation is popular, it doesn't scale
1970 well in a language or dialect rich in intrinsic types,
1971 as is the case for the GNU Fortran language (especially
1972 planned future versions of it).
1974 After all, one rarely sees type names such as @samp{DOUBLE INTEGER},
1975 @samp{QUADRUPLE REAL}, or @samp{QUARTER INTEGER}.
1976 Instead, @code{INTEGER*8}, @code{REAL*16}, and @code{INTEGER*1}
1977 often are substituted for these, respectively, even though they
1978 do not always have the same meanings on all systems.
1979 (And, the fact that @samp{DOUBLE REAL} does not exist as such
1980 is an inconsistency.)
1982 Therefore, this document uses ``double notation'' only on occasion
1983 for the benefit of those readers who are accustomed to it.
1985 @node Star Notation
1986 @subsubsection Star Notation
1987 @cindex *@var{n} notation
1989 The following notation specifies the storage size for a type:
1991 @smallexample
1992 @var{generic-type}*@var{n}
1993 @end smallexample
1995 @noindent
1996 @var{generic-type} must be a generic type---one of
1997 @code{INTEGER}, @code{REAL}, @code{COMPLEX}, @code{LOGICAL},
1998 or @code{CHARACTER}.
1999 @var{n} must be one or more digits comprising a decimal
2000 integer number greater than zero.
2002 Use the above form where a type name is valid.
2004 The @samp{*@var{n}} notation specifies that the amount of storage
2005 occupied by variables and array elements of that type is @var{n}
2006 times the storage occupied by a @code{CHARACTER*1} variable.
2008 This notation might indicate a different degree of precision and/or
2009 range for such variables and array elements, and the functions that
2010 return values of types using this notation.
2011 It does not limit the precision or range of values of that type
2012 in any particular way---use explicit code to do that.
2014 Further, the GNU Fortran language requires no particular values
2015 for @var{n} to be supported by an implementation via the @samp{*@var{n}}
2016 notation.
2017 @command{g77} supports @code{INTEGER*1} (as @code{INTEGER(KIND=3)})
2018 on all systems, for example,
2019 but not all implementations are required to do so, and @command{g77}
2020 is known to not support @code{REAL*1} on most (or all) systems.
2022 As a result, except for @var{generic-type} of @code{CHARACTER},
2023 uses of this notation should be limited to isolated
2024 portions of a program that are intended to handle system-specific
2025 tasks and are expected to be non-portable.
2027 (Standard FORTRAN 77 supports the @samp{*@var{n}} notation for
2028 only @code{CHARACTER}, where it signifies not only the amount
2029 of storage occupied, but the number of characters in entities
2030 of that type.
2031 However, almost all Fortran compilers have supported this
2032 notation for generic types, though with a variety of meanings
2033 for @var{n}.)
2035 Specifications of types using the @samp{*@var{n}} notation
2036 always are interpreted as specifications of the appropriate
2037 types described in this document using the @samp{KIND=@var{n}}
2038 notation, described below.
2040 While use of this notation is popular, it doesn't serve well
2041 in the context of a widely portable dialect of Fortran, such as
2042 the GNU Fortran language.
2044 For example, even on one particular machine, two or more popular
2045 Fortran compilers might well disagree on the size of a type
2046 declared @code{INTEGER*2} or @code{REAL*16}.
2047 Certainly there
2048 is known to be disagreement over such things among Fortran
2049 compilers on @emph{different} systems.
2051 Further, this notation offers no elegant way to specify sizes
2052 that are not even multiples of the ``byte size'' typically
2053 designated by @code{INTEGER*1}.
2054 Use of ``absurd'' values (such as @code{INTEGER*1000}) would
2055 certainly be possible, but would perhaps be stretching the original
2056 intent of this notation beyond the breaking point in terms
2057 of widespread readability of documentation and code making use
2058 of it.
2060 Therefore, this document uses ``star notation'' only on occasion
2061 for the benefit of those readers who are accustomed to it.
2063 @node Kind Notation
2064 @subsubsection Kind Notation
2065 @cindex KIND= notation
2067 The following notation specifies the kind-type selector of a type:
2069 @smallexample
2070 @var{generic-type}(KIND=@var{n})
2071 @end smallexample
2073 @noindent
2074 Use the above form where a type name is valid.
2076 @var{generic-type} must be a generic type---one of
2077 @code{INTEGER}, @code{REAL}, @code{COMPLEX}, @code{LOGICAL},
2078 or @code{CHARACTER}.
2079 @var{n} must be an integer initialization expression that
2080 is a positive, nonzero value.
2082 Programmers are discouraged from writing these values directly
2083 into their code.
2084 Future versions of the GNU Fortran language will offer
2085 facilities that will make the writing of code portable
2086 to @command{g77} @emph{and} Fortran 90 implementations simpler.
2088 However, writing code that ports to existing FORTRAN 77
2089 implementations depends on avoiding the @samp{KIND=} construct.
2091 The @samp{KIND=} construct is thus useful in the context
2092 of GNU Fortran for two reasons:
2094 @itemize @bullet
2095 @item
2096 It provides a means to specify a type in a fashion that
2097 is portable across all GNU Fortran implementations (though
2098 not other FORTRAN 77 and Fortran 90 implementations).
2100 @item
2101 It provides a sort of Rosetta stone for this document to use
2102 to concisely describe the types of various operations and
2103 operands.
2104 @end itemize
2106 The values of @var{n} in the GNU Fortran language are
2107 assigned using a scheme that:
2109 @itemize @bullet
2110 @item
2111 Attempts to maximize the ability of readers
2112 of this document to quickly familiarize themselves
2113 with assignments for popular types
2115 @item
2116 Provides a unique value for each specific desired
2117 meaning
2119 @item
2120 Provides a means to automatically assign new values so
2121 they have a ``natural'' relationship to existing values,
2122 if appropriate, or, if no such relationship exists, will
2123 not interfere with future values assigned on the basis
2124 of such relationships
2126 @item
2127 Avoids using values that are similar to values used
2128 in the existing, popular @samp{*@var{n}} notation,
2129 to prevent readers from expecting that these implied
2130 correspondences work on all GNU Fortran implementations
2131 @end itemize
2133 The assignment system accomplishes this by assigning
2134 to each ``fundamental meaning'' of a specific type a
2135 unique prime number.
2136 Combinations of fundamental meanings---for example, a type
2137 that is two times the size of some other type---are assigned
2138 values of @var{n} that are the products of the values for
2139 those fundamental meanings.
2141 A prime value of @var{n} is never given more than one fundamental
2142 meaning, to avoid situations where some code or system
2143 cannot reasonably provide those meanings in the form of a
2144 single type.
2146 The values of @var{n} assigned so far are:
2148 @table @code
2149 @item KIND=0
2150 This value is reserved for future use.
2152 The planned future use is for this value to designate,
2153 explicitly, context-sensitive kind-type selection.
2154 For example, the expression @samp{1D0 * 0.1_0} would
2155 be equivalent to @samp{1D0 * 0.1D0}.
2157 @item KIND=1
2158 This corresponds to the default types for
2159 @code{REAL}, @code{INTEGER}, @code{LOGICAL}, @code{COMPLEX},
2160 and @code{CHARACTER}, as appropriate.
2162 These are the ``default'' types described in the Fortran 90 standard,
2163 though that standard does not assign any particular @samp{KIND=}
2164 value to these types.
2166 (Typically, these are @code{REAL*4}, @code{INTEGER*4},
2167 @code{LOGICAL*4}, and @code{COMPLEX*8}.)
2169 @item KIND=2
2170 This corresponds to types that occupy twice as much
2171 storage as the default types.
2172 @code{REAL(KIND=2)} is @code{DOUBLE PRECISION} (typically @code{REAL*8}),
2173 @code{COMPLEX(KIND=2)} is @code{DOUBLE COMPLEX} (typically @code{COMPLEX*16}),
2175 These are the ``double precision'' types described in the Fortran 90
2176 standard,
2177 though that standard does not assign any particular @samp{KIND=}
2178 value to these types.
2180 @var{n} of 4 thus corresponds to types that occupy four times
2181 as much storage as the default types, @var{n} of 8 to types that
2182 occupy eight times as much storage, and so on.
2184 The @code{INTEGER(KIND=2)} and @code{LOGICAL(KIND=2)} types
2185 are not necessarily supported by every GNU Fortran implementation.
2187 @item KIND=3
2188 This corresponds to types that occupy as much
2189 storage as the default @code{CHARACTER} type,
2190 which is the same effective type as @code{CHARACTER(KIND=1)}
2191 (making that type effectively the same as @code{CHARACTER(KIND=3)}).
2193 (Typically, these are @code{INTEGER*1} and @code{LOGICAL*1}.)
2195 @var{n} of 6 thus corresponds to types that occupy twice as
2196 much storage as the @var{n}=3 types, @var{n} of 12 to types
2197 that occupy four times as much storage, and so on.
2199 These are not necessarily supported by every GNU Fortran
2200 implementation.
2202 @item KIND=5
2203 This corresponds to types that occupy half the
2204 storage as the default (@var{n}=1) types.
2206 (Typically, these are @code{INTEGER*2} and @code{LOGICAL*2}.)
2208 @var{n} of 25 thus corresponds to types that occupy one-quarter
2209 as much storage as the default types.
2211 These are not necessarily supported by every GNU Fortran
2212 implementation.
2214 @item KIND=7
2215 @cindex pointers
2216 This is valid only as @code{INTEGER(KIND=7)} and
2217 denotes the @code{INTEGER} type that has the smallest
2218 storage size that holds a pointer on the system.
2220 A pointer representable by this type is capable of uniquely
2221 addressing a @code{CHARACTER*1} variable, array, array element,
2222 or substring.
2224 (Typically this is equivalent to @code{INTEGER*4} or,
2225 on 64-bit systems, @code{INTEGER*8}.
2226 In a compatible C implementation, it typically would
2227 be the same size and semantics of the C type @code{void *}.)
2228 @end table
2230 Note that these are @emph{proposed} correspondences and might change
2231 in future versions of @command{g77}---avoid writing code depending
2232 on them while @command{g77}, and therefore the GNU Fortran language
2233 it defines, is in beta testing.
2235 Values not specified in the above list are reserved to
2236 future versions of the GNU Fortran language.
2238 Implementation-dependent meanings will be assigned new,
2239 unique prime numbers so as to not interfere with other
2240 implementation-dependent meanings, and offer the possibility
2241 of increasing the portability of code depending on such
2242 types by offering support for them in other GNU Fortran
2243 implementations.
2245 Other meanings that might be given unique values are:
2247 @itemize @bullet
2248 @item
2249 Types that make use of only half their storage size for
2250 representing precision and range.
2252 For example, some compilers offer options that cause
2253 @code{INTEGER} types to occupy the amount of storage
2254 that would be needed for @code{INTEGER(KIND=2)} types, but the
2255 range remains that of @code{INTEGER(KIND=1)}.
2257 @item
2258 The IEEE single floating-point type.
2260 @item
2261 Types with a specific bit pattern (endianness), such as the
2262 little-endian form of @code{INTEGER(KIND=1)}.
2263 These could permit, conceptually, use of portable code and
2264 implementations on data files written by existing systems.
2265 @end itemize
2267 Future @emph{prime} numbers should be given meanings in as incremental
2268 a fashion as possible, to allow for flexibility and
2269 expressiveness in combining types.
2271 For example, instead of defining a prime number for little-endian
2272 IEEE doubles, one prime number might be assigned the meaning
2273 ``little-endian'', another the meaning ``IEEE double'', and the
2274 value of @var{n} for a little-endian IEEE double would thus
2275 naturally be the product of those two respective assigned values.
2276 (It could even be reasonable to have IEEE values result from the
2277 products of prime values denoting exponent and fraction sizes
2278 and meanings, hidden bit usage, availability and representations
2279 of special values such as subnormals, infinities, and Not-A-Numbers
2280 (NaNs), and so on.)
2282 This assignment mechanism, while not inherently required for
2283 future versions of the GNU Fortran language, is worth using
2284 because it could ease management of the ``space'' of supported
2285 types much easier in the long run.
2287 The above approach suggests a mechanism for specifying inheritance
2288 of intrinsic (built-in) types for an entire, widely portable
2289 product line.
2290 It is certainly reasonable that, unlike programmers of other languages
2291 offering inheritance mechanisms that employ verbose names for classes
2292 and subclasses, along with graphical browsers to elucidate the
2293 relationships, Fortran programmers would employ
2294 a mechanism that works by multiplying prime numbers together
2295 and finding the prime factors of such products.
2297 Most of the advantages for the above scheme have been explained
2298 above.
2299 One disadvantage is that it could lead to the defining,
2300 by the GNU Fortran language, of some fairly large prime numbers.
2301 This could lead to the GNU Fortran language being declared
2302 ``munitions'' by the United States Department of Defense.
2304 @node Constants
2305 @subsection Constants
2306 @cindex constants
2307 @cindex types, constants
2309 (Corresponds to Section 4.2 of ANSI X3.9-1978 FORTRAN 77.)
2311 A @dfn{typeless constant} has one of the following forms:
2313 @smallexample
2314 '@var{binary-digits}'B
2315 '@var{octal-digits}'O
2316 '@var{hexadecimal-digits}'Z
2317 '@var{hexadecimal-digits}'X
2318 @end smallexample
2320 @noindent
2321 @var{binary-digits}, @var{octal-digits}, and @var{hexadecimal-digits}
2322 are nonempty strings of characters in the set @samp{01}, @samp{01234567},
2323 and @samp{0123456789ABCDEFabcdef}, respectively.
2324 (The value for @samp{A} (and @samp{a}) is 10, for @samp{B} and @samp{b}
2325 is 11, and so on.)
2327 A prefix-radix constant, such as @samp{Z'ABCD'}, can optionally be
2328 treated as typeless.  @xref{Fortran Dialect Options,, Options
2329 Controlling Fortran Dialect}, for information on the
2330 @option{-ftypeless-boz} option.
2332 Typeless constants have values that depend on the context in which
2333 they are used.
2335 All other constants, called @dfn{typed constants}, are interpreted---converted
2336 to internal form---according to their inherent type.
2337 Thus, context is @emph{never} a determining factor for the type, and hence
2338 the interpretation, of a typed constant.
2339 (All constants in the ANSI FORTRAN 77 language are typed constants.)
2341 For example, @samp{1} is always type @code{INTEGER(KIND=1)} in GNU
2342 Fortran (called default INTEGER in Fortran 90),
2343 @samp{9.435784839284958} is always type @code{REAL(KIND=1)} (even if the
2344 additional precision specified is lost, and even when used in a
2345 @code{REAL(KIND=2)} context), @samp{1E0} is always type @code{REAL(KIND=2)},
2346 and @samp{1D0} is always type @code{REAL(KIND=2)}.
2348 @node Integer Type
2349 @subsection Integer Type
2351 (Corresponds to Section 4.3 of ANSI X3.9-1978 FORTRAN 77.)
2353 An integer constant also may have one of the following forms:
2355 @smallexample
2356 B'@var{binary-digits}'
2357 O'@var{octal-digits}'
2358 Z'@var{hexadecimal-digits}'
2359 X'@var{hexadecimal-digits}'
2360 @end smallexample
2362 @noindent
2363 @var{binary-digits}, @var{octal-digits}, and @var{hexadecimal-digits}
2364 are nonempty strings of characters in the set @samp{01}, @samp{01234567},
2365 and @samp{0123456789ABCDEFabcdef}, respectively.
2366 (The value for @samp{A} (and @samp{a}) is 10, for @samp{B} and @samp{b}
2367 is 11, and so on.)
2369 @node Character Type
2370 @subsection Character Type
2372 (Corresponds to Section 4.8 of ANSI X3.9-1978 FORTRAN 77.)
2374 @cindex double quoted character constants
2375 A character constant may be delimited by a pair of double quotes
2376 (@samp{"}) instead of apostrophes.
2377 In this case, an apostrophe within the constant represents
2378 a single apostrophe, while a double quote is represented in
2379 the source text of the constant by two consecutive double
2380 quotes with no intervening spaces.
2382 @cindex zero-length CHARACTER
2383 @cindex null CHARACTER strings
2384 @cindex empty CHARACTER strings
2385 @cindex strings, empty
2386 @cindex CHARACTER, null
2387 A character constant may be empty (have a length of zero).
2389 A character constant may include a substring specification,
2390 The value of such a constant is the value of the substring---for
2391 example, the value of @samp{'hello'(3:5)} is the same
2392 as the value of @samp{'llo'}.
2394 @node Expressions
2395 @section Expressions
2397 (The following information augments or overrides the information in
2398 Chapter 6 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
2399 language.
2400 Chapter 6 of that document otherwise serves as the basis
2401 for the relevant aspects of GNU Fortran.)
2403 @menu
2404 * %LOC()::
2405 @end menu
2407 @node %LOC()
2408 @subsection The @code{%LOC()} Construct
2409 @cindex %LOC() construct
2411 @example
2412 %LOC(@var{arg})
2413 @end example
2415 The @code{%LOC()} construct is an expression
2416 that yields the value of the location of its argument,
2417 @var{arg}, in memory.
2418 The size of the type of the expression depends on the system---typically,
2419 it is equivalent to either @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=2)},
2420 though it is actually type @code{INTEGER(KIND=7)}.
2422 The argument to @code{%LOC()} must be suitable as the
2423 left-hand side of an assignment statement.
2424 That is, it may not be a general expression involving
2425 operators such as addition, subtraction, and so on,
2426 nor may it be a constant.
2428 Use of @code{%LOC()} is recommended only for code that
2429 is accessing facilities outside of GNU Fortran, such as
2430 operating system or windowing facilities.
2431 It is best to constrain such uses to isolated portions of
2432 a program---portions that deal specifically and exclusively
2433 with low-level, system-dependent facilities.
2434 Such portions might well provide a portable interface for
2435 use by the program as a whole, but are themselves not
2436 portable, and should be thoroughly tested each time they
2437 are rebuilt using a new compiler or version of a compiler.
2439 Do not depend on @code{%LOC()} returning a pointer that
2440 can be safely used to @emph{define} (change) the argument.
2441 While this might work in some circumstances, it is hard
2442 to predict whether it will continue to work when a program
2443 (that works using this unsafe behavior)
2444 is recompiled using different command-line options or
2445 a different version of @command{g77}.
2447 Generally, @code{%LOC()} is safe when used as an argument
2448 to a procedure that makes use of the value of the corresponding
2449 dummy argument only during its activation, and only when
2450 such use is restricted to referencing (reading) the value
2451 of the argument to @code{%LOC()}.
2453 @emph{Implementation Note:} Currently, @command{g77} passes
2454 arguments (those not passed using a construct such as @code{%VAL()})
2455 by reference or descriptor, depending on the type of
2456 the actual argument.
2457 Thus, given @samp{INTEGER I}, @samp{CALL FOO(I)} would
2458 seem to mean the same thing as @samp{CALL FOO(%VAL(%LOC(I)))}, and
2459 in fact might compile to identical code.
2461 However, @samp{CALL FOO(%VAL(%LOC(I)))} emphatically means
2462 ``pass, by value, the address of @samp{I} in memory''.
2463 While @samp{CALL FOO(I)} might use that same approach in a
2464 particular version of @command{g77}, another version or compiler
2465 might choose a different implementation, such as copy-in/copy-out,
2466 to effect the desired behavior---and which will therefore not
2467 necessarily compile to the same code as would
2468 @samp{CALL FOO(%VAL(%LOC(I)))}
2469 using the same version or compiler.
2471 @xref{Debugging and Interfacing}, for detailed information on
2472 how this particular version of @command{g77} implements various
2473 constructs.
2475 @node Specification Statements
2476 @section Specification Statements
2478 (The following information augments or overrides the information in
2479 Chapter 8 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
2480 language.
2481 Chapter 8 of that document otherwise serves as the basis
2482 for the relevant aspects of GNU Fortran.)
2484 @menu
2485 * NAMELIST::
2486 * DOUBLE COMPLEX::
2487 @end menu
2489 @node NAMELIST
2490 @subsection @code{NAMELIST} Statement
2491 @cindex NAMELIST statement
2492 @cindex statements, NAMELIST
2494 The @code{NAMELIST} statement, and related I/O constructs, are
2495 supported by the GNU Fortran language in essentially the same
2496 way as they are by @command{f2c}.
2498 This follows Fortran 90 with the restriction that on @code{NAMELIST}
2499 input, subscripts must have the form
2500 @smallexample
2501 @var{subscript} [ @code{:} @var{subscript} [ @code{:} @var{stride}]]
2502 @end smallexample
2503 i.e.@:
2504 @smallexample
2505 &xx x(1:3,8:10:2)=1,2,3,4,5,6/
2506 @end smallexample
2507 is allowed, but not, say,
2508 @smallexample
2509 &xx x(:3,8::2)=1,2,3,4,5,6/
2510 @end smallexample
2512 As an extension of the Fortran 90 form, @code{$} and @code{$END} may be
2513 used in place of @code{&} and @code{/} in @code{NAMELIST} input, so that
2514 @smallexample
2515 $&xx x(1:3,8:10:2)=1,2,3,4,5,6 $end
2516 @end smallexample
2517 could be used instead of the example above.
2519 @node DOUBLE COMPLEX
2520 @subsection @code{DOUBLE COMPLEX} Statement
2521 @cindex DOUBLE COMPLEX
2523 @code{DOUBLE COMPLEX} is a type-statement (and type) that
2524 specifies the type @code{COMPLEX(KIND=2)} in GNU Fortran.
2526 @node Control Statements
2527 @section Control Statements
2529 (The following information augments or overrides the information in
2530 Chapter 11 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
2531 language.
2532 Chapter 11 of that document otherwise serves as the basis
2533 for the relevant aspects of GNU Fortran.)
2535 @menu
2536 * DO WHILE::
2537 * END DO::
2538 * Construct Names::
2539 * CYCLE and EXIT::
2540 @end menu
2542 @node DO WHILE
2543 @subsection DO WHILE
2544 @cindex DO WHILE
2545 @cindex DO
2546 @cindex MIL-STD 1753
2548 The @code{DO WHILE} statement, a feature of both the MIL-STD 1753 and
2549 Fortran 90 standards, is provided by the GNU Fortran language.
2550 The Fortran 90 ``do forever'' statement comprising just @code{DO} is
2551 also supported.
2553 @node END DO
2554 @subsection END DO
2555 @cindex END DO
2556 @cindex MIL-STD 1753
2558 The @code{END DO} statement is provided by the GNU Fortran language.
2560 This statement is used in one of two ways:
2562 @itemize @bullet
2563 @item
2564 The Fortran 90 meaning, in which it specifies the termination
2565 point of a single @code{DO} loop started with a @code{DO} statement
2566 that specifies no termination label.
2568 @item
2569 The MIL-STD 1753 meaning, in which it specifies the termination
2570 point of one or more @code{DO} loops, all of which start with a
2571 @code{DO} statement that specify the label defined for the
2572 @code{END DO} statement.
2574 This kind of @code{END DO} statement is merely a synonym for
2575 @code{CONTINUE}, except it is permitted only when the statement
2576 is labeled and a target of one or more labeled @code{DO} loops.
2578 It is expected that this use of @code{END DO} will be removed from
2579 the GNU Fortran language in the future, though it is likely that
2580 it will long be supported by @command{g77} as a dialect form.
2581 @end itemize
2583 @node Construct Names
2584 @subsection Construct Names
2585 @cindex construct names
2587 The GNU Fortran language supports construct names as defined
2588 by the Fortran 90 standard.
2589 These names are local to the program unit and are defined
2590 as follows:
2592 @smallexample
2593 @var{construct-name}: @var{block-statement}
2594 @end smallexample
2596 @noindent
2597 Here, @var{construct-name} is the construct name itself;
2598 its definition is connoted by the single colon (@samp{:}); and
2599 @var{block-statement} is an @code{IF}, @code{DO},
2600 or @code{SELECT CASE} statement that begins a block.
2602 A block that is given a construct name must also specify the
2603 same construct name in its termination statement:
2605 @example
2606 END @var{block} @var{construct-name}
2607 @end example
2609 @noindent
2610 Here, @var{block} must be @code{IF}, @code{DO}, or @code{SELECT},
2611 as appropriate.
2613 @node CYCLE and EXIT
2614 @subsection The @code{CYCLE} and @code{EXIT} Statements
2616 @cindex CYCLE statement
2617 @cindex EXIT statement
2618 @cindex statements, CYCLE
2619 @cindex statements, EXIT
2620 The @code{CYCLE} and @code{EXIT} statements specify that
2621 the remaining statements in the current iteration of a
2622 particular active (enclosing) @code{DO} loop are to be skipped.
2624 @code{CYCLE} specifies that these statements are skipped,
2625 but the @code{END DO} statement that marks the end of the
2626 @code{DO} loop be executed---that is, the next iteration,
2627 if any, is to be started.
2628 If the statement marking the end of the @code{DO} loop is
2629 not @code{END DO}---in other words, if the loop is not
2630 a block @code{DO}---the @code{CYCLE} statement does not
2631 execute that statement, but does start the next iteration (if any).
2633 @code{EXIT} specifies that the loop specified by the
2634 @code{DO} construct is terminated.
2636 The @code{DO} loop affected by @code{CYCLE} and @code{EXIT}
2637 is the innermost enclosing @code{DO} loop when the following
2638 forms are used:
2640 @example
2641 CYCLE
2642 EXIT
2643 @end example
2645 Otherwise, the following forms specify the construct name
2646 of the pertinent @code{DO} loop:
2648 @example
2649 CYCLE @var{construct-name}
2650 EXIT @var{construct-name}
2651 @end example
2653 @code{CYCLE} and @code{EXIT} can be viewed as glorified @code{GO TO}
2654 statements.
2655 However, they cannot be easily thought of as @code{GO TO} statements
2656 in obscure cases involving FORTRAN 77 loops.
2657 For example:
2659 @smallexample
2660       DO 10 I = 1, 5
2661       DO 10 J = 1, 5
2662          IF (J .EQ. 5) EXIT
2663       DO 10 K = 1, 5
2664          IF (K .EQ. 3) CYCLE
2665 10    PRINT *, 'I=', I, ' J=', J, ' K=', K
2666 20    CONTINUE
2667 @end smallexample
2669 @noindent
2670 In particular, neither the @code{EXIT} nor @code{CYCLE} statements
2671 above are equivalent to a @code{GO TO} statement to either label
2672 @samp{10} or @samp{20}.
2674 To understand the effect of @code{CYCLE} and @code{EXIT} in the
2675 above fragment, it is helpful to first translate it to its equivalent
2676 using only block @code{DO} loops:
2678 @smallexample
2679       DO I = 1, 5
2680          DO J = 1, 5
2681             IF (J .EQ. 5) EXIT
2682             DO K = 1, 5
2683                IF (K .EQ. 3) CYCLE
2684 10             PRINT *, 'I=', I, ' J=', J, ' K=', K
2685             END DO
2686          END DO
2687       END DO
2688 20    CONTINUE
2689 @end smallexample
2691 Adding new labels allows translation of @code{CYCLE} and @code{EXIT}
2692 to @code{GO TO} so they may be more easily understood by programmers
2693 accustomed to FORTRAN coding:
2695 @smallexample
2696       DO I = 1, 5
2697          DO J = 1, 5
2698             IF (J .EQ. 5) GOTO 18
2699             DO K = 1, 5
2700                IF (K .EQ. 3) GO TO 12
2701 10             PRINT *, 'I=', I, ' J=', J, ' K=', K
2702 12          END DO
2703          END DO
2704 18    END DO
2705 20    CONTINUE
2706 @end smallexample
2708 @noindent
2709 Thus, the @code{CYCLE} statement in the innermost loop skips over
2710 the @code{PRINT} statement as it begins the next iteration of the
2711 loop, while the @code{EXIT} statement in the middle loop ends that
2712 loop but @emph{not} the outermost loop.
2714 @node Functions and Subroutines
2715 @section Functions and Subroutines
2717 (The following information augments or overrides the information in
2718 Chapter 15 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
2719 language.
2720 Chapter 15 of that document otherwise serves as the basis
2721 for the relevant aspects of GNU Fortran.)
2723 @menu
2724 * %VAL()::
2725 * %REF()::
2726 * %DESCR()::
2727 * Generics and Specifics::
2728 * REAL() and AIMAG() of Complex::
2729 * CMPLX() of DOUBLE PRECISION::
2730 * MIL-STD 1753::
2731 * f77/f2c Intrinsics::
2732 * Table of Intrinsic Functions::
2733 @end menu
2735 @node %VAL()
2736 @subsection The @code{%VAL()} Construct
2737 @cindex %VAL() construct
2739 @example
2740 %VAL(@var{arg})
2741 @end example
2743 The @code{%VAL()} construct specifies that an argument,
2744 @var{arg}, is to be passed by value, instead of by reference
2745 or descriptor.
2747 @code{%VAL()} is restricted to actual arguments in
2748 invocations of external procedures.
2750 Use of @code{%VAL()} is recommended only for code that
2751 is accessing facilities outside of GNU Fortran, such as
2752 operating system or windowing facilities.
2753 It is best to constrain such uses to isolated portions of
2754 a program---portions the deal specifically and exclusively
2755 with low-level, system-dependent facilities.
2756 Such portions might well provide a portable interface for
2757 use by the program as a whole, but are themselves not
2758 portable, and should be thoroughly tested each time they
2759 are rebuilt using a new compiler or version of a compiler.
2761 @emph{Implementation Note:} Currently, @command{g77} passes
2762 all arguments either by reference or by descriptor.
2764 Thus, use of @code{%VAL()} tends to be restricted to cases
2765 where the called procedure is written in a language other
2766 than Fortran that supports call-by-value semantics.
2767 (C is an example of such a language.)
2769 @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)},
2770 for detailed information on
2771 how this particular version of @command{g77} passes arguments
2772 to procedures.
2774 @node %REF()
2775 @subsection The @code{%REF()} Construct
2776 @cindex %REF() construct
2778 @example
2779 %REF(@var{arg})
2780 @end example
2782 The @code{%REF()} construct specifies that an argument,
2783 @var{arg}, is to be passed by reference, instead of by
2784 value or descriptor.
2786 @code{%REF()} is restricted to actual arguments in
2787 invocations of external procedures.
2789 Use of @code{%REF()} is recommended only for code that
2790 is accessing facilities outside of GNU Fortran, such as
2791 operating system or windowing facilities.
2792 It is best to constrain such uses to isolated portions of
2793 a program---portions the deal specifically and exclusively
2794 with low-level, system-dependent facilities.
2795 Such portions might well provide a portable interface for
2796 use by the program as a whole, but are themselves not
2797 portable, and should be thoroughly tested each time they
2798 are rebuilt using a new compiler or version of a compiler.
2800 Do not depend on @code{%REF()} supplying a pointer to the
2801 procedure being invoked.
2802 While that is a likely implementation choice, other
2803 implementation choices are available that preserve Fortran
2804 pass-by-reference semantics without passing a pointer to
2805 the argument, @var{arg}.
2806 (For example, a copy-in/copy-out implementation.)
2808 @emph{Implementation Note:} Currently, @command{g77} passes
2809 all arguments
2810 (other than variables and arrays of type @code{CHARACTER})
2811 by reference.
2812 Future versions of, or dialects supported by, @command{g77} might
2813 not pass @code{CHARACTER} functions by reference.
2815 Thus, use of @code{%REF()} tends to be restricted to cases
2816 where @var{arg} is type @code{CHARACTER} but the called
2817 procedure accesses it via a means other than the method
2818 used for Fortran @code{CHARACTER} arguments.
2820 @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on
2821 how this particular version of @command{g77} passes arguments
2822 to procedures.
2824 @node %DESCR()
2825 @subsection The @code{%DESCR()} Construct
2826 @cindex %DESCR() construct
2828 @example
2829 %DESCR(@var{arg})
2830 @end example
2832 The @code{%DESCR()} construct specifies that an argument,
2833 @var{arg}, is to be passed by descriptor, instead of by
2834 value or reference.
2836 @code{%DESCR()} is restricted to actual arguments in
2837 invocations of external procedures.
2839 Use of @code{%DESCR()} is recommended only for code that
2840 is accessing facilities outside of GNU Fortran, such as
2841 operating system or windowing facilities.
2842 It is best to constrain such uses to isolated portions of
2843 a program---portions the deal specifically and exclusively
2844 with low-level, system-dependent facilities.
2845 Such portions might well provide a portable interface for
2846 use by the program as a whole, but are themselves not
2847 portable, and should be thoroughly tested each time they
2848 are rebuilt using a new compiler or version of a compiler.
2850 Do not depend on @code{%DESCR()} supplying a pointer
2851 and/or a length passed by value
2852 to the procedure being invoked.
2853 While that is a likely implementation choice, other
2854 implementation choices are available that preserve the
2855 pass-by-reference semantics without passing a pointer to
2856 the argument, @var{arg}.
2857 (For example, a copy-in/copy-out implementation.)
2858 And, future versions of @command{g77} might change the
2859 way descriptors are implemented, such as passing a
2860 single argument pointing to a record containing the
2861 pointer/length information instead of passing that same
2862 information via two arguments as it currently does.
2864 @emph{Implementation Note:} Currently, @command{g77} passes
2865 all variables and arrays of type @code{CHARACTER}
2866 by descriptor.
2867 Future versions of, or dialects supported by, @command{g77} might
2868 pass @code{CHARACTER} functions by descriptor as well.
2870 Thus, use of @code{%DESCR()} tends to be restricted to cases
2871 where @var{arg} is not type @code{CHARACTER} but the called
2872 procedure accesses it via a means similar to the method
2873 used for Fortran @code{CHARACTER} arguments.
2875 @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on
2876 how this particular version of @command{g77} passes arguments
2877 to procedures.
2879 @node Generics and Specifics
2880 @subsection Generics and Specifics
2881 @cindex generic intrinsics
2882 @cindex intrinsics, generic
2884 The ANSI FORTRAN 77 language defines generic and specific
2885 intrinsics.
2886 In short, the distinctions are:
2888 @itemize @bullet
2889 @item
2890 @emph{Specific} intrinsics have
2891 specific types for their arguments and a specific return
2892 type.
2894 @item
2895 @emph{Generic} intrinsics are treated,
2896 on a case-by-case basis in the program's source code,
2897 as one of several possible specific intrinsics.
2899 Typically, a generic intrinsic has a return type that
2900 is determined by the type of one or more of its arguments.
2901 @end itemize
2903 The GNU Fortran language generalizes these concepts somewhat,
2904 especially by providing intrinsic subroutines and generic
2905 intrinsics that are treated as either a specific intrinsic subroutine
2906 or a specific intrinsic function (e.g. @code{SECOND}).
2908 However, GNU Fortran avoids generalizing this concept to
2909 the point where existing code would be accepted as meaning
2910 something possibly different than what was intended.
2912 For example, @code{ABS} is a generic intrinsic, so all working
2913 code written using @code{ABS} of an @code{INTEGER} argument
2914 expects an @code{INTEGER} return value.
2915 Similarly, all such code expects that @code{ABS} of an @code{INTEGER*2}
2916 argument returns an @code{INTEGER*2} return value.
2918 Yet, @code{IABS} is a @emph{specific} intrinsic that accepts only
2919 an @code{INTEGER(KIND=1)} argument.
2920 Code that passes something other than an @code{INTEGER(KIND=1)}
2921 argument to @code{IABS} is not valid GNU Fortran code, because
2922 it is not clear what the author intended.
2924 For example, if @samp{J} is @code{INTEGER(KIND=6)}, @samp{IABS(J)}
2925 is not defined by the GNU Fortran language, because the programmer
2926 might have used that construct to mean any of the following, subtly
2927 different, things:
2929 @itemize @bullet
2930 @item
2931 Convert @samp{J} to @code{INTEGER(KIND=1)} first
2932 (as if @samp{IABS(INT(J))} had been written).
2934 @item
2935 Convert the result of the intrinsic to @code{INTEGER(KIND=1)}
2936 (as if @samp{INT(ABS(J))} had been written).
2938 @item
2939 No conversion (as if @samp{ABS(J)} had been written).
2940 @end itemize
2942 The distinctions matter especially when types and values wider than
2943 @code{INTEGER(KIND=1)} (such as @code{INTEGER(KIND=2)}), or when
2944 operations performing more ``arithmetic'' than absolute-value, are involved.
2946 The following sample program is not a valid GNU Fortran program, but
2947 might be accepted by other compilers.
2948 If so, the output is likely to be revealing in terms of how a given
2949 compiler treats intrinsics (that normally are specific) when they
2950 are given arguments that do not conform to their stated requirements:
2952 @cindex JCB002 program
2953 @smallexample
2954       PROGRAM JCB002
2955 C Version 1:
2956 C Modified 1999-02-15 (Burley) to delete my email address.
2957 C Modified 1997-05-21 (Burley) to accommodate compilers that implement
2958 C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2.
2960 C Version 0:
2961 C Written by James Craig Burley 1997-02-20.
2963 C Purpose:
2964 C Determine how compilers handle non-standard IDIM
2965 C on INTEGER*2 operands, which presumably can be
2966 C extrapolated into understanding how the compiler
2967 C generally treats specific intrinsics that are passed
2968 C arguments not of the correct types.
2970 C If your compiler implements INTEGER*2 and INTEGER
2971 C as the same type, change all INTEGER*2 below to
2972 C INTEGER*1.
2974       INTEGER*2 I0, I4
2975       INTEGER I1, I2, I3
2976       INTEGER*2 ISMALL, ILARGE
2977       INTEGER*2 ITOOLG, ITWO
2978       INTEGER*2 ITMP
2979       LOGICAL L2, L3, L4
2981 C Find smallest INTEGER*2 number.
2983       ISMALL=0
2984  10   I0 = ISMALL-1
2985       IF ((I0 .GE. ISMALL) .OR. (I0+1 .NE. ISMALL)) GOTO 20
2986       ISMALL = I0
2987       GOTO 10
2988  20   CONTINUE
2990 C Find largest INTEGER*2 number.
2992       ILARGE=0
2993  30   I0 = ILARGE+1
2994       IF ((I0 .LE. ILARGE) .OR. (I0-1 .NE. ILARGE)) GOTO 40
2995       ILARGE = I0
2996       GOTO 30
2997  40   CONTINUE
2999 C Multiplying by two adds stress to the situation.
3001       ITWO = 2
3003 C Need a number that, added to -2, is too wide to fit in I*2.
3005       ITOOLG = ISMALL
3007 C Use IDIM the straightforward way.
3009       I1 = IDIM (ILARGE, ISMALL) * ITWO + ITOOLG
3011 C Calculate result for first interpretation.
3013       I2 = (INT (ILARGE) - INT (ISMALL)) * ITWO + ITOOLG
3015 C Calculate result for second interpretation.
3017       ITMP = ILARGE - ISMALL
3018       I3 = (INT (ITMP)) * ITWO + ITOOLG
3020 C Calculate result for third interpretation.
3022       I4 = (ILARGE - ISMALL) * ITWO + ITOOLG
3024 C Print results.
3026       PRINT *, 'ILARGE=', ILARGE
3027       PRINT *, 'ITWO=', ITWO
3028       PRINT *, 'ITOOLG=', ITOOLG
3029       PRINT *, 'ISMALL=', ISMALL
3030       PRINT *, 'I1=', I1
3031       PRINT *, 'I2=', I2
3032       PRINT *, 'I3=', I3
3033       PRINT *, 'I4=', I4
3034       PRINT *
3035       L2 = (I1 .EQ. I2)
3036       L3 = (I1 .EQ. I3)
3037       L4 = (I1 .EQ. I4)
3038       IF (L2 .AND. .NOT.L3 .AND. .NOT.L4) THEN
3039          PRINT *, 'Interp 1: IDIM(I*2,I*2) => IDIM(INT(I*2),INT(I*2))'
3040          STOP
3041       END IF
3042       IF (L3 .AND. .NOT.L2 .AND. .NOT.L4) THEN
3043          PRINT *, 'Interp 2: IDIM(I*2,I*2) => INT(DIM(I*2,I*2))'
3044          STOP
3045       END IF
3046       IF (L4 .AND. .NOT.L2 .AND. .NOT.L3) THEN
3047          PRINT *, 'Interp 3: IDIM(I*2,I*2) => DIM(I*2,I*2)'
3048          STOP
3049       END IF
3050       PRINT *, 'Results need careful analysis.'
3051       END
3052 @end smallexample
3054 No future version of the GNU Fortran language
3055 will likely permit specific intrinsic invocations with wrong-typed
3056 arguments (such as @code{IDIM} in the above example), since
3057 it has been determined that disagreements exist among
3058 many production compilers on the interpretation of
3059 such invocations.
3060 These disagreements strongly suggest that Fortran programmers,
3061 and certainly existing Fortran programs, disagree about the
3062 meaning of such invocations.
3064 The first version of @code{JCB002} didn't accommodate some compilers'
3065 treatment of @samp{INT(I1-I2)} where @samp{I1} and @samp{I2} are
3066 @code{INTEGER*2}.
3067 In such a case, these compilers apparently convert both
3068 operands to @code{INTEGER*4} and then do an @code{INTEGER*4} subtraction,
3069 instead of doing an @code{INTEGER*2} subtraction on the
3070 original values in @samp{I1} and @samp{I2}.
3072 However, the results of the careful analyses done on the outputs
3073 of programs compiled by these various compilers show that they
3074 all implement either @samp{Interp 1} or @samp{Interp 2} above.
3076 Specifically, it is believed that the new version of @code{JCB002}
3077 above will confirm that:
3079 @itemize @bullet
3080 @item
3081 Digital Semiconductor (``DEC'') Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5
3082 @command{f77} compilers all implement @samp{Interp 1}.
3084 @item
3085 IRIX 5.3 @command{f77} compiler implements @samp{Interp 2}.
3087 @item
3088 Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3,
3089 and IRIX 6.1 @command{f77} compilers all implement @samp{Interp 3}.
3090 @end itemize
3092 If you get different results than the above for the stated
3093 compilers, or have results for other compilers that might be
3094 worth adding to the above list, please let us know the details
3095 (compiler product, version, machine, results, and so on).
3097 @node REAL() and AIMAG() of Complex
3098 @subsection @code{REAL()} and @code{AIMAG()} of Complex
3099 @cindex @code{Real} intrinsic
3100 @cindex intrinsics, @code{Real}
3101 @cindex @code{AImag} intrinsic
3102 @cindex intrinsics, @code{AImag}
3104 The GNU Fortran language disallows @code{REAL(@var{expr})}
3105 and @code{AIMAG(@var{expr})},
3106 where @var{expr} is any @code{COMPLEX} type other than @code{COMPLEX(KIND=1)},
3107 except when they are used in the following way:
3109 @example
3110 REAL(REAL(@var{expr}))
3111 REAL(AIMAG(@var{expr}))
3112 @end example
3114 @noindent
3115 The above forms explicitly specify that the desired effect
3116 is to convert the real or imaginary part of @var{expr}, which might
3117 be some @code{REAL} type other than @code{REAL(KIND=1)},
3118 to type @code{REAL(KIND=1)},
3119 and have that serve as the value of the expression.
3121 The GNU Fortran language offers clearly named intrinsics to extract the
3122 real and imaginary parts of a complex entity without any
3123 conversion:
3125 @example
3126 REALPART(@var{expr})
3127 IMAGPART(@var{expr})
3128 @end example
3130 To express the above using typical extended FORTRAN 77,
3131 use the following constructs
3132 (when @var{expr} is @code{COMPLEX(KIND=2)}):
3134 @example
3135 DBLE(@var{expr})
3136 DIMAG(@var{expr})
3137 @end example
3139 The FORTRAN 77 language offers no way
3140 to explicitly specify the real and imaginary parts of a complex expression of
3141 arbitrary type, apparently as a result of requiring support for
3142 only one @code{COMPLEX} type (@code{COMPLEX(KIND=1)}).
3143 The concepts of converting an expression to type @code{REAL(KIND=1)} and
3144 of extracting the real part of a complex expression were
3145 thus ``smooshed'' by FORTRAN 77 into a single intrinsic, since
3146 they happened to have the exact same effect in that language
3147 (due to having only one @code{COMPLEX} type).
3149 @emph{Note:} When @option{-ff90} is in effect,
3150 @command{g77} treats @samp{REAL(@var{expr})}, where @var{expr} is of
3151 type @code{COMPLEX}, as @samp{REALPART(@var{expr})},
3152 whereas with @samp{-fugly-complex -fno-f90} in effect, it is
3153 treated as @samp{REAL(REALPART(@var{expr}))}.
3155 @xref{Ugly Complex Part Extraction}, for more information.
3157 @node CMPLX() of DOUBLE PRECISION
3158 @subsection @code{CMPLX()} of @code{DOUBLE PRECISION}
3159 @cindex @code{Cmplx} intrinsic
3160 @cindex intrinsics, @code{Cmplx}
3162 In accordance with Fortran 90 and at least some (perhaps all)
3163 other compilers, the GNU Fortran language defines @code{CMPLX()}
3164 as always returning a result that is type @code{COMPLEX(KIND=1)}.
3166 This means @samp{CMPLX(D1,D2)}, where @samp{D1} and @samp{D2}
3167 are @code{REAL(KIND=2)} (@code{DOUBLE PRECISION}), is treated as:
3169 @example
3170 CMPLX(SNGL(D1), SNGL(D2))
3171 @end example
3173 (It was necessary for Fortran 90 to specify this behavior
3174 for @code{DOUBLE PRECISION} arguments, since that is
3175 the behavior mandated by FORTRAN 77.)
3177 The GNU Fortran language also provides the @code{DCMPLX()} intrinsic,
3178 which is provided by some FORTRAN 77 compilers to construct
3179 a @code{DOUBLE COMPLEX} entity from of @code{DOUBLE PRECISION}
3180 operands.
3181 However, this solution does not scale well when more @code{COMPLEX} types
3182 (having various precisions and ranges) are offered by Fortran implementations.
3184 Fortran 90 extends the @code{CMPLX()} intrinsic by adding
3185 an extra argument used to specify the desired kind of complex
3186 result.
3187 However, this solution is somewhat awkward to use, and
3188 @command{g77} currently does not support it.
3190 The GNU Fortran language provides a simple way to build a complex
3191 value out of two numbers, with the precise type of the value
3192 determined by the types of the two numbers (via the usual
3193 type-promotion mechanism):
3195 @example
3196 COMPLEX(@var{real}, @var{imag})
3197 @end example
3199 When @var{real} and @var{imag} are the same @code{REAL} types, @code{COMPLEX()}
3200 performs no conversion other than to put them together to form a
3201 complex result of the same (complex version of real) type.
3203 @xref{Complex Intrinsic}, for more information.
3205 @node MIL-STD 1753
3206 @subsection MIL-STD 1753 Support
3207 @cindex MIL-STD 1753
3209 The GNU Fortran language includes the MIL-STD 1753 intrinsics
3210 @code{BTEST}, @code{IAND}, @code{IBCLR}, @code{IBITS},
3211 @code{IBSET}, @code{IEOR}, @code{IOR}, @code{ISHFT},
3212 @code{ISHFTC}, @code{MVBITS}, and @code{NOT}.
3214 @node f77/f2c Intrinsics
3215 @subsection @command{f77}/@command{f2c} Intrinsics
3217 The bit-manipulation intrinsics supported by traditional
3218 @command{f77} and by @command{f2c} are available in the GNU Fortran language.
3219 These include @code{AND}, @code{LSHIFT}, @code{OR}, @code{RSHIFT},
3220 and @code{XOR}.
3222 Also supported are the intrinsics @code{CDABS},
3223 @code{CDCOS}, @code{CDEXP}, @code{CDLOG}, @code{CDSIN},
3224 @code{CDSQRT}, @code{DCMPLX}, @code{DCONJG}, @code{DFLOAT},
3225 @code{DIMAG}, @code{DREAL}, and @code{IMAG},
3226 @code{ZABS}, @code{ZCOS}, @code{ZEXP}, @code{ZLOG}, @code{ZSIN},
3227 and @code{ZSQRT}.
3229 @node Table of Intrinsic Functions
3230 @subsection Table of Intrinsic Functions
3231 @cindex intrinsics, table of
3232 @cindex table of intrinsics
3234 (Corresponds to Section 15.10 of ANSI X3.9-1978 FORTRAN 77.)
3236 The GNU Fortran language adds various functions, subroutines, types,
3237 and arguments to the set of intrinsic functions in ANSI FORTRAN 77.
3238 The complete set of intrinsics supported by the GNU Fortran language
3239 is described below.
3241 Note that a name is not treated as that of an intrinsic if it is
3242 specified in an @code{EXTERNAL} statement in the same program unit;
3243 if a command-line option is used to disable the groups to which
3244 the intrinsic belongs; or if the intrinsic is not named in an
3245 @code{INTRINSIC} statement and a command-line option is used to
3246 hide the groups to which the intrinsic belongs.
3248 So, it is recommended that any reference in a program unit to
3249 an intrinsic procedure that is not a standard FORTRAN 77
3250 intrinsic be accompanied by an appropriate @code{INTRINSIC}
3251 statement in that program unit.
3252 This sort of defensive programming makes it more
3253 likely that an implementation will issue a diagnostic rather
3254 than generate incorrect code for such a reference.
3256 The terminology used below is based on that of the Fortran 90
3257 standard, so that the text may be more concise and accurate:
3259 @itemize @bullet
3260 @item
3261 @code{OPTIONAL} means the argument may be omitted.
3263 @item
3264 @samp{A-1, A-2, @dots{}, A-n} means more than one argument
3265 (generally named @samp{A}) may be specified.
3267 @item
3268 @samp{scalar} means the argument must not be an array (must
3269 be a variable or array element, or perhaps a constant if expressions
3270 are permitted).
3272 @item
3273 @samp{DIMENSION(4)} means the argument must be an array having 4 elements.
3275 @item
3276 @code{INTENT(IN)} means the argument must be an expression
3277 (such as a constant or a variable that is defined upon invocation
3278 of the intrinsic).
3280 @item
3281 @code{INTENT(OUT)} means the argument must be definable by the
3282 invocation of the intrinsic (that is, must not be a constant nor
3283 an expression involving operators other than array reference and
3284 substring reference).
3286 @item
3287 @code{INTENT(INOUT)} means the argument must be defined prior to,
3288 and definable by, invocation of the intrinsic (a combination of
3289 the requirements of @code{INTENT(IN)} and @code{INTENT(OUT)}.
3291 @item
3292 @xref{Kind Notation}, for an explanation of @code{KIND}.
3293 @end itemize
3295 @ifinfo
3296 (Note that the empty lines appearing in the menu below
3297 are not intentional---they result from a bug in the
3298 GNU @command{makeinfo} program@dots{}a program that, if it
3299 did not exist, would leave this document in far worse shape!)
3300 @end ifinfo
3302 @c The actual documentation for intrinsics comes from
3303 @c intdoc.texi, which in turn is automatically generated
3304 @c from the internal g77 tables in intrin.def _and_ the
3305 @c largely hand-written text in intdoc.h.  So, if you want
3306 @c to change or add to existing documentation on intrinsics,
3307 @c you probably want to edit intdoc.h.
3309 @set familyF77
3310 @set familyGNU
3311 @set familyASC
3312 @set familyMIL
3313 @set familyF90
3314 @clear familyVXT
3315 @clear familyFVZ
3316 @set familyF2C
3317 @set familyF2U
3318 @clear familyBADU77
3319 @include intdoc.texi
3321 @node Scope and Classes of Names
3322 @section Scope and Classes of Symbolic Names
3323 @cindex symbol names, scope and classes
3324 @cindex scope
3326 (The following information augments or overrides the information in
3327 Chapter 18 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
3328 language.
3329 Chapter 18 of that document otherwise serves as the basis
3330 for the relevant aspects of GNU Fortran.)
3332 @menu
3333 * Underscores in Symbol Names::
3334 @end menu
3336 @node Underscores in Symbol Names
3337 @subsection Underscores in Symbol Names
3338 @cindex underscore
3340 Underscores (@samp{_}) are accepted in symbol names after the first
3341 character (which must be a letter).
3343 @node I/O
3344 @section I/O
3346 @cindex dollar sign
3347 A dollar sign at the end of an output format specification suppresses
3348 the newline at the end of the output.
3350 @cindex <> edit descriptor
3351 @cindex edit descriptor, <>
3352 Edit descriptors in @code{FORMAT} statements may contain compile-time
3353 @code{INTEGER} constant expressions in angle brackets, such as
3354 @smallexample
3355 10    FORMAT (I<WIDTH>)
3356 @end smallexample
3358 The @code{OPEN} specifier @code{NAME=} is equivalent to @code{FILE=}.
3360 These Fortran 90 features are supported:
3361 @itemize @bullet
3362 @item
3363 @cindex FORMAT descriptors
3364 @cindex Z edit descriptor
3365 @cindex edit descriptor, Z
3366 @cindex O edit descriptor
3367 @cindex edit descriptor, O
3368 The @code{O} and @code{Z} edit descriptors are supported for I/O of
3369 integers in octal and hexadecimal formats, respectively.
3370 @item
3371 The @code{FILE=} specifier may be omitted in an @code{OPEN} statement if
3372 @code{STATUS='SCRATCH'} is supplied.  The @code{STATUS='REPLACE'}
3373 specifier is supported.
3374 @end itemize
3376 @node Fortran 90 Features
3377 @section Fortran 90 Features
3378 @cindex Fortran 90
3379 @cindex extensions, from Fortran 90
3381 For convenience this section collects a list (probably incomplete) of
3382 the Fortran 90 features supported by the GNU Fortran language, even if
3383 they are documented elsewhere.
3384 @xref{Characters Lines Sequence,,@asis{Characters, Lines, and Execution Sequence}},
3385 for information on additional fixed source form lexical issues.
3386 @cindex @option{-ffree-form}
3387 Further, the free source form is supported through the
3388 @option{-ffree-form} option.
3389 @cindex @option{-ff90}
3390 Other Fortran 90 features can be turned on by the @option{-ff90} option;
3391 see @ref{Fortran 90}.
3392 For information on the Fortran 90 intrinsics available,
3393 see @ref{Table of Intrinsic Functions}.
3395 @table @asis
3396 @item Automatic arrays in procedures
3397 @item Character assignments
3398 @cindex character assignments
3399 In character assignments, the variable being assigned may occur on the
3400 right hand side of the assignment.
3401 @item Character strings
3402 @cindex double quoted character constants
3403 Strings may have zero length and substrings of character constants are
3404 permitted.  Character constants may be enclosed in double quotes
3405 (@code{"}) as well as single quotes.  @xref{Character Type}.
3406 @item Construct names
3407 (Symbolic tags on blocks.)  @xref{Construct Names}.
3408 @item @code{CYCLE} and @code{EXIT}
3409 @xref{CYCLE and EXIT,,The @code{CYCLE} and @code{EXIT} Statements}.
3410 @item @code{DOUBLE COMPLEX}
3411 @xref{DOUBLE COMPLEX,,@code{DOUBLE COMPLEX} Statement}.
3412 @item @code{DO WHILE}
3413 @xref{DO WHILE}.
3414 @item @code{END} decoration
3415 @xref{Statements}.
3416 @item @code{END DO}
3417 @xref{END DO}.
3418 @item @code{KIND}
3419 @item @code{IMPLICIT NONE}
3420 @item @code{INCLUDE} statements
3421 @xref{INCLUDE}.
3422 @item List-directed and namelist I/O on internal files
3423 @item Binary, octal and hexadecimal constants
3424 These are supported more generally than required by Fortran 90.
3425 @xref{Integer Type}.
3426 @item @samp{O} and @samp{Z} edit descriptors
3427 @item @code{NAMELIST}
3428 @xref{NAMELIST}.
3429 @item @code{OPEN} specifiers
3430 @code{STATUS='REPLACE'} is supported.
3431 The @code{FILE=} specifier may be omitted in an @code{OPEN} statement if
3432 @code{STATUS='SCRATCH'} is supplied.
3433 @item @code{FORMAT} edit descriptors
3434 @cindex FORMAT descriptors
3435 @cindex Z edit descriptor
3436 @cindex edit descriptor, Z
3437 The @code{Z} edit descriptor is supported.
3438 @item Relational operators
3439 The operators @code{<}, @code{<=}, @code{==}, @code{/=}, @code{>} and
3440 @code{>=} may be used instead of @code{.LT.}, @code{.LE.}, @code{.EQ.},
3441 @code{.NE.}, @code{.GT.} and @code{.GE.} respectively.
3442 @item @code{SELECT CASE}
3443 Not fully implemented.
3444 @xref{SELECT CASE on CHARACTER Type,, @code{SELECT CASE} on @code{CHARACTER} Type}.
3445 @item Specification statements
3446 A limited subset of the Fortran 90 syntax and semantics for variable
3447 declarations is supported, including @code{KIND}.  @xref{Kind Notation}.
3448 (@code{KIND} is of limited usefulness in the absence of the
3449 @code{KIND}-related intrinsics, since these intrinsics permit writing
3450 more widely portable code.)  An example of supported @code{KIND} usage
3452 @smallexample
3453 INTEGER (KIND=1) :: FOO=1, BAR=2
3454 CHARACTER (LEN=3) FOO
3455 @end smallexample
3456 @code{PARAMETER} and @code{DIMENSION} attributes aren't supported.
3457 @end table
3459 @node Other Dialects
3460 @chapter Other Dialects
3462 GNU Fortran supports a variety of features that are not
3463 considered part of the GNU Fortran language itself, but
3464 are representative of various dialects of Fortran that
3465 @command{g77} supports in whole or in part.
3467 Any of the features listed below might be disallowed by
3468 @command{g77} unless some command-line option is specified.
3469 Currently, some of the features are accepted using the
3470 default invocation of @command{g77}, but that might change
3471 in the future.
3473 @emph{Note: This portion of the documentation definitely needs a lot
3474 of work!}
3476 @menu
3477 * Source Form::       Details of fixed-form and free-form source.
3478 * Trailing Comment::  Use of @samp{/*} to start a comment.
3479 * Debug Line::        Use of @samp{D} in column 1.
3480 * Dollar Signs::      Use of @samp{$} in symbolic names.
3481 * Case Sensitivity::  Uppercase and lowercase in source files.
3482 * VXT Fortran::       @dots{}versus the GNU Fortran language.
3483 * Fortran 90::        @dots{}versus the GNU Fortran language.
3484 * Pedantic Compilation::  Enforcing the standard.
3485 * Distensions::       Misfeatures supported by GNU Fortran.
3486 @end menu
3488 @node Source Form
3489 @section Source Form
3490 @cindex source file format
3491 @cindex source format
3492 @cindex file, source
3493 @cindex source code
3494 @cindex code, source
3495 @cindex fixed form
3496 @cindex free form
3498 GNU Fortran accepts programs written in either fixed form or
3499 free form.
3501 Fixed form
3502 corresponds to ANSI FORTRAN 77 (plus popular extensions, such as
3503 allowing tabs) and Fortran 90's fixed form.
3505 Free form corresponds to
3506 Fortran 90's free form (though possibly not entirely up-to-date, and
3507 without complaining about some things that for which Fortran 90 requires
3508 diagnostics, such as the spaces in the constant in @samp{R = 3 . 1}).
3510 The way a Fortran compiler views source files depends entirely on the
3511 implementation choices made for the compiler, since those choices
3512 are explicitly left to the implementation by the published Fortran
3513 standards.
3514 GNU Fortran currently tries to be somewhat like a few popular compilers
3515 (@command{f2c}, Digital (``DEC'') Fortran, and so on).
3517 This section describes how @command{g77} interprets source lines.
3519 @menu
3520 * Carriage Returns::  Carriage returns ignored.
3521 * Tabs::              Tabs converted to spaces.
3522 * Short Lines::       Short lines padded with spaces (fixed-form only).
3523 * Long Lines::        Long lines truncated.
3524 * Ampersands::        Special Continuation Lines.
3525 @end menu
3527 @node Carriage Returns
3528 @subsection Carriage Returns
3529 @cindex carriage returns
3531 Carriage returns (@samp{\r}) in source lines are ignored.
3532 This is somewhat different from @command{f2c}, which seems to treat them as
3533 spaces outside character/Hollerith constants, and encodes them as @samp{\r}
3534 inside such constants.
3536 @node Tabs
3537 @subsection Tabs
3538 @cindex tab character
3539 @cindex horizontal tab
3541 A source line with a @key{TAB} character anywhere in it is treated as
3542 entirely significant---however long it is---instead of ending in
3543 column 72 (for fixed-form source) or 132 (for free-form source).
3544 This also is different from @command{f2c}, which encodes tabs as
3545 @samp{\t} (the ASCII @key{TAB} character) inside character
3546 and Hollerith constants, but nevertheless seems to treat the column
3547 position as if it had been affected by the canonical tab positioning.
3549 @command{g77} effectively
3550 translates tabs to the appropriate number of spaces (a la the default
3551 for the UNIX @command{expand} command) before doing any other processing, other
3552 than (currently) noting whether a tab was found on a line and using this
3553 information to decide how to interpret the length of the line and continued
3554 constants.
3556 @node Short Lines
3557 @subsection Short Lines
3558 @cindex short source lines
3559 @cindex space, padding with
3560 @cindex source lines, short
3561 @cindex lines, short
3563 Source lines shorter than the applicable fixed-form length are treated as
3564 if they were padded with spaces to that length.
3565 (None of this is relevant to source files written in free form.)
3567 This affects only
3568 continued character and Hollerith constants, and is a different
3569 interpretation than provided by some other popular compilers
3570 (although a bit more consistent with the traditional punched-card
3571 basis of Fortran and the way the Fortran standard expressed fixed
3572 source form).
3574 @command{g77} might someday offer an option to warn about cases where differences
3575 might be seen as a result of this treatment, and perhaps an option to
3576 specify the alternate behavior as well.
3578 Note that this padding cannot apply to lines that are effectively of
3579 infinite length---such lines are specified using command-line options
3580 like @option{-ffixed-line-length-none}, for example.
3582 @node Long Lines
3583 @subsection Long Lines
3584 @cindex long source lines
3585 @cindex truncation, of long lines
3586 @cindex lines, long
3587 @cindex source lines, long
3589 Source lines longer than the applicable length are truncated to that
3590 length.
3591 Currently, @command{g77} does not warn if the truncated characters are
3592 not spaces, to accommodate existing code written for systems that
3593 treated truncated text as commentary (especially in columns 73 through 80).
3595 @xref{Fortran Dialect Options,,Options Controlling Fortran Dialect},
3596 for information on the @option{-ffixed-line-length-@var{n}} option,
3597 which can be used to set the line length applicable to fixed-form
3598 source files.
3600 @node Ampersands
3601 @subsection Ampersand Continuation Line
3602 @cindex ampersand continuation line
3603 @cindex continuation line, ampersand
3605 A @samp{&} in column 1 of fixed-form source denotes an arbitrary-length
3606 continuation line, imitating the behavior of @command{f2c}.
3608 @node Trailing Comment
3609 @section Trailing Comment
3611 @cindex trailing comment
3612 @cindex comment
3613 @cindex characters, comment
3614 @cindex /*
3615 @cindex !
3616 @cindex exclamation point
3617 @command{g77} supports use of @samp{/*} to start a trailing
3618 comment.
3619 In the GNU Fortran language, @samp{!} is used for this purpose.
3621 @samp{/*} is not in the GNU Fortran language
3622 because the use of @samp{/*} in a program might
3623 suggest to some readers that a block, not trailing, comment is
3624 started (and thus ended by @samp{*/}, not end of line),
3625 since that is the meaning of @samp{/*} in C.
3627 Also, such readers might think they can use @samp{//} to start
3628 a trailing comment as an alternative to @samp{/*}, but
3629 @samp{//} already denotes concatenation, and such a ``comment''
3630 might actually result in a program that compiles without
3631 error (though it would likely behave incorrectly).
3633 @node Debug Line
3634 @section Debug Line
3635 @cindex debug line
3636 @cindex comment line, debug
3638 Use of @samp{D} or @samp{d} as the first character (column 1) of
3639 a source line denotes a debug line.
3641 In turn, a debug line is treated as either a comment line
3642 or a normal line, depending on whether debug lines are enabled.
3644 When treated as a comment line, a line beginning with @samp{D} or
3645 @samp{d} is treated as if it the first character was @samp{C} or @samp{c}, respectively.
3646 When treated as a normal line, such a line is treated as if
3647 the first character was @key{SPC} (space).
3649 (Currently, @command{g77} provides no means for treating debug
3650 lines as normal lines.)
3652 @node Dollar Signs
3653 @section Dollar Signs in Symbol Names
3654 @cindex dollar sign
3655 @cindex $
3657 Dollar signs (@samp{$}) are allowed in symbol names (after the first character)
3658 when the @option{-fdollar-ok} option is specified.
3660 @node Case Sensitivity
3661 @section Case Sensitivity
3662 @cindex case sensitivity
3663 @cindex source file format
3664 @cindex code, source
3665 @cindex source code
3666 @cindex uppercase letters
3667 @cindex lowercase letters
3668 @cindex letters, uppercase
3669 @cindex letters, lowercase
3671 GNU Fortran offers the programmer way too much flexibility in deciding
3672 how source files are to be treated vis-a-vis uppercase and lowercase
3673 characters.
3674 There are 66 useful settings that affect case sensitivity, plus 10
3675 settings that are nearly useless, with the remaining 116 settings
3676 being either redundant or useless.
3678 None of these settings have any effect on the contents of comments
3679 (the text after a @samp{c} or @samp{C} in Column 1, for example)
3680 or of character or Hollerith constants.
3681 Note that things like the @samp{E} in the statement
3682 @samp{CALL FOO(3.2E10)} and the @samp{TO} in @samp{ASSIGN 10 TO LAB}
3683 are considered built-in keywords, and so are affected by
3684 these settings.
3686 Low-level switches are identified in this section as follows:
3688 @itemize @w{}
3689 @item A
3690 Source Case Conversion:
3692 @itemize @w{}
3693 @item 0
3694 Preserve (see Note 1)
3695 @item 1
3696 Convert to Upper Case
3697 @item 2
3698 Convert to Lower Case
3699 @end itemize
3701 @item B
3702 Built-in Keyword Matching:
3704 @itemize @w{}
3705 @item 0
3706 Match Any Case (per-character basis)
3707 @item 1
3708 Match Upper Case Only
3709 @item 2
3710 Match Lower Case Only
3711 @item 3
3712 Match InitialCaps Only (see tables for spellings)
3713 @end itemize
3715 @item C
3716 Built-in Intrinsic Matching:
3718 @itemize @w{}
3719 @item 0
3720 Match Any Case (per-character basis)
3721 @item 1
3722 Match Upper Case Only
3723 @item 2
3724 Match Lower Case Only
3725 @item 3
3726 Match InitialCaps Only (see tables for spellings)
3727 @end itemize
3729 @item D
3730 User-defined Symbol Possibilities (warnings only):
3732 @itemize @w{}
3733 @item 0
3734 Allow Any Case (per-character basis)
3735 @item 1
3736 Allow Upper Case Only
3737 @item 2
3738 Allow Lower Case Only
3739 @item 3
3740 Allow InitialCaps Only (see Note 2)
3741 @end itemize
3742 @end itemize
3744 Note 1: @command{g77} eventually will support @code{NAMELIST} in a manner that is
3745 consistent with these source switches---in the sense that input will be
3746 expected to meet the same requirements as source code in terms
3747 of matching symbol names and keywords (for the exponent letters).
3749 Currently, however, @code{NAMELIST} is supported by @code{libg2c},
3750 which uppercases @code{NAMELIST} input and symbol names for matching.
3751 This means not only that @code{NAMELIST} output currently shows symbol
3752 (and keyword) names in uppercase even if lower-case source
3753 conversion (option A2) is selected, but that @code{NAMELIST} cannot be
3754 adequately supported when source case preservation (option A0)
3755 is selected.
3757 If A0 is selected, a warning message will be
3758 output for each @code{NAMELIST} statement to this effect.
3759 The behavior
3760 of the program is undefined at run time if two or more symbol names
3761 appear in a given @code{NAMELIST} such that the names are identical
3762 when converted to upper case (e.g. @samp{NAMELIST /X/ VAR, Var, var}).
3763 For complete and total elegance, perhaps there should be a warning
3764 when option A2 is selected, since the output of NAMELIST is currently
3765 in uppercase but will someday be lowercase (when a @code{libg77} is written),
3766 but that seems to be overkill for a product in beta test.
3768 Note 2: Rules for InitialCaps names are:
3770 @itemize @minus
3771 @item
3772 Must be a single uppercase letter, @strong{or}
3773 @item
3774 Must start with an uppercase letter and contain at least one
3775 lowercase letter.
3776 @end itemize
3778 So @samp{A}, @samp{Ab}, @samp{ABc}, @samp{AbC}, and @samp{Abc} are
3779 valid InitialCaps names, but @samp{AB}, @samp{A2}, and @samp{ABC} are
3780 not.
3781 Note that most, but not all, built-in names meet these
3782 requirements---the exceptions are some of the two-letter format
3783 specifiers, such as @code{BN} and @code{BZ}.
3785 Here are the names of the corresponding command-line options:
3787 @smallexample
3788 A0: -fsource-case-preserve
3789 A1: -fsource-case-upper
3790 A2: -fsource-case-lower
3792 B0: -fmatch-case-any
3793 B1: -fmatch-case-upper
3794 B2: -fmatch-case-lower
3795 B3: -fmatch-case-initcap
3797 C0: -fintrin-case-any
3798 C1: -fintrin-case-upper
3799 C2: -fintrin-case-lower
3800 C3: -fintrin-case-initcap
3802 D0: -fsymbol-case-any
3803 D1: -fsymbol-case-upper
3804 D2: -fsymbol-case-lower
3805 D3: -fsymbol-case-initcap
3806 @end smallexample
3808 Useful combinations of the above settings, along with abbreviated
3809 option names that set some of these combinations all at once:
3811 @smallexample
3812  1: A0--  B0---  C0---  D0---    -fcase-preserve
3813  2: A0--  B0---  C0---  D-1--
3814  3: A0--  B0---  C0---  D--2-
3815  4: A0--  B0---  C0---  D---3
3816  5: A0--  B0---  C-1--  D0---
3817  6: A0--  B0---  C-1--  D-1--
3818  7: A0--  B0---  C-1--  D--2-
3819  8: A0--  B0---  C-1--  D---3
3820  9: A0--  B0---  C--2-  D0---
3821 10: A0--  B0---  C--2-  D-1--
3822 11: A0--  B0---  C--2-  D--2-
3823 12: A0--  B0---  C--2-  D---3
3824 13: A0--  B0---  C---3  D0---
3825 14: A0--  B0---  C---3  D-1--
3826 15: A0--  B0---  C---3  D--2-
3827 16: A0--  B0---  C---3  D---3
3828 17: A0--  B-1--  C0---  D0---
3829 18: A0--  B-1--  C0---  D-1--
3830 19: A0--  B-1--  C0---  D--2-
3831 20: A0--  B-1--  C0---  D---3
3832 21: A0--  B-1--  C-1--  D0---
3833 22: A0--  B-1--  C-1--  D-1--    -fcase-strict-upper
3834 23: A0--  B-1--  C-1--  D--2-
3835 24: A0--  B-1--  C-1--  D---3
3836 25: A0--  B-1--  C--2-  D0---
3837 26: A0--  B-1--  C--2-  D-1--
3838 27: A0--  B-1--  C--2-  D--2-
3839 28: A0--  B-1--  C--2-  D---3
3840 29: A0--  B-1--  C---3  D0---
3841 30: A0--  B-1--  C---3  D-1--
3842 31: A0--  B-1--  C---3  D--2-
3843 32: A0--  B-1--  C---3  D---3
3844 33: A0--  B--2-  C0---  D0---
3845 34: A0--  B--2-  C0---  D-1--
3846 35: A0--  B--2-  C0---  D--2-
3847 36: A0--  B--2-  C0---  D---3
3848 37: A0--  B--2-  C-1--  D0---
3849 38: A0--  B--2-  C-1--  D-1--
3850 39: A0--  B--2-  C-1--  D--2-
3851 40: A0--  B--2-  C-1--  D---3
3852 41: A0--  B--2-  C--2-  D0---
3853 42: A0--  B--2-  C--2-  D-1--
3854 43: A0--  B--2-  C--2-  D--2-    -fcase-strict-lower
3855 44: A0--  B--2-  C--2-  D---3
3856 45: A0--  B--2-  C---3  D0---
3857 46: A0--  B--2-  C---3  D-1--
3858 47: A0--  B--2-  C---3  D--2-
3859 48: A0--  B--2-  C---3  D---3
3860 49: A0--  B---3  C0---  D0---
3861 50: A0--  B---3  C0---  D-1--
3862 51: A0--  B---3  C0---  D--2-
3863 52: A0--  B---3  C0---  D---3
3864 53: A0--  B---3  C-1--  D0---
3865 54: A0--  B---3  C-1--  D-1--
3866 55: A0--  B---3  C-1--  D--2-
3867 56: A0--  B---3  C-1--  D---3
3868 57: A0--  B---3  C--2-  D0---
3869 58: A0--  B---3  C--2-  D-1--
3870 59: A0--  B---3  C--2-  D--2-
3871 60: A0--  B---3  C--2-  D---3
3872 61: A0--  B---3  C---3  D0---
3873 62: A0--  B---3  C---3  D-1--
3874 63: A0--  B---3  C---3  D--2-
3875 64: A0--  B---3  C---3  D---3    -fcase-initcap
3876 65: A-1-  B01--  C01--  D01--    -fcase-upper
3877 66: A--2  B0-2-  C0-2-  D0-2-    -fcase-lower
3878 @end smallexample
3880 Number 22 is the ``strict'' ANSI FORTRAN 77 model wherein all input
3881 (except comments, character constants, and Hollerith strings) must
3882 be entered in uppercase.
3883 Use @option{-fcase-strict-upper} to specify this
3884 combination.
3886 Number 43 is like Number 22 except all input must be lowercase.  Use
3887 @option{-fcase-strict-lower} to specify this combination.
3889 Number 65 is the ``classic'' ANSI FORTRAN 77 model as implemented on many
3890 non-UNIX machines whereby all the source is translated to uppercase.
3891 Use @option{-fcase-upper} to specify this combination.
3893 Number 66 is the ``canonical'' UNIX model whereby all the source is
3894 translated to lowercase.
3895 Use @option{-fcase-lower} to specify this combination.
3897 There are a few nearly useless combinations:
3899 @smallexample
3900 67: A-1-  B01--  C01--  D--2-
3901 68: A-1-  B01--  C01--  D---3
3902 69: A-1-  B01--  C--23  D01--
3903 70: A-1-  B01--  C--23  D--2-
3904 71: A-1-  B01--  C--23  D---3
3905 72: A--2  B01--  C0-2-  D-1--
3906 73: A--2  B01--  C0-2-  D---3
3907 74: A--2  B01--  C-1-3  D0-2-
3908 75: A--2  B01--  C-1-3  D-1--
3909 76: A--2  B01--  C-1-3  D---3
3910 @end smallexample
3912 The above allow some programs to be compiled but with restrictions that
3913 make most useful programs impossible: Numbers 67 and 72 warn about
3914 @emph{any} user-defined symbol names (such as @samp{SUBROUTINE FOO});
3915 Numbers
3916 68 and 73 warn about any user-defined symbol names longer than one
3917 character that don't have at least one non-alphabetic character after
3918 the first;
3919 Numbers 69 and 74 disallow any references to intrinsics;
3920 and Numbers 70, 71, 75, and 76 are combinations of the restrictions in
3921 67+69, 68+69, 72+74, and 73+74, respectively.
3923 All redundant combinations are shown in the above tables anyplace
3924 where more than one setting is shown for a low-level switch.
3925 For example, @samp{B0-2-} means either setting 0 or 2 is valid for switch B.
3926 The ``proper'' setting in such a case is the one that copies the setting
3927 of switch A---any other setting might slightly reduce the speed of
3928 the compiler, though possibly to an unmeasurable extent.
3930 All remaining combinations are useless in that they prevent successful
3931 compilation of non-null source files (source files with something other
3932 than comments).
3934 @node VXT Fortran
3935 @section VXT Fortran
3937 @cindex VXT extensions
3938 @cindex extensions, VXT
3939 @command{g77} supports certain constructs that
3940 have different meanings in VXT Fortran than they
3941 do in the GNU Fortran language.
3943 Generally, this manual uses the invented term VXT Fortran to refer
3944 VAX FORTRAN (circa v4).
3945 That compiler offered many popular features, though not necessarily
3946 those that are specific to the VAX processor architecture,
3947 the VMS operating system,
3948 or Digital Equipment Corporation's Fortran product line.
3949 (VAX and VMS probably are trademarks of Digital Equipment
3950 Corporation.)
3952 An extension offered by a Digital Fortran product that also is
3953 offered by several other Fortran products for different kinds of
3954 systems is probably going to be considered for inclusion in @command{g77}
3955 someday, and is considered a VXT Fortran feature.
3957 The @option{-fvxt} option generally specifies that, where
3958 the meaning of a construct is ambiguous (means one thing
3959 in GNU Fortran and another in VXT Fortran), the VXT Fortran
3960 meaning is to be assumed.
3962 @menu
3963 * Double Quote Meaning::  @samp{"2000} as octal constant.
3964 * Exclamation Point::     @samp{!} in column 6.
3965 @end menu
3967 @node Double Quote Meaning
3968 @subsection Meaning of Double Quote
3969 @cindex double quotes
3970 @cindex character constants
3971 @cindex constants, character
3972 @cindex octal constants
3973 @cindex constants, octal
3975 @command{g77} treats double-quote (@samp{"})
3976 as beginning an octal constant of @code{INTEGER(KIND=1)} type
3977 when the @option{-fvxt} option is specified.
3978 The form of this octal constant is
3980 @example
3981 "@var{octal-digits}
3982 @end example
3984 @noindent
3985 where @var{octal-digits} is a nonempty string of characters in
3986 the set @samp{01234567}.
3988 For example, the @option{-fvxt} option permits this:
3990 @example
3991 PRINT *, "20
3993 @end example
3995 @noindent
3996 The above program would print the value @samp{16}.
3998 @xref{Integer Type}, for information on the preferred construct
3999 for integer constants specified using GNU Fortran's octal notation.
4001 (In the GNU Fortran language, the double-quote character (@samp{"})
4002 delimits a character constant just as does apostrophe (@samp{'}).
4003 There is no way to allow
4004 both constructs in the general case, since statements like
4005 @samp{PRINT *,"2000 !comment?"} would be ambiguous.)
4007 @node Exclamation Point
4008 @subsection Meaning of Exclamation Point in Column 6
4009 @cindex !
4010 @cindex exclamation point
4011 @cindex continuation character
4012 @cindex characters, continuation
4013 @cindex comment character
4014 @cindex characters, comment
4016 @command{g77} treats an exclamation point (@samp{!}) in column 6 of
4017 a fixed-form source file
4018 as a continuation character rather than
4019 as the beginning of a comment
4020 (as it does in any other column)
4021 when the @option{-fvxt} option is specified.
4023 The following program, when run, prints a message indicating
4024 whether it is interpreted according to GNU Fortran (and Fortran 90)
4025 rules or VXT Fortran rules:
4027 @smallexample
4028 C234567  (This line begins in column 1.)
4029       I = 0
4030      !1
4031       IF (I.EQ.0) PRINT *, ' I am a VXT Fortran program'
4032       IF (I.EQ.1) PRINT *, ' I am a Fortran 90 program'
4033       IF (I.LT.0 .OR. I.GT.1) PRINT *, ' I am a HAL 9000 computer'
4034       END
4035 @end smallexample
4037 (In the GNU Fortran and Fortran 90 languages, exclamation point is
4038 a valid character and, unlike space (@key{SPC}) or zero (@samp{0}),
4039 marks a line as a continuation line when it appears in column 6.)
4041 @node Fortran 90
4042 @section Fortran 90
4043 @cindex compatibility, Fortran 90
4044 @cindex Fortran 90, compatibility
4046 The GNU Fortran language includes a number of features that are
4047 part of Fortran 90, even when the @option{-ff90} option is not specified.
4048 The features enabled by @option{-ff90} are intended to be those that,
4049 when @option{-ff90} is not specified, would have another
4050 meaning to @command{g77}---usually meaning something invalid in the
4051 GNU Fortran language.
4053 So, the purpose of @option{-ff90} is not to specify whether @command{g77} is
4054 to gratuitously reject Fortran 90 constructs.
4055 The @option{-pedantic} option specified with @option{-fno-f90} is intended
4056 to do that, although its implementation is certainly incomplete at
4057 this point.
4059 When @option{-ff90} is specified:
4061 @itemize @bullet
4062 @item
4063 The type of @samp{REAL(@var{expr})} and @samp{AIMAG(@var{expr})},
4064 where @var{expr} is @code{COMPLEX} type,
4065 is the same type as the real part of @var{expr}.
4067 For example, assuming @samp{Z} is type @code{COMPLEX(KIND=2)},
4068 @samp{REAL(Z)} would return a value of type @code{REAL(KIND=2)},
4069 not of type @code{REAL(KIND=1)}, since @option{-ff90} is specified.
4070 @end itemize
4072 @node Pedantic Compilation
4073 @section Pedantic Compilation
4074 @cindex pedantic compilation
4075 @cindex compilation, pedantic
4077 The @option{-fpedantic} command-line option specifies that @command{g77}
4078 is to warn about code that is not standard-conforming.
4079 This is useful for finding
4080 some extensions @command{g77} accepts that other compilers might not accept.
4081 (Note that the @option{-pedantic} and @option{-pedantic-errors} options
4082 always imply @option{-fpedantic}.)
4084 With @option{-fno-f90} in force, ANSI FORTRAN 77 is used as the standard
4085 for conforming code.
4086 With @option{-ff90} in force, Fortran 90 is used.
4088 The constructs for which @command{g77} issues diagnostics when @option{-fpedantic}
4089 and @option{-fno-f90} are in force are:
4091 @itemize @bullet
4092 @item
4093 Automatic arrays, as in
4095 @example
4096 SUBROUTINE X(N)
4097 REAL A(N)
4098 @dots{}
4099 @end example
4101 @noindent
4102 where @samp{A} is not listed in any @code{ENTRY} statement,
4103 and thus is not a dummy argument.
4105 @item
4106 The commas in @samp{READ (5), I} and @samp{WRITE (10), J}.
4108 These commas are disallowed by FORTRAN 77, but, while strictly
4109 superfluous, are syntactically elegant,
4110 especially given that commas are required in statements such
4111 as @samp{READ 99, I} and @samp{PRINT *, J}.
4112 Many compilers permit the superfluous commas for this reason.
4114 @item
4115 @code{DOUBLE COMPLEX}, either explicitly or implicitly.
4117 An explicit use of this type is via a @code{DOUBLE COMPLEX} or
4118 @code{IMPLICIT DOUBLE COMPLEX} statement, for examples.
4120 An example of an implicit use is the expression @samp{C*D},
4121 where @samp{C} is @code{COMPLEX(KIND=1)}
4122 and @samp{D} is @code{DOUBLE PRECISION}.
4123 This expression is prohibited by ANSI FORTRAN 77
4124 because the rules of promotion would suggest that it
4125 produce a @code{DOUBLE COMPLEX} result---a type not
4126 provided for by that standard.
4128 @item
4129 Automatic conversion of numeric
4130 expressions to @code{INTEGER(KIND=1)} in contexts such as:
4132 @itemize @minus
4133 @item
4134 Array-reference indexes.
4135 @item
4136 Alternate-return values.
4137 @item
4138 Computed @code{GOTO}.
4139 @item
4140 @code{FORMAT} run-time expressions (not yet supported).
4141 @item
4142 Dimension lists in specification statements.
4143 @item
4144 Numbers for I/O statements (such as @samp{READ (UNIT=3.2), I})
4145 @item
4146 Sizes of @code{CHARACTER} entities in specification statements.
4147 @item
4148 Kind types in specification entities (a Fortran 90 feature).
4149 @item
4150 Initial, terminal, and incrementation parameters for implied-@code{DO}
4151 constructs in @code{DATA} statements.
4152 @end itemize
4154 @item
4155 Automatic conversion of @code{LOGICAL} expressions to @code{INTEGER}
4156 in contexts such as arithmetic @code{IF} (where @code{COMPLEX}
4157 expressions are disallowed anyway).
4159 @item
4160 Zero-size array dimensions, as in:
4162 @example
4163 INTEGER I(10,20,4:2)
4164 @end example
4166 @item
4167 Zero-length @code{CHARACTER} entities, as in:
4169 @example
4170 PRINT *, ''
4171 @end example
4173 @item
4174 Substring operators applied to character constants and named
4175 constants, as in:
4177 @example
4178 PRINT *, 'hello'(3:5)
4179 @end example
4181 @item
4182 Null arguments passed to statement function, as in:
4184 @example
4185 PRINT *, FOO(,3)
4186 @end example
4188 @item
4189 Disagreement among program units regarding whether a given @code{COMMON}
4190 area is @code{SAVE}d (for targets where program units in a single source
4191 file are ``glued'' together as they typically are for UNIX development
4192 environments).
4194 @item
4195 Disagreement among program units regarding the size of a
4196 named @code{COMMON} block.
4198 @item
4199 Specification statements following first @code{DATA} statement.
4201 (In the GNU Fortran language, @samp{DATA I/1/} may be followed by @samp{INTEGER J},
4202 but not @samp{INTEGER I}.
4203 The @option{-fpedantic} option disallows both of these.)
4205 @item
4206 Semicolon as statement separator, as in:
4208 @example
4209 CALL FOO; CALL BAR
4210 @end example
4212 @c @item
4213 @c Comma before list of I/O items in @code{WRITE}
4214 @c  @c, @code{ENCODE}, @code{DECODE}, and @code{REWRITE}
4215 @c statements, as with @code{READ} (as explained above).
4217 @item
4218 Use of @samp{&} in column 1 of fixed-form source (to indicate continuation).
4220 @item
4221 Use of @code{CHARACTER} constants to initialize numeric entities, and vice
4222 versa.
4224 @item
4225 Expressions having two arithmetic operators in a row, such
4226 as @samp{X*-Y}.
4227 @end itemize
4229 If @option{-fpedantic} is specified along with @option{-ff90}, the
4230 following constructs result in diagnostics:
4232 @itemize @bullet
4233 @item
4234 Use of semicolon as a statement separator on a line
4235 that has an @code{INCLUDE} directive.
4236 @end itemize
4238 @node Distensions
4239 @section Distensions
4240 @cindex distensions
4241 @cindex ugly features
4242 @cindex features, ugly
4244 The @option{-fugly-*} command-line options determine whether certain
4245 features supported by VAX FORTRAN and other such compilers, but considered
4246 too ugly to be in code that can be changed to use safer and/or more
4247 portable constructs, are accepted.
4248 These are humorously referred to as ``distensions'',
4249 extensions that just plain look ugly in the harsh light of day.
4251 @menu
4252 * Ugly Implicit Argument Conversion::  Disabled via @option{-fno-ugly-args}.
4253 * Ugly Assumed-Size Arrays::           Enabled via @option{-fugly-assumed}.
4254 * Ugly Null Arguments::                Enabled via @option{-fugly-comma}.
4255 * Ugly Complex Part Extraction::       Enabled via @option{-fugly-complex}.
4256 * Ugly Conversion of Initializers::    Disabled via @option{-fno-ugly-init}.
4257 * Ugly Integer Conversions::           Enabled via @option{-fugly-logint}.
4258 * Ugly Assigned Labels::               Enabled via @option{-fugly-assign}.
4259 @end menu
4261 @node Ugly Implicit Argument Conversion
4262 @subsection Implicit Argument Conversion
4263 @cindex Hollerith constants
4264 @cindex constants, Hollerith
4266 The @option{-fno-ugly-args} option disables
4267 passing typeless and Hollerith constants as actual arguments
4268 in procedure invocations.
4269 For example:
4271 @example
4272 CALL FOO(4HABCD)
4273 CALL BAR('123'O)
4274 @end example
4276 @noindent
4277 These constructs can be too easily used to create non-portable
4278 code, but are not considered as ``ugly'' as others.
4279 Further, they are widely used in existing Fortran source code
4280 in ways that often are quite portable.
4281 Therefore, they are enabled by default.
4283 @node Ugly Assumed-Size Arrays
4284 @subsection Ugly Assumed-Size Arrays
4285 @cindex arrays, assumed-size
4286 @cindex assumed-size arrays
4287 @cindex DIMENSION X(1)
4289 The @option{-fugly-assumed} option enables
4290 the treatment of any array with a final dimension specified as @samp{1}
4291 as an assumed-size array, as if @samp{*} had been specified
4292 instead.
4294 For example, @samp{DIMENSION X(1)} is treated as if it
4295 had read @samp{DIMENSION X(*)} if @samp{X} is listed as
4296 a dummy argument in a preceding @code{SUBROUTINE}, @code{FUNCTION},
4297 or @code{ENTRY} statement in the same program unit.
4299 Use an explicit lower bound to avoid this interpretation.
4300 For example, @samp{DIMENSION X(1:1)} is never treated as if
4301 it had read @samp{DIMENSION X(*)} or @samp{DIMENSION X(1:*)}.
4302 Nor is @samp{DIMENSION X(2-1)} affected by this option,
4303 since that kind of expression is unlikely to have been
4304 intended to designate an assumed-size array.
4306 This option is used to prevent warnings being issued about apparent
4307 out-of-bounds reference such as @samp{X(2) = 99}.
4309 It also prevents the array from being used in contexts that
4310 disallow assumed-size arrays, such as @samp{PRINT *,X}.
4311 In such cases, a diagnostic is generated and the source file is
4312 not compiled.
4314 The construct affected by this option is used only in old code
4315 that pre-exists the widespread acceptance of adjustable and assumed-size
4316 arrays in the Fortran community.
4318 @emph{Note:} This option does not affect how @samp{DIMENSION X(1)} is
4319 treated if @samp{X} is listed as a dummy argument only
4320 @emph{after} the @code{DIMENSION} statement (presumably in
4321 an @code{ENTRY} statement).
4322 For example, @option{-fugly-assumed} has no effect on the
4323 following program unit:
4325 @example
4326 SUBROUTINE X
4327 REAL A(1)
4328 RETURN
4329 ENTRY Y(A)
4330 PRINT *, A
4332 @end example
4334 @node Ugly Complex Part Extraction
4335 @subsection Ugly Complex Part Extraction
4336 @cindex complex values
4337 @cindex real part
4338 @cindex imaginary part
4340 The @option{-fugly-complex} option enables
4341 use of the @code{REAL()} and @code{AIMAG()}
4342 intrinsics with arguments that are
4343 @code{COMPLEX} types other than @code{COMPLEX(KIND=1)}.
4345 With @option{-ff90} in effect, these intrinsics return
4346 the unconverted real and imaginary parts (respectively)
4347 of their argument.
4349 With @option{-fno-f90} in effect, these intrinsics convert
4350 the real and imaginary parts to @code{REAL(KIND=1)}, and return
4351 the result of that conversion.
4353 Due to this ambiguity, the GNU Fortran language defines
4354 these constructs as invalid, except in the specific
4355 case where they are entirely and solely passed as an
4356 argument to an invocation of the @code{REAL()} intrinsic.
4357 For example,
4359 @example
4360 REAL(REAL(Z))
4361 @end example
4363 @noindent
4364 is permitted even when @samp{Z} is @code{COMPLEX(KIND=2)}
4365 and @option{-fno-ugly-complex} is in effect, because the
4366 meaning is clear.
4368 @command{g77} enforces this restriction, unless @option{-fugly-complex}
4369 is specified, in which case the appropriate interpretation is
4370 chosen and no diagnostic is issued.
4372 @xref{CMPAMBIG}, for information on how to cope with existing
4373 code with unclear expectations of @code{REAL()} and @code{AIMAG()}
4374 with @code{COMPLEX(KIND=2)} arguments.
4376 @xref{RealPart Intrinsic}, for information on the @code{REALPART()}
4377 intrinsic, used to extract the real part of a complex expression
4378 without conversion.
4379 @xref{ImagPart Intrinsic}, for information on the @code{IMAGPART()}
4380 intrinsic, used to extract the imaginary part of a complex expression
4381 without conversion.
4383 @node Ugly Null Arguments
4384 @subsection Ugly Null Arguments
4385 @cindex trailing comma
4386 @cindex comma, trailing
4387 @cindex characters, comma
4388 @cindex null arguments
4389 @cindex arguments, null
4391 The @option{-fugly-comma} option enables use of a single trailing comma
4392 to mean ``pass an extra trailing null argument''
4393 in a list of actual arguments to an external procedure,
4394 and use of an empty list of arguments to such a procedure
4395 to mean ``pass a single null argument''.
4397 @cindex omitting arguments
4398 @cindex arguments, omitting
4399 (Null arguments often are used in some procedure-calling
4400 schemes to indicate omitted arguments.)
4402 For example, @samp{CALL FOO(,)} means ``pass
4403 two null arguments'', rather than ``pass one null argument''.
4404 Also, @samp{CALL BAR()} means ``pass one null argument''.
4406 This construct is considered ``ugly'' because it does not
4407 provide an elegant way to pass a single null argument
4408 that is syntactically distinct from passing no arguments.
4409 That is, this construct changes the meaning of code that
4410 makes no use of the construct.
4412 So, with @option{-fugly-comma} in force, @samp{CALL FOO()}
4413 and @samp{I = JFUNC()} pass a single null argument, instead
4414 of passing no arguments as required by the Fortran 77 and
4415 90 standards.
4417 @emph{Note:} Many systems gracefully allow the case
4418 where a procedure call passes one extra argument that the
4419 called procedure does not expect.
4421 So, in practice, there might be no difference in
4422 the behavior of a program that does @samp{CALL FOO()}
4423 or @samp{I = JFUNC()} and is compiled with @option{-fugly-comma}
4424 in force as compared to its behavior when compiled
4425 with the default, @option{-fno-ugly-comma}, in force,
4426 assuming @samp{FOO} and @samp{JFUNC} do not expect any
4427 arguments to be passed.
4429 @node Ugly Conversion of Initializers
4430 @subsection Ugly Conversion of Initializers
4432 The constructs disabled by @option{-fno-ugly-init} are:
4434 @itemize @bullet
4435 @cindex Hollerith constants
4436 @cindex constants, Hollerith
4437 @item
4438 Use of Hollerith and typeless constants in contexts where they set
4439 initial (compile-time) values for variables, arrays, and named
4440 constants---that is, @code{DATA} and @code{PARAMETER} statements, plus
4441 type-declaration statements specifying initial values.
4443 Here are some sample initializations that are disabled by the
4444 @option{-fno-ugly-init} option:
4446 @example
4447 PARAMETER (VAL='9A304FFE'X)
4448 REAL*8 STRING/8HOUTPUT00/
4449 DATA VAR/4HABCD/
4450 @end example
4452 @cindex character constants
4453 @cindex constants, character
4454 @item
4455 In the same contexts as above, use of character constants to initialize
4456 numeric items and vice versa (one constant per item).
4458 Here are more sample initializations that are disabled by the
4459 @option{-fno-ugly-init} option:
4461 @example
4462 INTEGER IA
4463 CHARACTER BELL
4464 PARAMETER (IA = 'A')
4465 PARAMETER (BELL = 7)
4466 @end example
4468 @item
4469 Use of Hollerith and typeless constants on the right-hand side
4470 of assignment statements to numeric types, and in other
4471 contexts (such as passing arguments in invocations of
4472 intrinsic procedures and statement functions) that
4473 are treated as assignments to known types (the dummy
4474 arguments, in these cases).
4476 Here are sample statements that are disabled by the
4477 @option{-fno-ugly-init} option:
4479 @example
4480 IVAR = 4HABCD
4481 PRINT *, IMAX0(2HAB, 2HBA)
4482 @end example
4483 @end itemize
4485 The above constructs, when used,
4486 can tend to result in non-portable code.
4487 But, they are widely used in existing Fortran code in ways
4488 that often are quite portable.
4489 Therefore, they are enabled by default.
4491 @node Ugly Integer Conversions
4492 @subsection Ugly Integer Conversions
4494 The constructs enabled via @option{-fugly-logint} are:
4496 @itemize @bullet
4497 @item
4498 Automatic conversion between @code{INTEGER} and @code{LOGICAL} as
4499 dictated by
4500 context (typically implies nonportable dependencies on how a
4501 particular implementation encodes @code{.TRUE.} and @code{.FALSE.}).
4503 @item
4504 Use of a @code{LOGICAL} variable in @code{ASSIGN} and assigned-@code{GOTO}
4505 statements.
4506 @end itemize
4508 The above constructs are disabled by default because use
4509 of them tends to lead to non-portable code.
4510 Even existing Fortran code that uses that often turns out
4511 to be non-portable, if not outright buggy.
4513 Some of this is due to differences among implementations as
4514 far as how @code{.TRUE.} and @code{.FALSE.} are encoded as
4515 @code{INTEGER} values---Fortran code that assumes a particular
4516 coding is likely to use one of the above constructs, and is
4517 also likely to not work correctly on implementations using
4518 different encodings.
4520 @xref{Equivalence Versus Equality}, for more information.
4522 @node Ugly Assigned Labels
4523 @subsection Ugly Assigned Labels
4524 @cindex ASSIGN statement
4525 @cindex statements, ASSIGN
4526 @cindex assigned labels
4527 @cindex pointers
4529 The @option{-fugly-assign} option forces @command{g77} to use the
4530 same storage for assigned labels as it would for a normal
4531 assignment to the same variable.
4533 For example, consider the following code fragment:
4535 @example
4536 I = 3
4537 ASSIGN 10 TO I
4538 @end example
4540 @noindent
4541 Normally, for portability and improved diagnostics, @command{g77}
4542 reserves distinct storage for a ``sibling'' of @samp{I}, used
4543 only for @code{ASSIGN} statements to that variable (along with
4544 the corresponding assigned-@code{GOTO} and assigned-@code{FORMAT}-I/O
4545 statements that reference the variable).
4547 However, some code (that violates the ANSI FORTRAN 77 standard)
4548 attempts to copy assigned labels among variables involved with
4549 @code{ASSIGN} statements, as in:
4551 @example
4552 ASSIGN 10 TO I
4553 ISTATE(5) = I
4554 @dots{}
4555 J = ISTATE(ICUR)
4556 GOTO J
4557 @end example
4559 @noindent
4560 Such code doesn't work under @command{g77} unless @option{-fugly-assign}
4561 is specified on the command-line, ensuring that the value of @code{I}
4562 referenced in the second line is whatever value @command{g77} uses
4563 to designate statement label @samp{10}, so the value may be
4564 copied into the @samp{ISTATE} array, later retrieved into a
4565 variable of the appropriate type (@samp{J}), and used as the target of
4566 an assigned-@code{GOTO} statement.
4568 @emph{Note:} To avoid subtle program bugs,
4569 when @option{-fugly-assign} is specified,
4570 @command{g77} requires the type of variables
4571 specified in assigned-label contexts
4572 @emph{must} be the same type returned by @code{%LOC()}.
4573 On many systems, this type is effectively the same
4574 as @code{INTEGER(KIND=1)}, while, on others, it is
4575 effectively the same as @code{INTEGER(KIND=2)}.
4577 Do @emph{not} depend on @command{g77} actually writing valid pointers
4578 to these variables, however.
4579 While @command{g77} currently chooses that implementation, it might
4580 be changed in the future.
4582 @xref{Assigned Statement Labels,,Assigned Statement Labels (ASSIGN and GOTO)},
4583 for implementation details on assigned-statement labels.
4585 @node Compiler
4586 @chapter The GNU Fortran Compiler
4588 The GNU Fortran compiler, @command{g77}, supports programs written
4589 in the GNU Fortran language and in some other dialects of Fortran.
4591 Some aspects of how @command{g77} works are universal regardless
4592 of dialect, and yet are not properly part of the GNU Fortran
4593 language itself.
4594 These are described below.
4596 @emph{Note: This portion of the documentation definitely needs a lot
4597 of work!}
4599 @menu
4600 * Compiler Limits::
4601 * Run-time Environment Limits::
4602 * Compiler Types::
4603 * Compiler Constants::
4604 * Compiler Intrinsics::
4605 @end menu
4607 @node Compiler Limits
4608 @section Compiler Limits
4609 @cindex limits, compiler
4610 @cindex compiler limits
4612 @command{g77}, as with GNU tools in general, imposes few arbitrary restrictions
4613 on lengths of identifiers, number of continuation lines, number of external
4614 symbols in a program, and so on.
4616 @cindex options, -Nl
4617 @cindex -Nl option
4618 @cindex options, -Nx
4619 @cindex -Nx option
4620 @cindex limits, continuation lines
4621 @cindex limits, lengths of names
4622 For example, some other Fortran compiler have an option
4623 (such as @option{-Nl@var{x}}) to increase the limit on the
4624 number of continuation lines.
4625 Also, some Fortran compilation systems have an option
4626 (such as @option{-Nx@var{x}}) to increase the limit on the
4627 number of external symbols.
4629 @command{g77}, @command{gcc}, and GNU @command{ld} (the GNU linker) have
4630 no equivalent options, since they do not impose arbitrary
4631 limits in these areas.
4633 @cindex rank, maximum
4634 @cindex maximum rank
4635 @cindex number of dimensions, maximum
4636 @cindex maximum number of dimensions
4637 @cindex limits, rank
4638 @cindex limits, array dimensions
4639 @command{g77} does currently limit the number of dimensions in an array
4640 to the same degree as do the Fortran standards---seven (7).
4641 This restriction might be lifted in a future version.
4643 @node Run-time Environment Limits
4644 @section Run-time Environment Limits
4645 @cindex limits, run-time library
4646 @cindex wraparound
4648 As a portable Fortran implementation,
4649 @command{g77} offers its users direct access to,
4650 and otherwise depends upon,
4651 the underlying facilities of the system
4652 used to build @command{g77},
4653 the system on which @command{g77} itself is used to compile programs,
4654 and the system on which the @command{g77}-compiled program is actually run.
4655 (For most users, the three systems are of the same
4656 type---combination of operating environment and hardware---often
4657 the same physical system.)
4659 The run-time environment for a particular system
4660 inevitably imposes some limits on a program's use
4661 of various system facilities.
4662 These limits vary from system to system.
4664 Even when such limits might be well beyond the
4665 possibility of being encountered on a particular system,
4666 the @command{g77} run-time environment
4667 has certain built-in limits,
4668 usually, but not always, stemming from intrinsics
4669 with inherently limited interfaces.
4671 Currently, the @command{g77} run-time environment
4672 does not generally offer a less-limiting environment
4673 by augmenting the underlying system's own environment.
4675 Therefore, code written in the GNU Fortran language,
4676 while syntactically and semantically portable,
4677 might nevertheless make non-portable assumptions
4678 about the run-time environment---assumptions that
4679 prove to be false for some particular environments.
4681 The GNU Fortran language,
4682 the @command{g77} compiler and run-time environment,
4683 and the @command{g77} documentation
4684 do not yet offer comprehensive portable work-arounds for such limits,
4685 though programmers should be able to
4686 find their own in specific instances.
4688 Not all of the limitations are described in this document.
4689 Some of the known limitations include:
4691 @menu
4692 * Timer Wraparounds::
4693 * Year 2000 (Y2K) Problems::
4694 * Array Size::
4695 * Character-variable Length::
4696 * Year 10000 (Y10K) Problems::
4697 @end menu
4699 @node Timer Wraparounds
4700 @subsection Timer Wraparounds
4702 Intrinsics that return values computed from system timers,
4703 whether elapsed (wall-clock) timers,
4704 process CPU timers,
4705 or other kinds of timers,
4706 are prone to experiencing wrap-around errors
4707 (or returning wrapped-around values from successive calls)
4708 due to insufficient ranges
4709 offered by the underlying system's timers.
4711 @cindex negative time
4712 @cindex short time
4713 @cindex long time
4714 Some of the symptoms of such behaviors include
4715 apparently negative time being computed for a duration,
4716 an extremely short amount of time being computed for a long duration,
4717 and an extremely long amount of time being computed for a short duration.
4719 See the following for intrinsics
4720 known to have potential problems in these areas
4721 on at least some systems:
4722 @ref{CPU_Time Intrinsic},
4723 @ref{DTime Intrinsic (function)}, @ref{DTime Intrinsic (subroutine)},
4724 @ref{ETime Intrinsic (function)}, @ref{ETime Intrinsic (subroutine)},
4725 @ref{MClock Intrinsic}, @ref{MClock8 Intrinsic},
4726 @ref{Secnds Intrinsic},
4727 @ref{Second Intrinsic (function)}, @ref{Second Intrinsic (subroutine)},
4728 @ref{System_Clock Intrinsic},
4729 @ref{Time Intrinsic (UNIX)}, @ref{Time Intrinsic (VXT)},
4730 @ref{Time8 Intrinsic}.
4732 @node Year 2000 (Y2K) Problems
4733 @subsection Year 2000 (Y2K) Problems
4734 @cindex Y2K compliance
4735 @cindex Year 2000 compliance
4737 While the @command{g77} compiler itself is believed to
4738 be Year-2000 (Y2K) compliant,
4739 some intrinsics are not,
4740 and, potentially, some underlying systems are not,
4741 perhaps rendering some Y2K-compliant intrinsics
4742 non-compliant when used on those particular systems.
4744 Fortran code that uses non-Y2K-compliant intrinsics
4745 (listed below)
4746 is, itself, almost certainly not compliant,
4747 and should be modified to use Y2K-compliant intrinsics instead.
4749 Fortran code that uses no non-Y2K-compliant intrinsics,
4750 but which currently is running on a non-Y2K-compliant system,
4751 can be made more Y2K compliant by compiling and
4752 linking it for use on a new Y2K-compliant system,
4753 such as a new version of an old, non-Y2K-compliant, system.
4755 Currently, information on Y2K and related issues
4756 is being maintained at
4757 @uref{http://www.gnu.org/software/year2000-list.html}.
4759 See the following for intrinsics
4760 known to have potential problems in these areas
4761 on at least some systems:
4762 @ref{Date Intrinsic},
4763 @ref{IDate Intrinsic (VXT)}.
4765 @cindex y2kbuggy
4766 @cindex date_y2kbuggy_0
4767 @cindex vxtidate_y2kbuggy_0
4768 @cindex G77_date_y2kbuggy_0
4769 @cindex G77_vxtidate_y2kbuggy_0
4770 The @code{libg2c} library
4771 shipped with any @command{g77} that warns
4772 about invocation of a non-Y2K-compliant intrinsic
4773 has renamed the @code{EXTERNAL} procedure names
4774 of those intrinsics.
4775 This is done so that
4776 the @code{libg2c} implementations of these intrinsics
4777 cannot be directly linked to
4778 as @code{EXTERNAL} names
4779 (which normally would avoid the non-Y2K-intrinsic warning).
4781 The renamed forms of the @code{EXTERNAL} names
4782 of these renamed procedures
4783 may be linked to
4784 by appending the string @samp{_y2kbug}
4785 to the name of the procedure
4786 in the source code.
4787 For example:
4789 @smallexample
4790 CHARACTER*20 STR
4791 INTEGER YY, MM, DD
4792 EXTERNAL DATE_Y2KBUG, VXTIDATE_Y2KBUG
4793 CALL DATE_Y2KBUG (STR)
4794 CALL VXTIDATE_Y2KBUG (MM, DD, YY)
4795 @end smallexample
4797 (Note that the @code{EXTERNAL} statement
4798 is not actually required,
4799 since the modified names are not recognized as intrinsics
4800 by the current version of @command{g77}.
4801 But it is shown in this specific case,
4802 for purposes of illustration.)
4804 The renaming of @code{EXTERNAL} procedure names of these intrinsics
4805 causes unresolved references at link time.
4806 For example, @samp{EXTERNAL DATE; CALL DATE(STR)}
4807 is normally compiled by @command{g77}
4808 as, in C, @samp{date_(&str, 20);}.
4809 This, in turn, links to the @code{date_} procedure
4810 in the @code{libE77} portion of @code{libg2c},
4811 which purposely calls a nonexistent procedure
4812 named @code{G77_date_y2kbuggy_0}.
4813 The resulting link-time error is designed, via this name,
4814 to encourage the programmer to look up the
4815 index entries to this portion of the @command{g77} documentation.
4817 Generally, we recommend that the @code{EXTERNAL} method
4818 of invoking procedures in @code{libg2c}
4819 @emph{not} be used.
4820 When used, some of the correctness checking
4821 normally performed by @command{g77}
4822 is skipped.
4824 In particular, it is probably better to use the
4825 @code{INTRINSIC} method of invoking
4826 non-Y2K-compliant procedures,
4827 so anyone compiling the code
4828 can quickly notice the potential Y2K problems
4829 (via the warnings printing by @command{g77})
4830 without having to even look at the code itself.
4832 If there are problems linking @code{libg2c}
4833 to code compiled by @command{g77}
4834 that involve the string @samp{y2kbug},
4835 and these are not explained above,
4836 that probably indicates
4837 that a version of @code{libg2c}
4838 older than @command{g77}
4839 is being linked to,
4840 or that the new library is being linked
4841 to code compiled by an older version of @command{g77}.
4843 That's because, as of the version that warns about
4844 non-Y2K-compliant intrinsic invocation,
4845 @command{g77} references the @code{libg2c} implementations
4846 of those intrinsics
4847 using new names, containing the string @samp{y2kbug}.
4849 So, linking newly-compiled code
4850 (invoking one of the intrinsics in question)
4851 to an old library
4852 might yield an unresolved reference
4853 to @code{G77_date_y2kbug_0}.
4854 (The old library calls it @code{G77_date_0}.)
4856 Similarly, linking previously-compiled code
4857 to a new library
4858 might yield an unresolved reference
4859 to @code{G77_vxtidate_0}.
4860 (The new library calls it @code{G77_vxtidate_y2kbug_0}.)
4862 The proper fix for the above problems
4863 is to obtain the latest release of @command{g77}
4864 and related products
4865 (including @code{libg2c})
4866 and install them on all systems,
4867 then recompile, relink, and install
4868 (as appropriate)
4869 all existing Fortran programs.
4871 (Normally, this sort of renaming is steadfastly avoided.
4872 In this case, however, it seems more important to highlight
4873 potential Y2K problems
4874 than to ease the transition
4875 of potentially non-Y2K-compliant code
4876 to new versions of @command{g77} and @code{libg2c}.)
4878 @node Array Size
4879 @subsection Array Size
4880 @cindex limits, array size
4881 @cindex array size
4883 Currently, @command{g77} uses the default @code{INTEGER} type
4884 for array indexes,
4885 which limits the sizes of single-dimension arrays
4886 on systems offering a larger address space
4887 than can be addressed by that type.
4888 (That @command{g77} puts all arrays in memory
4889 could be considered another limitation---it
4890 could use large temporary files---but that decision
4891 is left to the programmer as an implementation choice
4892 by most Fortran implementations.)
4894 @c ??? Investigate this, to offer a more clear statement
4895 @c than the following paragraphs do.  -- burley 1999-02-17
4896 It is not yet clear whether this limitation
4897 never, sometimes, or always applies to the
4898 sizes of multiple-dimension arrays as a whole.
4900 For example, on a system with 64-bit addresses
4901 and 32-bit default @code{INTEGER},
4902 an array with a size greater than can be addressed
4903 by a 32-bit offset
4904 can be declared using multiple dimensions.
4905 Such an array is therefore larger
4906 than a single-dimension array can be,
4907 on the same system.
4909 @cindex limits, multi-dimension arrays
4910 @cindex multi-dimension arrays
4911 @cindex arrays, dimensioning
4912 Whether large multiple-dimension arrays are reliably supported
4913 depends mostly on the @command{gcc} back end (code generator)
4914 used by @command{g77}, and has not yet been fully investigated.
4916 @node Character-variable Length
4917 @subsection Character-variable Length
4918 @cindex limits, on character-variable length
4919 @cindex character-variable length
4921 Currently, @command{g77} uses the default @code{INTEGER} type
4922 for the lengths of @code{CHARACTER} variables
4923 and array elements.
4925 This means that, for example,
4926 a system with a 64-bit address space
4927 and a 32-bit default @code{INTEGER} type
4928 does not, under @command{g77},
4929 support a @code{CHARACTER*@var{n}} declaration
4930 where @var{n} is greater than 2147483647.
4932 @node Year 10000 (Y10K) Problems
4933 @subsection Year 10000 (Y10K) Problems
4934 @cindex Y10K compliance
4935 @cindex Year 10000 compliance
4937 Most intrinsics returning, or computing values based on,
4938 date information are prone to Year-10000 (Y10K) problems,
4939 due to supporting only 4 digits for the year.
4941 See the following for examples:
4942 @ref{FDate Intrinsic (function)}, @ref{FDate Intrinsic (subroutine)},
4943 @ref{IDate Intrinsic (UNIX)},
4944 @ref{Time Intrinsic (VXT)},
4945 @ref{Date_and_Time Intrinsic}.
4947 @node Compiler Types
4948 @section Compiler Types
4949 @cindex types, of data
4950 @cindex data types
4952 Fortran implementations have a fair amount of freedom given them by the
4953 standard as far as how much storage space is used and how much precision
4954 and range is offered by the various types such as @code{LOGICAL(KIND=1)},
4955 @code{INTEGER(KIND=1)}, @code{REAL(KIND=1)}, @code{REAL(KIND=2)},
4956 @code{COMPLEX(KIND=1)}, and @code{CHARACTER}.
4957 Further, many compilers offer so-called @samp{*@var{n}} notation, but
4958 the interpretation of @var{n} varies across compilers and target architectures.
4960 The standard requires that @code{LOGICAL(KIND=1)}, @code{INTEGER(KIND=1)},
4961 and @code{REAL(KIND=1)}
4962 occupy the same amount of storage space, and that @code{COMPLEX(KIND=1)}
4963 and @code{REAL(KIND=2)} take twice as much storage space as @code{REAL(KIND=1)}.
4964 Further, it requires that @code{COMPLEX(KIND=1)}
4965 entities be ordered such that when a @code{COMPLEX(KIND=1)} variable is
4966 storage-associated (such as via @code{EQUIVALENCE})
4967 with a two-element @code{REAL(KIND=1)} array named @samp{R}, @samp{R(1)}
4968 corresponds to the real element and @samp{R(2)} to the imaginary
4969 element of the @code{COMPLEX(KIND=1)} variable.
4971 (Few requirements as to precision or ranges of any of these are
4972 placed on the implementation, nor is the relationship of storage sizes of
4973 these types to the @code{CHARACTER} type specified, by the standard.)
4975 @command{g77} follows the above requirements, warning when compiling
4976 a program requires placement of items in memory that contradict the
4977 requirements of the target architecture.
4978 (For example, a program can require placement of a @code{REAL(KIND=2)}
4979 on a boundary that is not an even multiple of its size, but still an
4980 even multiple of the size of a @code{REAL(KIND=1)} variable.
4981 On some target architectures, using the canonical
4982 mapping of Fortran types to underlying architectural types, such
4983 placement is prohibited by the machine definition or
4984 the Application Binary Interface (ABI) in force for
4985 the configuration defined for building @command{gcc} and @command{g77}.
4986 @command{g77} warns about such
4987 situations when it encounters them.)
4989 @command{g77} follows consistent rules for configuring the mapping between Fortran
4990 types, including the @samp{*@var{n}} notation, and the underlying architectural
4991 types as accessed by a similarly-configured applicable version of the
4992 @command{gcc} compiler.
4993 These rules offer a widely portable, consistent Fortran/C
4994 environment, although they might well conflict with the expectations of
4995 users of Fortran compilers designed and written for particular
4996 architectures.
4998 These rules are based on the configuration that is in force for the
4999 version of @command{gcc} built in the same release as @command{g77} (and
5000 which was therefore used to build both the @command{g77} compiler
5001 components and the @code{libg2c} run-time library):
5003 @table @code
5004 @cindex REAL(KIND=1) type
5005 @cindex types, REAL(KIND=1)
5006 @item REAL(KIND=1)
5007 Same as @code{float} type.
5009 @cindex REAL(KIND=2) type
5010 @cindex types, REAL(KIND=2)
5011 @item REAL(KIND=2)
5012 Same as whatever floating-point type that is twice the size
5013 of a @code{float}---usually, this is a @code{double}.
5015 @cindex INTEGER(KIND=1) type
5016 @cindex types, INTEGER(KIND=1)
5017 @item INTEGER(KIND=1)
5018 Same as an integral type that is occupies the same amount
5019 of memory storage as @code{float}---usually, this is either
5020 an @code{int} or a @code{long int}.
5022 @cindex LOGICAL(KIND=1) type
5023 @cindex types, LOGICAL(KIND=1)
5024 @item LOGICAL(KIND=1)
5025 Same @command{gcc} type as @code{INTEGER(KIND=1)}.
5027 @cindex INTEGER(KIND=2) type
5028 @cindex types, INTEGER(KIND=2)
5029 @item INTEGER(KIND=2)
5030 Twice the size, and usually nearly twice the range,
5031 as @code{INTEGER(KIND=1)}---usually, this is either
5032 a @code{long int} or a @code{long long int}.
5034 @cindex LOGICAL(KIND=2) type
5035 @cindex types, LOGICAL(KIND=2)
5036 @item LOGICAL(KIND=2)
5037 Same @command{gcc} type as @code{INTEGER(KIND=2)}.
5039 @cindex INTEGER(KIND=3) type
5040 @cindex types, INTEGER(KIND=3)
5041 @item INTEGER(KIND=3)
5042 Same @command{gcc} type as signed @code{char}.
5044 @cindex LOGICAL(KIND=3) type
5045 @cindex types, LOGICAL(KIND=3)
5046 @item LOGICAL(KIND=3)
5047 Same @command{gcc} type as @code{INTEGER(KIND=3)}.
5049 @cindex INTEGER(KIND=6) type
5050 @cindex types, INTEGER(KIND=6)
5051 @item INTEGER(KIND=6)
5052 Twice the size, and usually nearly twice the range,
5053 as @code{INTEGER(KIND=3)}---usually, this is
5054 a @code{short}.
5056 @cindex LOGICAL(KIND=6) type
5057 @cindex types, LOGICAL(KIND=6)
5058 @item LOGICAL(KIND=6)
5059 Same @command{gcc} type as @code{INTEGER(KIND=6)}.
5061 @cindex COMPLEX(KIND=1) type
5062 @cindex types, COMPLEX(KIND=1)
5063 @item COMPLEX(KIND=1)
5064 Two @code{REAL(KIND=1)} scalars (one for the real part followed by
5065 one for the imaginary part).
5067 @cindex COMPLEX(KIND=2) type
5068 @cindex types, COMPLEX(KIND=2)
5069 @item COMPLEX(KIND=2)
5070 Two @code{REAL(KIND=2)} scalars.
5072 @cindex *@var{n} notation
5073 @item @var{numeric-type}*@var{n}
5074 (Where @var{numeric-type} is any type other than @code{CHARACTER}.)
5075 Same as whatever @command{gcc} type occupies @var{n} times the storage
5076 space of a @command{gcc} @code{char} item.
5078 @cindex DOUBLE PRECISION type
5079 @cindex types, DOUBLE PRECISION
5080 @item DOUBLE PRECISION
5081 Same as @code{REAL(KIND=2)}.
5083 @cindex DOUBLE COMPLEX type
5084 @cindex types, DOUBLE COMPLEX
5085 @item DOUBLE COMPLEX
5086 Same as @code{COMPLEX(KIND=2)}.
5087 @end table
5089 Note that the above are proposed correspondences and might change
5090 in future versions of @command{g77}---avoid writing code depending
5091 on them.
5093 Other types supported by @command{g77}
5094 are derived from gcc types such as @code{char}, @code{short},
5095 @code{int}, @code{long int}, @code{long long int}, @code{long double},
5096 and so on.
5097 That is, whatever types @command{gcc} already supports, @command{g77} supports
5098 now or probably will support in a future version.
5099 The rules for the @samp{@var{numeric-type}*@var{n}} notation
5100 apply to these types,
5101 and new values for @samp{@var{numeric-type}(KIND=@var{n})} will be
5102 assigned in a way that encourages clarity, consistency, and portability.
5104 @node Compiler Constants
5105 @section Compiler Constants
5106 @cindex constants
5107 @cindex types, constants
5109 @command{g77} strictly assigns types to @emph{all} constants not
5110 documented as ``typeless'' (typeless constants including @samp{'1'Z},
5111 for example).
5112 Many other Fortran compilers attempt to assign types to typed constants
5113 based on their context.
5114 This results in hard-to-find bugs, nonportable
5115 code, and is not in the spirit (though it strictly follows the letter)
5116 of the 77 and 90 standards.
5118 @command{g77} might offer, in a future release, explicit constructs by
5119 which a wider variety of typeless constants may be specified, and/or
5120 user-requested warnings indicating places where @command{g77} might differ
5121 from how other compilers assign types to constants.
5123 @xref{Context-Sensitive Constants}, for more information on this issue.
5125 @node Compiler Intrinsics
5126 @section Compiler Intrinsics
5128 @command{g77} offers an ever-widening set of intrinsics.
5129 Currently these all are procedures (functions and subroutines).
5131 Some of these intrinsics are unimplemented, but their names reserved
5132 to reduce future problems with existing code as they are implemented.
5133 Others are implemented as part of the GNU Fortran language, while
5134 yet others are provided for compatibility with other dialects of
5135 Fortran but are not part of the GNU Fortran language.
5137 To manage these distinctions, @command{g77} provides intrinsic @emph{groups},
5138 a facility that is simply an extension of the intrinsic groups provided
5139 by the GNU Fortran language.
5141 @menu
5142 * Intrinsic Groups::  How intrinsics are grouped for easy management.
5143 * Other Intrinsics::  Intrinsics other than those in the GNU
5144                        Fortran language.
5145 @end menu
5147 @node Intrinsic Groups
5148 @subsection Intrinsic Groups
5149 @cindex groups of intrinsics
5150 @cindex intrinsics, groups
5152 A given specific intrinsic belongs in one or more groups.
5153 Each group is deleted, disabled, hidden, or enabled
5154 by default or a command-line option.
5155 The meaning of each term follows.
5157 @table @b
5158 @cindex deleted intrinsics
5159 @cindex intrinsics, deleted
5160 @item Deleted
5161 No intrinsics are recognized as belonging to that group.
5163 @cindex disabled intrinsics
5164 @cindex intrinsics, disabled
5165 @item Disabled
5166 Intrinsics are recognized as belonging to the group, but
5167 references to them (other than via the @code{INTRINSIC} statement)
5168 are disallowed through that group.
5170 @cindex hidden intrinsics
5171 @cindex intrinsics, hidden
5172 @item Hidden
5173 Intrinsics in that group are recognized and enabled (if implemented)
5174 @emph{only} if the first mention of the actual name of an intrinsic
5175 in a program unit is in an @code{INTRINSIC} statement.
5177 @cindex enabled intrinsics
5178 @cindex intrinsics, enabled
5179 @item Enabled
5180 Intrinsics in that group are recognized and enabled (if implemented).
5181 @end table
5183 The distinction between deleting and disabling a group is illustrated
5184 by the following example.
5185 Assume intrinsic @samp{FOO} belongs only to group @samp{FGR}.
5186 If group @samp{FGR} is deleted, the following program unit will
5187 successfully compile, because @samp{FOO()} will be seen as a
5188 reference to an external function named @samp{FOO}:
5190 @example
5191 PRINT *, FOO()
5193 @end example
5195 @noindent
5196 If group @samp{FGR} is disabled, compiling the above program will produce
5197 diagnostics, either because the @samp{FOO} intrinsic is improperly invoked
5198 or, if properly invoked, it is not enabled.
5199 To change the above program so it references an external function @samp{FOO}
5200 instead of the disabled @samp{FOO} intrinsic,
5201 add the following line to the top:
5203 @example
5204 EXTERNAL FOO
5205 @end example
5207 @noindent
5208 So, deleting a group tells @command{g77} to pretend as though the intrinsics in
5209 that group do not exist at all, whereas disabling it tells @command{g77} to
5210 recognize them as (disabled) intrinsics in intrinsic-like contexts.
5212 Hiding a group is like enabling it, but the intrinsic must be first
5213 named in an @code{INTRINSIC} statement to be considered a reference to the
5214 intrinsic rather than to an external procedure.
5215 This might be the ``safest'' way to treat a new group of intrinsics
5216 when compiling old
5217 code, because it allows the old code to be generally written as if
5218 those new intrinsics never existed, but to be changed to use them
5219 by inserting @code{INTRINSIC} statements in the appropriate places.
5220 However, it should be the goal of development to use @code{EXTERNAL}
5221 for all names of external procedures that might be intrinsic names.
5223 If an intrinsic is in more than one group, it is enabled if any of its
5224 containing groups are enabled; if not so enabled, it is hidden if
5225 any of its containing groups are hidden; if not so hidden, it is disabled
5226 if any of its containing groups are disabled; if not so disabled, it is
5227 deleted.
5228 This extra complication is necessary because some intrinsics,
5229 such as @code{IBITS}, belong to more than one group, and hence should be
5230 enabled if any of the groups to which they belong are enabled, and so
5233 The groups are:
5235 @cindex intrinsics, groups of
5236 @cindex groups of intrinsics
5237 @table @code
5238 @cindex @code{badu77} intrinsics group
5239 @item badu77
5240 UNIX intrinsics having inappropriate forms (usually functions that
5241 have intended side effects).
5243 @cindex @code{gnu} intrinsics group
5244 @item gnu
5245 Intrinsics the GNU Fortran language supports that are extensions to
5246 the Fortran standards (77 and 90).
5248 @cindex @command{f2c} intrinsics group
5249 @item f2c
5250 Intrinsics supported by AT&T's @command{f2c} converter and/or @code{libf2c}.
5252 @cindex @code{f90} intrinsics group
5253 @item f90
5254 Fortran 90 intrinsics.
5256 @cindex @code{mil} intrinsics group
5257 @item mil
5258 MIL-STD 1753 intrinsics (@code{MVBITS}, @code{IAND}, @code{BTEST}, and so on).
5260 @cindex @code{mil} intrinsics group
5261 @item unix
5262 UNIX intrinsics (@code{IARGC}, @code{EXIT}, @code{ERF}, and so on).
5264 @cindex @code{mil} intrinsics group
5265 @item vxt
5266 VAX/VMS FORTRAN (current as of v4) intrinsics.
5267 @end table
5269 @node Other Intrinsics
5270 @subsection Other Intrinsics
5271 @cindex intrinsics, others
5272 @cindex other intrinsics
5274 @command{g77} supports intrinsics other than those in the GNU Fortran
5275 language proper.
5276 This set of intrinsics is described below.
5278 @ifinfo
5279 (Note that the empty lines appearing in the menu below
5280 are not intentional---they result from a bug in the
5281 @code{makeinfo} program.)
5282 @end ifinfo
5284 @c The actual documentation for intrinsics comes from
5285 @c intdoc.texi, which in turn is automatically generated
5286 @c from the internal g77 tables in intrin.def _and_ the
5287 @c largely hand-written text in intdoc.h.  So, if you want
5288 @c to change or add to existing documentation on intrinsics,
5289 @c you probably want to edit intdoc.h.
5291 @clear familyF77
5292 @clear familyGNU
5293 @clear familyASC
5294 @clear familyMIL
5295 @clear familyF90
5296 @set familyVXT
5297 @set familyFVZ
5298 @clear familyF2C
5299 @clear familyF2U
5300 @set familyBADU77
5301 @include intdoc.texi
5303 @node Other Compilers
5304 @chapter Other Compilers
5306 An individual Fortran source file can be compiled to
5307 an object (@file{*.o}) file instead of to the final
5308 program executable.
5309 This allows several portions of a program to be compiled
5310 at different times and linked together whenever a new
5311 version of the program is needed.
5312 However, it introduces the issue of @dfn{object compatibility}
5313 across the various object files (and libraries, or @file{*.a}
5314 files) that are linked together to produce any particular
5315 executable file.
5317 Object compatibility is an issue when combining, in one
5318 program, Fortran code compiled by more than one compiler
5319 (or more than one configuration of a compiler).
5320 If the compilers
5321 disagree on how to transform the names of procedures, there
5322 will normally be errors when linking such programs.
5323 Worse, if the compilers agree on naming, but disagree on issues
5324 like how to pass parameters, return arguments, and lay out
5325 @code{COMMON} areas, the earliest detected errors might be the
5326 incorrect results produced by the program (and that assumes
5327 these errors are detected, which is not always the case).
5329 Normally, @command{g77} generates code that is
5330 object-compatible with code generated by a version of
5331 @command{f2c} configured (with, for example, @file{f2c.h} definitions)
5332 to be generally compatible with @command{g77} as built by @command{gcc}.
5333 (Normally, @command{f2c} will, by default, conform to the appropriate
5334 configuration, but it is possible that older or perhaps even newer
5335 versions of @command{f2c}, or versions having certain configuration changes
5336 to @command{f2c} internals, will produce object files that are
5337 incompatible with @command{g77}.)
5339 For example, a Fortran string subroutine
5340 argument will become two arguments on the C side: a @code{char *}
5341 and an @code{int} length.
5343 Much of this compatibility results from the fact that
5344 @command{g77} uses the same run-time library,
5345 @code{libf2c}, used by @command{f2c},
5346 though @command{g77} gives its version the name @code{libg2c}
5347 so as to avoid conflicts when linking,
5348 installing them in the same directories,
5349 and so on.
5351 Other compilers might or might not generate code that
5352 is object-compatible with @code{libg2c} and current @command{g77},
5353 and some might offer such compatibility only when explicitly
5354 selected via a command-line option to the compiler.
5356 @emph{Note: This portion of the documentation definitely needs a lot
5357 of work!}
5359 @menu
5360 * Dropping f2c Compatibility::  When speed is more important.
5361 * Compilers Other Than f2c::    Interoperation with code from other compilers.
5362 @end menu
5364 @node Dropping f2c Compatibility
5365 @section Dropping @command{f2c} Compatibility
5367 Specifying @option{-fno-f2c} allows @command{g77} to generate, in
5368 some cases, faster code, by not needing to allow to the possibility
5369 of linking with code compiled by @command{f2c}.
5371 For example, this affects how @code{REAL(KIND=1)},
5372 @code{COMPLEX(KIND=1)}, and @code{COMPLEX(KIND=2)} functions are called.
5373 With @option{-fno-f2c}, they are
5374 compiled as returning the appropriate @command{gcc} type
5375 (@code{float}, @code{__complex__ float}, @code{__complex__ double},
5376 in many configurations).
5378 With @option{-ff2c} in force, they
5379 are compiled differently (with perhaps slower run-time performance)
5380 to accommodate the restrictions inherent in @command{f2c}'s use of K&R
5381 C as an intermediate language---@code{REAL(KIND=1)} functions
5382 return C's @code{double} type, while @code{COMPLEX} functions return
5383 @code{void} and use an extra argument pointing to a place for the functions to
5384 return their values.
5386 It is possible that, in some cases, leaving @option{-ff2c} in force
5387 might produce faster code than using @option{-fno-f2c}.
5388 Feel free to experiment, but remember to experiment with changing the way
5389 @emph{entire programs and their Fortran libraries are compiled} at
5390 a time, since this sort of experimentation affects the interface
5391 of code generated for a Fortran source file---that is, it affects
5392 object compatibility.
5394 Note that @command{f2c} compatibility is a fairly static target to achieve,
5395 though not necessarily perfectly so, since, like @command{g77}, it is
5396 still being improved.
5397 However, specifying @option{-fno-f2c} causes @command{g77}
5398 to generate code that will probably be incompatible with code
5399 generated by future versions of @command{g77} when the same option
5400 is in force.
5401 You should make sure you are always able to recompile complete
5402 programs from source code when upgrading to new versions of @command{g77}
5403 or @command{f2c}, especially when using options such as @option{-fno-f2c}.
5405 Therefore, if you are using @command{g77} to compile libraries and other
5406 object files for possible future use and you don't want to require
5407 recompilation for future use with subsequent versions of @command{g77},
5408 you might want to stick with @command{f2c} compatibility for now, and
5409 carefully watch for any announcements about changes to the
5410 @command{f2c}/@code{libf2c} interface that might affect existing programs
5411 (thus requiring recompilation).
5413 It is probable that a future version of @command{g77} will not,
5414 by default, generate object files compatible with @command{f2c},
5415 and that version probably would no longer use @code{libf2c}.
5416 If you expect to depend on this compatibility in the
5417 long term, use the options @samp{-ff2c -ff2c-library} when compiling
5418 all of the applicable code.
5419 This should cause future versions of @command{g77} either to produce
5420 compatible code (at the expense of the availability of some features and
5421 performance), or at the very least, to produce diagnostics.
5423 (The library @command{g77} produces will no longer be named @file{libg2c}
5424 when it is no longer generally compatible with @file{libf2c}.
5425 It will likely be referred to, and, if installed as a distinct
5426 library, named @code{libg77}, or some other as-yet-unused name.)
5428 @node Compilers Other Than f2c
5429 @section Compilers Other Than @command{f2c}
5431 On systems with Fortran compilers other than @command{f2c} and @command{g77},
5432 code compiled by @command{g77} is not expected to work
5433 well with code compiled by the native compiler.
5434 (This is true for @command{f2c}-compiled objects as well.)
5435 Libraries compiled with the native compiler probably will have
5436 to be recompiled with @command{g77} to be used with @command{g77}-compiled code.
5438 Reasons for such incompatibilities include:
5440 @itemize @bullet
5441 @item
5442 There might be differences in the way names of Fortran procedures
5443 are translated for use in the system's object-file format.
5444 For example, the statement @samp{CALL FOO} might be compiled
5445 by @command{g77} to call a procedure the linker @command{ld} sees
5446 given the name @samp{_foo_}, while the apparently corresponding
5447 statement @samp{SUBROUTINE FOO} might be compiled by the
5448 native compiler to define the linker-visible name @samp{_foo},
5449 or @samp{_FOO_}, and so on.
5451 @item
5452 There might be subtle type mismatches which cause subroutine arguments
5453 and function return values to get corrupted.
5455 This is why simply getting @command{g77} to
5456 transform procedure names the same way a native
5457 compiler does is not usually a good idea---unless
5458 some effort has been made to ensure that, aside
5459 from the way the two compilers transform procedure
5460 names, everything else about the way they generate
5461 code for procedure interfaces is identical.
5463 @item
5464 Native compilers
5465 use libraries of private I/O routines which will not be available
5466 at link time unless you have the native compiler---and you would
5467 have to explicitly ask for them.
5469 For example, on the Sun you
5470 would have to add @samp{-L/usr/lang/SCx.x -lF77 -lV77} to the link
5471 command.
5472 @end itemize
5474 @node Other Languages
5475 @chapter Other Languages
5477 @emph{Note: This portion of the documentation definitely needs a lot
5478 of work!}
5480 @menu
5481 * Interoperating with C and C++::
5482 @end menu
5484 @node Interoperating with C and C++
5485 @section Tools and advice for interoperating with C and C++
5487 @cindex C, linking with
5488 @cindex C++, linking with
5489 @cindex linking with C
5490 The following discussion assumes that you are running @command{g77} in @command{f2c}
5491 compatibility mode, i.e.@: not using @option{-fno-f2c}.
5492 It provides some
5493 advice about quick and simple techniques for linking Fortran and C (or
5494 C++), the most common requirement.
5495 For the full story consult the
5496 description of code generation.
5497 @xref{Debugging and Interfacing}.
5499 When linking Fortran and C, it's usually best to use @command{g77} to do
5500 the linking so that the correct libraries are included (including the
5501 maths one).
5502 If you're linking with C++ you will want to add
5503 @option{-lstdc++}, @option{-lg++} or whatever.
5504 If you need to use another
5505 driver program (or @command{ld} directly),
5506 you can find out what linkage
5507 options @command{g77} passes by running @samp{g77 -v}.
5509 @menu
5510 * C Interfacing Tools::
5511 * C Access to Type Information::
5512 * f2c Skeletons and Prototypes::
5513 * C++ Considerations::
5514 * Startup Code::
5515 @end menu
5517 @node C Interfacing Tools
5518 @subsection C Interfacing Tools
5519 @pindex f2c
5520 @cindex cfortran.h
5521 @cindex Netlib
5522 Even if you don't actually use it as a compiler, @command{f2c} from
5523 @uref{ftp://ftp.netlib.org/f2c/src}, can be a useful tool when you're
5524 interfacing (linking) Fortran and C@.
5525 @xref{f2c Skeletons and Prototypes,,Generating Skeletons and Prototypes with @command{f2c}}.
5527 To use @command{f2c} for this purpose you only need retrieve and
5528 build the @file{src} directory from the distribution, consult the
5529 @file{README} instructions there for machine-specifics, and install the
5530 @command{f2c} program on your path.
5532 Something else that might be useful is @samp{cfortran.h} from
5533 @uref{ftp://zebra.desy.de/cfortran}.
5534 This is a fairly general tool which
5535 can be used to generate interfaces for calling in both directions
5536 between Fortran and C@.
5537 It can be used in @command{f2c} mode with
5538 @command{g77}---consult its documentation for details.
5540 @node C Access to Type Information
5541 @subsection Accessing Type Information in C
5543 @cindex types, Fortran/C
5544 Generally, C code written to link with
5545 @command{g77} code---calling and/or being
5546 called from Fortran---should @samp{#include <g2c.h>} to define the C
5547 versions of the Fortran types.
5548 Don't assume Fortran @code{INTEGER} types
5549 correspond to C @code{int}s, for instance; instead, declare them as
5550 @code{integer}, a type defined by @file{g2c.h}.
5551 @file{g2c.h} is installed where @command{gcc} will find it by
5552 default, assuming you use a copy of @command{gcc} compatible with
5553 @command{g77}, probably built at the same time as @command{g77}.
5555 @node f2c Skeletons and Prototypes
5556 @subsection Generating Skeletons and Prototypes with @command{f2c}
5558 @pindex f2c
5559 @cindex -fno-second-underscore
5560 A simple and foolproof way to write @command{g77}-callable C routines---e.g.@: to
5561 interface with an existing library---is to write a file (named, for
5562 example, @file{fred.f}) of dummy Fortran
5563 skeletons comprising just the declaration of the routine(s) and dummy
5564 arguments plus @code{END} statements.
5565 Then run @command{f2c} on file @file{fred.f} to produce @file{fred.c}
5566 into which you can edit
5567 useful code, confident the calling sequence is correct, at least.
5568 (There are some errors otherwise commonly made in generating C
5569 interfaces with @command{f2c} conventions,
5570 such as not using @code{doublereal}
5571 as the return type of a @code{REAL} @code{FUNCTION}.)
5573 @pindex ftnchek
5574 @command{f2c} also can help with calling Fortran from C, using its
5575 @option{-P} option to generate C prototypes appropriate for calling the
5576 Fortran.@footnote{The files generated like this can also be used for
5577 inter-unit consistency checking of dummy and actual arguments, although
5578 the @command{ftnchek} tool from @uref{ftp://ftp.netlib.org/fortran}
5579 or @uref{ftp://ftp.dsm.fordham.edu} is
5580 probably better for this purpose.}
5581 If the Fortran code containing any
5582 routines to be called from C is in file @file{joe.f}, use the command
5583 @kbd{f2c -P joe.f} to generate the file @file{joe.P} containing
5584 prototype information.
5585 @code{#include} this in the C which has to call
5586 the Fortran routines to make sure you get it right.
5588 @xref{Arrays,,Arrays (DIMENSION)}, for information on the differences
5589 between the way Fortran (including compilers like @command{g77}) and
5590 C handle arrays.
5592 @node C++ Considerations
5593 @subsection C++ Considerations
5595 @cindex C++
5596 @command{f2c} can be used to generate suitable code for compilation with a
5597 C++ system using the @option{-C++} option.
5598 The important thing about linking @command{g77}-compiled
5599 code with C++ is that the prototypes for the @command{g77}
5600 routines must specify C linkage to avoid name mangling.
5601 So, use an @samp{extern "C"} declaration.
5602 @command{f2c}'s @option{-C++} option will not take care
5603 of this when generating skeletons or prototype files as above, however,
5604 it will avoid clashes with C++ reserved words in addition to those in C@.
5606 @node Startup Code
5607 @subsection Startup Code
5609 @cindex startup code
5610 @cindex run-time, initialization
5611 @cindex initialization, run-time
5612 Unlike with some runtime systems,
5613 it shouldn't be necessary
5614 (unless there are bugs)
5615 to use a Fortran main program unit to ensure the
5616 runtime---specifically the I/O system---is initialized.
5618 However, to use the @command{g77} intrinsics @code{GETARG} and @code{IARGC},
5619 either the @code{main} routine from the @file{libg2c} library must be used,
5620 or the @code{f_setarg} routine
5621 (new as of @code{egcs} version 1.1 and @command{g77} version 0.5.23)
5622 must be called with the appropriate @code{argc} and @code{argv} arguments
5623 prior to the program calling @code{GETARG} or @code{IARGC}.
5625 To provide more flexibility for mixed-language programming
5626 involving @command{g77} while allowing for shared libraries,
5627 as of @code{egcs} version 1.1 and @command{g77} version 0.5.23,
5628 @command{g77}'s @code{main} routine in @code{libg2c}
5629 does the following, in order:
5631 @enumerate
5632 @item
5633 Calls @code{f_setarg}
5634 with the incoming @code{argc} and @code{argv} arguments,
5635 in the same order as for @code{main} itself.
5637 This sets up the command-line environment
5638 for @code{GETARG} and @code{IARGC}.
5640 @item
5641 Calls @code{f_setsig} (with no arguments).
5643 This sets up the signaling and exception environment.
5645 @item
5646 Calls @code{f_init} (with no arguments).
5648 This initializes the I/O environment,
5649 though that should not be necessary,
5650 as all I/O functions in @code{libf2c}
5651 are believed to call @code{f_init} automatically,
5652 if necessary.
5654 (A future version of @command{g77} might skip this explicit step,
5655 to speed up normal exit of a program.)
5657 @item
5658 Arranges for @code{f_exit} to be called (with no arguments)
5659 when the program exits.
5661 This ensures that the I/O environment is properly shut down
5662 before the program exits normally.
5663 Otherwise, output buffers might not be fully flushed,
5664 scratch files might not be deleted, and so on.
5666 The simple way @code{main} does this is
5667 to call @code{f_exit} itself after calling
5668 @code{MAIN__} (in the next step).
5670 However, this does not catch the cases where the program
5671 might call @code{exit} directly,
5672 instead of using the @code{EXIT} intrinsic
5673 (implemented as @code{exit_} in @code{libf2c}).
5675 So, @code{main} attempts to use
5676 the operating environment's @code{onexit} or @code{atexit}
5677 facility, if available,
5678 to cause @code{f_exit} to be called automatically
5679 upon any invocation of @code{exit}.
5681 @item
5682 Calls @code{MAIN__} (with no arguments).
5684 This starts executing the Fortran main program unit for
5685 the application.
5686 (Both @command{g77} and @command{f2c} currently compile a main
5687 program unit so that its global name is @code{MAIN__}.)
5689 @item
5690 If no @code{onexit} or @code{atexit} is provided by the system,
5691 calls @code{f_exit}.
5693 @item
5694 Calls @code{exit} with a zero argument,
5695 to signal a successful program termination.
5697 @item
5698 Returns a zero value to the caller,
5699 to signal a successful program termination,
5700 in case @code{exit} doesn't exit on the system.
5701 @end enumerate
5703 All of the above names are C @code{extern} names,
5704 i.e.@: not mangled.
5706 When using the @code{main} procedure provided by @command{g77}
5707 without a Fortran main program unit,
5708 you need to provide @code{MAIN__}
5709 as the entry point for your C code.
5710 (Make sure you link the object file that defines that
5711 entry point with the rest of your program.)
5713 To provide your own @code{main} procedure
5714 in place of @command{g77}'s,
5715 make sure you specify the object file defining that procedure
5716 @emph{before} @option{-lg2c} on the @command{g77} command line.
5717 Since the @option{-lg2c} option is implicitly provided,
5718 this is usually straightforward.
5719 (Use the @option{--verbose} option to see how and where
5720 @command{g77} implicitly adds @option{-lg2c} in a command line
5721 that will link the program.
5722 Feel free to specify @option{-lg2c} explicitly,
5723 as appropriate.)
5725 However, when providing your own @code{main},
5726 make sure you perform the appropriate tasks in the
5727 appropriate order.
5728 For example, if your @code{main} does not call @code{f_setarg},
5729 make sure the rest of your application does not call
5730 @code{GETARG} or @code{IARGC}.
5732 And, if your @code{main} fails to ensure that @code{f_exit}
5733 is called upon program exit,
5734 some files might end up incompletely written,
5735 some scratch files might be left lying around,
5736 and some existing files being written might be left
5737 with old data not properly truncated at the end.
5739 Note that, generally, the @command{g77} operating environment
5740 does not depend on a procedure named @code{MAIN__} actually
5741 being called prior to any other @command{g77}-compiled code.
5742 That is, @code{MAIN__} does not, itself,
5743 set up any important operating-environment characteristics
5744 upon which other code might depend.
5745 This might change in future versions of @command{g77},
5746 with appropriate notification in the release notes.
5748 For more information, consult the source code for the above routines.
5749 These are in @file{@value{path-libf2c}/libF77/}, named @file{main.c},
5750 @file{setarg.c}, @file{setsig.c}, @file{getarg_.c}, and @file{iargc_.c}.
5752 Also, the file @file{@value{path-g77}/com.c} contains the code @command{g77}
5753 uses to open-code (inline) references to @code{IARGC}.
5755 @node Debugging and Interfacing
5756 @chapter Debugging and Interfacing
5757 @cindex debugging
5758 @cindex interfacing
5759 @cindex calling C routines
5760 @cindex C routines calling Fortran
5761 @cindex f2c compatibility
5763 GNU Fortran currently generates code that is object-compatible with
5764 the @command{f2c} converter.
5765 Also, it avoids limitations in the current GBE, such as the
5766 inability to generate a procedure with
5767 multiple entry points, by generating code that is structured
5768 differently (in terms of procedure names, scopes, arguments, and
5769 so on) than might be expected.
5771 As a result, writing code in other languages that calls on, is
5772 called by, or shares in-memory data with @command{g77}-compiled code generally
5773 requires some understanding of the way @command{g77} compiles code for
5774 various constructs.
5776 Similarly, using a debugger to debug @command{g77}-compiled
5777 code, even if that debugger supports native Fortran debugging, generally
5778 requires this sort of information.
5780 This section describes some of the basic information on how
5781 @command{g77} compiles code for constructs involving interfaces to other
5782 languages and to debuggers.
5784 @emph{Caution:} Much or all of this information pertains to only the current
5785 release of @command{g77}, sometimes even to using certain compiler options
5786 with @command{g77} (such as @option{-fno-f2c}).
5787 Do not write code that depends on this
5788 information without clearly marking said code as nonportable and
5789 subject to review for every new release of @command{g77}.
5790 This information
5791 is provided primarily to make debugging of code generated by this
5792 particular release of @command{g77} easier for the user, and partly to make
5793 writing (generally nonportable) interface code easier.
5794 Both of these
5795 activities require tracking changes in new version of @command{g77} as they
5796 are installed, because new versions can change the behaviors
5797 described in this section.
5799 @menu
5800 * Main Program Unit::  How @command{g77} compiles a main program unit.
5801 * Procedures::         How @command{g77} constructs parameter lists
5802                        for procedures.
5803 * Functions::          Functions returning floating-point or character data.
5804 * Names::              Naming of user-defined variables, procedures, etc.
5805 * Common Blocks::      Accessing common variables while debugging.
5806 * Local Equivalence Areas::  Accessing @code{EQUIVALENCE} while debugging.
5807 * Complex Variables::  How @command{g77} performs complex arithmetic.
5808 * Arrays::             Dealing with (possibly multi-dimensional) arrays.
5809 * Adjustable Arrays::  Special consideration for adjustable arrays.
5810 * Alternate Entry Points::  How @command{g77} implements alternate @code{ENTRY}.
5811 * Alternate Returns::  How @command{g77} handles alternate returns.
5812 * Assigned Statement Labels::  How @command{g77} handles @code{ASSIGN}.
5813 * Run-time Library Errors::  Meanings of some @code{IOSTAT=} values.
5814 @end menu
5816 @node Main Program Unit
5817 @section Main Program Unit (PROGRAM)
5818 @cindex PROGRAM statement
5819 @cindex statements, PROGRAM
5821 When @command{g77} compiles a main program unit, it gives it the public
5822 procedure name @code{MAIN__}.
5823 The @code{libg2c} library has the actual @code{main()} procedure
5824 as is typical of C-based environments, and
5825 it is this procedure that performs some initial start-up
5826 activity and then calls @code{MAIN__}.
5828 Generally, @command{g77} and @code{libg2c} are designed so that you need not
5829 include a main program unit written in Fortran in your program---it
5830 can be written in C or some other language.
5831 Especially for I/O handling, this is the case, although @command{g77} version 0.5.16
5832 includes a bug fix for @code{libg2c} that solved a problem with using the
5833 @code{OPEN} statement as the first Fortran I/O activity in a program
5834 without a Fortran main program unit.
5836 However, if you don't intend to use @command{g77} (or @command{f2c}) to compile
5837 your main program unit---that is, if you intend to compile a @code{main()}
5838 procedure using some other language---you should carefully
5839 examine the code for @code{main()} in @code{libg2c}, found in the source
5840 file @file{@value{path-libf2c}/libF77/main.c}, to see what kinds of things
5841 might need to be done by your @code{main()} in order to provide the
5842 Fortran environment your Fortran code is expecting.
5844 @cindex @code{IArgC} intrinsic
5845 @cindex intrinsics, @code{IArgC}
5846 @cindex @code{GetArg} intrinsic
5847 @cindex intrinsics, @code{GetArg}
5848 For example, @code{libg2c}'s @code{main()} sets up the information used by
5849 the @code{IARGC} and @code{GETARG} intrinsics.
5850 Bypassing @code{libg2c}'s @code{main()}
5851 without providing a substitute for this activity would mean
5852 that invoking @code{IARGC} and @code{GETARG} would produce undefined
5853 results.
5855 @cindex debugging
5856 @cindex main program unit, debugging
5857 @cindex main()
5858 @cindex MAIN__()
5859 @cindex .gdbinit
5860 When debugging, one implication of the fact that @code{main()}, which
5861 is the place where the debugged program ``starts'' from the
5862 debugger's point of view, is in @code{libg2c} is that you won't be
5863 starting your Fortran program at a point you recognize as your
5864 Fortran code.
5866 The standard way to get around this problem is to set a break
5867 point (a one-time, or temporary, break point will do) at
5868 the entrance to @code{MAIN__}, and then run the program.
5869 A convenient way to do so is to add the @command{gdb} command
5871 @example
5872 tbreak MAIN__
5873 @end example
5875 @noindent
5876 to the file @file{.gdbinit} in the directory in which you're debugging
5877 (using @command{gdb}).
5879 After doing this, the debugger will see the current execution
5880 point of the program as at the beginning of the main program
5881 unit of your program.
5883 Of course, if you really want to set a break point at some
5884 other place in your program and just start the program
5885 running, without first breaking at @code{MAIN__},
5886 that should work fine.
5888 @node Procedures
5889 @section Procedures (SUBROUTINE and FUNCTION)
5890 @cindex procedures
5891 @cindex SUBROUTINE statement
5892 @cindex statements, SUBROUTINE
5893 @cindex FUNCTION statement
5894 @cindex statements, FUNCTION
5895 @cindex signature of procedures
5897 Currently, @command{g77} passes arguments via reference---specifically,
5898 by passing a pointer to the location in memory of a variable, array,
5899 array element, a temporary location that holds the result of evaluating an
5900 expression, or a temporary or permanent location that holds the value
5901 of a constant.
5903 Procedures that accept @code{CHARACTER} arguments are implemented by
5904 @command{g77} so that each @code{CHARACTER} argument has two actual arguments.
5906 The first argument occupies the expected position in the
5907 argument list and has the user-specified name.
5908 This argument
5909 is a pointer to an array of characters, passed by the caller.
5911 The second argument is appended to the end of the user-specified
5912 calling sequence and is named @samp{__g77_length_@var{x}}, where @var{x}
5913 is the user-specified name.
5914 This argument is of the C type @code{ftnlen}
5915 (see @file{@value{path-libf2c}/g2c.h.in} for information on that type) and
5916 is the number of characters the caller has allocated in the
5917 array pointed to by the first argument.
5919 A procedure will ignore the length argument if @samp{X} is not declared
5920 @code{CHARACTER*(*)}, because for other declarations, it knows the
5921 length.
5922 Not all callers necessarily ``know'' this, however, which
5923 is why they all pass the extra argument.
5925 The contents of the @code{CHARACTER} argument are specified by the
5926 address passed in the first argument (named after it).
5927 The procedure can read or write these contents as appropriate.
5929 When more than one @code{CHARACTER} argument is present in the argument
5930 list, the length arguments are appended in the order
5931 the original arguments appear.
5932 So @samp{CALL FOO('HI','THERE')} is implemented in
5933 C as @samp{foo("hi","there",2,5);}, ignoring the fact that @command{g77}
5934 does not provide the trailing null bytes on the constant
5935 strings (@command{f2c} does provide them, but they are unnecessary in
5936 a Fortran environment, and you should not expect them to be
5937 there).
5939 Note that the above information applies to @code{CHARACTER} variables and
5940 arrays @strong{only}.
5941 It does @strong{not} apply to external @code{CHARACTER}
5942 functions or to intrinsic @code{CHARACTER} functions.
5943 That is, no second length argument is passed to @samp{FOO} in this case:
5945 @example
5946 CHARACTER X
5947 EXTERNAL X
5948 CALL FOO(X)
5949 @end example
5951 @noindent
5952 Nor does @samp{FOO} expect such an argument in this case:
5954 @example
5955 SUBROUTINE FOO(X)
5956 CHARACTER X
5957 EXTERNAL X
5958 @end example
5960 Because of this implementation detail, if a program has a bug
5961 such that there is disagreement as to whether an argument is
5962 a procedure, and the type of the argument is @code{CHARACTER}, subtle
5963 symptoms might appear.
5965 @node Functions
5966 @section Functions (FUNCTION and RETURN)
5967 @cindex functions
5968 @cindex FUNCTION statement
5969 @cindex statements, FUNCTION
5970 @cindex RETURN statement
5971 @cindex statements, RETURN
5972 @cindex return type of functions
5974 @command{g77} handles in a special way functions that return the following
5975 types:
5977 @itemize @bullet
5978 @item
5979 @code{CHARACTER}
5980 @item
5981 @code{COMPLEX}
5982 @item
5983 @code{REAL(KIND=1)}
5984 @end itemize
5986 For @code{CHARACTER}, @command{g77} implements a subroutine (a C function
5987 returning @code{void})
5988 with two arguments prepended: @samp{__g77_result}, which the caller passes
5989 as a pointer to a @code{char} array expected to hold the return value,
5990 and @samp{__g77_length}, which the caller passes as an @code{ftnlen} value
5991 specifying the length of the return value as declared in the calling
5992 program.
5993 For @code{CHARACTER*(*)}, the called function uses @samp{__g77_length}
5994 to determine the size of the array that @samp{__g77_result} points to;
5995 otherwise, it ignores that argument.
5997 For @code{COMPLEX}, when @option{-ff2c} is in
5998 force, @command{g77} implements
5999 a subroutine with one argument prepended: @samp{__g77_result}, which the
6000 caller passes as a pointer to a variable of the type of the function.
6001 The called function writes the return value into this variable instead
6002 of returning it as a function value.
6003 When @option{-fno-f2c} is in force,
6004 @command{g77} implements a @code{COMPLEX} function as @command{gcc}'s
6005 @samp{__complex__ float} or @samp{__complex__ double} function
6006 (or an emulation thereof, when @option{-femulate-complex} is in effect),
6007 returning the result of the function in the same way as @command{gcc} would.
6009 For @code{REAL(KIND=1)}, when @option{-ff2c} is in force, @command{g77} implements
6010 a function that actually returns @code{REAL(KIND=2)} (typically
6011 C's @code{double} type).
6012 When @option{-fno-f2c} is in force, @code{REAL(KIND=1)}
6013 functions return @code{float}.
6015 @node Names
6016 @section Names
6017 @cindex symbol names
6018 @cindex transforming symbol names
6020 Fortran permits each implementation to decide how to represent
6021 names as far as how they're seen in other contexts, such as debuggers
6022 and when interfacing to other languages, and especially as far
6023 as how casing is handled.
6025 External names---names of entities that are public, or ``accessible'',
6026 to all modules in a program---normally have an underscore (@samp{_})
6027 appended by @command{g77},
6028 to generate code that is compatible with @command{f2c}.
6029 External names include names of Fortran things like common blocks,
6030 external procedures (subroutines and functions, but not including
6031 statement functions, which are internal procedures), and entry point
6032 names.
6034 However, use of the @option{-fno-underscoring} option
6035 disables this kind of transformation of external names (though inhibiting
6036 the transformation certainly improves the chances of colliding with
6037 incompatible externals written in other languages---but that
6038 might be intentional.
6040 @cindex -fno-underscoring option
6041 @cindex options, -fno-underscoring
6042 @cindex -fno-second-underscore option
6043 @cindex options, -fno-underscoring
6044 When @option{-funderscoring} is in force, any name (external or local)
6045 that already has at least one underscore in it is
6046 implemented by @command{g77} by appending two underscores.
6047 (This second underscore can be disabled via the
6048 @option{-fno-second-underscore} option.)
6049 External names are changed this way for @command{f2c} compatibility.
6050 Local names are changed this way to avoid collisions with external names
6051 that are different in the source code---@command{f2c} does the same thing, but
6052 there's no compatibility issue there except for user expectations while
6053 debugging.
6055 For example:
6057 @example
6058 Max_Cost = 0
6059 @end example
6061 @cindex debugging
6062 @noindent
6063 Here, a user would, in the debugger, refer to this variable using the
6064 name @samp{max_cost__} (or @samp{MAX_COST__} or @samp{Max_Cost__},
6065 as described below).
6066 (We hope to improve @command{g77} in this regard in the future---don't
6067 write scripts depending on this behavior!
6068 Also, consider experimenting with the @option{-fno-underscoring}
6069 option to try out debugging without having to massage names by
6070 hand like this.)
6072 @command{g77} provides a number of command-line options that allow the user
6073 to control how case mapping is handled for source files.
6074 The default is the traditional UNIX model for Fortran compilers---names
6075 are mapped to lower case.
6076 Other command-line options can be specified to map names to upper
6077 case, or to leave them exactly as written in the source file.
6079 For example:
6081 @example
6082 Foo = 9.436
6083 @end example
6085 @noindent
6086 Here, it is normally the case that the variable assigned will be named
6087 @samp{foo}.
6088 This would be the name to enter when using a debugger to
6089 access the variable.
6091 However, depending on the command-line options specified, the
6092 name implemented by @command{g77} might instead be @samp{FOO} or even
6093 @samp{Foo}, thus affecting how debugging is done.
6095 Also:
6097 @example
6098 Call Foo
6099 @end example
6101 @noindent
6102 This would normally call a procedure that, if it were in a separate C program,
6103 be defined starting with the line:
6105 @example
6106 void foo_()
6107 @end example
6109 @noindent
6110 However, @command{g77} command-line options could be used to change the casing
6111 of names, resulting in the name @samp{FOO_} or @samp{Foo_} being given to the
6112 procedure instead of @samp{foo_}, and the @option{-fno-underscoring} option
6113 could be used to inhibit the appending of the underscore to the name.
6115 @node Common Blocks
6116 @section Common Blocks (COMMON)
6117 @cindex common blocks
6118 @cindex @code{COMMON} statement
6119 @cindex statements, @code{COMMON}
6121 @command{g77} names and lays out @code{COMMON} areas
6122 the same way @command{f2c} does,
6123 for compatibility with @command{f2c}.
6125 @node Local Equivalence Areas
6126 @section Local Equivalence Areas (EQUIVALENCE)
6127 @cindex equivalence areas
6128 @cindex local equivalence areas
6129 @cindex EQUIVALENCE statement
6130 @cindex statements, EQUIVALENCE
6132 @command{g77} treats storage-associated areas involving a @code{COMMON}
6133 block as explained in the section on common blocks.
6135 A local @code{EQUIVALENCE} area is a collection of variables and arrays
6136 connected to each other in any way via @code{EQUIVALENCE}, none of which are
6137 listed in a @code{COMMON} statement.
6139 (@emph{Note:} @command{g77} version 0.5.18 and earlier chose the name
6140 for @var{x} using a different method when more than one name was
6141 in the list of names of entities placed at the beginning of the
6142 array.
6143 Though the documentation specified that the first name listed in
6144 the @code{EQUIVALENCE} statements was chosen for @var{x}, @command{g77}
6145 in fact chose the name using a method that was so complicated,
6146 it seemed easier to change it to an alphabetical sort than to describe the
6147 previous method in the documentation.)
6149 @node Complex Variables
6150 @section Complex Variables (COMPLEX)
6151 @cindex complex variables
6152 @cindex imaginary part
6153 @cindex COMPLEX statement
6154 @cindex statements, COMPLEX
6156 As of 0.5.20, @command{g77} defaults to handling @code{COMPLEX} types
6157 (and related intrinsics, constants, functions, and so on)
6158 in a manner that
6159 makes direct debugging involving these types in Fortran
6160 language mode difficult.
6162 Essentially, @command{g77} implements these types using an
6163 internal construct similar to C's @code{struct}, at least
6164 as seen by the @command{gcc} back end.
6166 Currently, the back end, when outputting debugging info with
6167 the compiled code for the assembler to digest, does not detect
6168 these @code{struct} types as being substitutes for Fortran
6169 complex.
6170 As a result, the Fortran language modes of debuggers such as
6171 @command{gdb} see these types as C @code{struct} types, which
6172 they might or might not support.
6174 Until this is fixed, switch to C language mode to work with
6175 entities of @code{COMPLEX} type and then switch back to Fortran language
6176 mode afterward.
6177 (In @command{gdb}, this is accomplished via @samp{set lang c} and
6178 either @samp{set lang fortran} or @samp{set lang auto}.)
6180 @node Arrays
6181 @section Arrays (DIMENSION)
6182 @cindex DIMENSION statement
6183 @cindex statements, DIMENSION
6184 @cindex array ordering
6185 @cindex ordering, array
6186 @cindex column-major ordering
6187 @cindex row-major ordering
6188 @cindex arrays
6190 Fortran uses ``column-major ordering'' in its arrays.
6191 This differs from other languages, such as C, which use ``row-major ordering''.
6192 The difference is that, with Fortran, array elements adjacent to
6193 each other in memory differ in the @emph{first} subscript instead of
6194 the last; @samp{A(5,10,20)} immediately follows @samp{A(4,10,20)},
6195 whereas with row-major ordering it would follow @samp{A(5,10,19)}.
6197 This consideration
6198 affects not only interfacing with and debugging Fortran code,
6199 it can greatly affect how code is designed and written, especially
6200 when code speed and size is a concern.
6202 Fortran also differs from C, a popular language for interfacing and
6203 to support directly in debuggers, in the way arrays are treated.
6204 In C, arrays are single-dimensional and have interesting relationships
6205 to pointers, neither of which is true for Fortran.
6206 As a result, dealing with Fortran arrays from within
6207 an environment limited to C concepts can be challenging.
6209 For example, accessing the array element @samp{A(5,10,20)} is easy enough
6210 in Fortran (use @samp{A(5,10,20)}), but in C some difficult machinations
6211 are needed.
6212 First, C would treat the A array as a single-dimension array.
6213 Second, C does not understand low bounds for arrays as does Fortran.
6214 Third, C assumes a low bound of zero (0), while Fortran defaults to a
6215 low bound of one (1) and can supports an arbitrary low bound.
6216 Therefore, calculations must be done
6217 to determine what the C equivalent of @samp{A(5,10,20)} would be, and these
6218 calculations require knowing the dimensions of @samp{A}.
6220 For @samp{DIMENSION A(2:11,21,0:29)}, the calculation of the offset of
6221 @samp{A(5,10,20)} would be:
6223 @example
6224   (5-2)
6225 + (10-1)*(11-2+1)
6226 + (20-0)*(11-2+1)*(21-1+1)
6227 = 4293
6228 @end example
6230 @noindent
6231 So the C equivalent in this case would be @samp{a[4293]}.
6233 When using a debugger directly on Fortran code, the C equivalent
6234 might not work, because some debuggers cannot understand the notion
6235 of low bounds other than zero.  However, unlike @command{f2c}, @command{g77}
6236 does inform the GBE that a multi-dimensional array (like @samp{A}
6237 in the above example) is really multi-dimensional, rather than a
6238 single-dimensional array, so at least the dimensionality of the array
6239 is preserved.
6241 Debuggers that understand Fortran should have no trouble with
6242 nonzero low bounds, but for non-Fortran debuggers, especially
6243 C debuggers, the above example might have a C equivalent of
6244 @samp{a[4305]}.
6245 This calculation is arrived at by eliminating the subtraction
6246 of the lower bound in the first parenthesized expression on each
6247 line---that is, for @samp{(5-2)} substitute @samp{(5)}, for @samp{(10-1)}
6248 substitute @samp{(10)}, and for @samp{(20-0)} substitute @samp{(20)}.
6249 Actually, the implication of
6250 this can be that the expression @samp{*(&a[2][1][0] + 4293)} works fine,
6251 but that @samp{a[20][10][5]} produces the equivalent of
6252 @samp{*(&a[0][0][0] + 4305)} because of the missing lower bounds.
6254 Come to think of it, perhaps
6255 the behavior is due to the debugger internally compensating for
6256 the lower bounds by offsetting the base address of @samp{a}, leaving
6257 @samp{&a} set lower, in this case, than @samp{&a[2][1][0]} (the address of
6258 its first element as identified by subscripts equal to the
6259 corresponding lower bounds).
6261 You know, maybe nobody really needs to use arrays.
6263 @node Adjustable Arrays
6264 @section Adjustable Arrays (DIMENSION)
6265 @cindex arrays, adjustable
6266 @cindex adjustable arrays
6267 @cindex arrays, automatic
6268 @cindex automatic arrays
6269 @cindex DIMENSION statement
6270 @cindex statements, DIMENSION
6271 @cindex dimensioning arrays
6272 @cindex arrays, dimensioning
6274 Adjustable and automatic arrays in Fortran require the implementation
6275 (in this
6276 case, the @command{g77} compiler) to ``memorize'' the expressions that
6277 dimension the arrays each time the procedure is invoked.
6278 This is so that subsequent changes to variables used in those
6279 expressions, made during execution of the procedure, do not
6280 have any effect on the dimensions of those arrays.
6282 For example:
6284 @example
6285 REAL ARRAY(5)
6286 DATA ARRAY/5*2/
6287 CALL X(ARRAY, 5)
6289 SUBROUTINE X(A, N)
6290 DIMENSION A(N)
6291 N = 20
6292 PRINT *, N, A
6294 @end example
6296 @noindent
6297 Here, the implementation should, when running the program, print something
6298 like:
6300 @example
6301 20   2.  2.  2.  2.  2.
6302 @end example
6304 @noindent
6305 Note that this shows that while the value of @samp{N} was successfully
6306 changed, the size of the @samp{A} array remained at 5 elements.
6308 To support this, @command{g77} generates code that executes before any user
6309 code (and before the internally generated computed @code{GOTO} to handle
6310 alternate entry points, as described below) that evaluates each
6311 (nonconstant) expression in the list of subscripts for an
6312 array, and saves the result of each such evaluation to be used when
6313 determining the size of the array (instead of re-evaluating the
6314 expressions).
6316 So, in the above example, when @samp{X} is first invoked, code is
6317 executed that copies the value of @samp{N} to a temporary.
6318 And that same temporary serves as the actual high bound for the single
6319 dimension of the @samp{A} array (the low bound being the constant 1).
6320 Since the user program cannot (legitimately) change the value
6321 of the temporary during execution of the procedure, the size
6322 of the array remains constant during each invocation.
6324 For alternate entry points, the code @command{g77} generates takes into
6325 account the possibility that a dummy adjustable array is not actually
6326 passed to the actual entry point being invoked at that time.
6327 In that case, the public procedure implementing the entry point
6328 passes to the master private procedure implementing all the
6329 code for the entry points a @code{NULL} pointer where a pointer to that
6330 adjustable array would be expected.
6331 The @command{g77}-generated code
6332 doesn't attempt to evaluate any of the expressions in the subscripts
6333 for an array if the pointer to that array is @code{NULL} at run time in
6334 such cases.
6335 (Don't depend on this particular implementation
6336 by writing code that purposely passes @code{NULL} pointers where the
6337 callee expects adjustable arrays, even if you know the callee
6338 won't reference the arrays---nor should you pass @code{NULL} pointers
6339 for any dummy arguments used in calculating the bounds of such
6340 arrays or leave undefined any values used for that purpose in
6341 COMMON---because the way @command{g77} implements these things might
6342 change in the future!)
6344 @node Alternate Entry Points
6345 @section Alternate Entry Points (ENTRY)
6346 @cindex alternate entry points
6347 @cindex entry points
6348 @cindex ENTRY statement
6349 @cindex statements, ENTRY
6351 The GBE does not understand the general concept of
6352 alternate entry points as Fortran provides via the ENTRY statement.
6353 @command{g77} gets around this by using an approach to compiling procedures
6354 having at least one @code{ENTRY} statement that is almost identical to the
6355 approach used by @command{f2c}.
6356 (An alternate approach could be used that
6357 would probably generate faster, but larger, code that would also
6358 be a bit easier to debug.)
6360 Information on how @command{g77} implements @code{ENTRY} is provided for those
6361 trying to debug such code.
6362 The choice of implementation seems
6363 unlikely to affect code (compiled in other languages) that interfaces
6364 to such code.
6366 @command{g77} compiles exactly one public procedure for the primary entry
6367 point of a procedure plus each @code{ENTRY} point it specifies, as usual.
6368 That is, in terms of the public interface, there is no difference
6369 between
6371 @example
6372 SUBROUTINE X
6374 SUBROUTINE Y
6376 @end example
6378 @noindent
6379 and:
6381 @example
6382 SUBROUTINE X
6383 ENTRY Y
6385 @end example
6387 The difference between the above two cases lies in the code compiled
6388 for the @samp{X} and @samp{Y} procedures themselves, plus the fact that,
6389 for the second case, an extra internal procedure is compiled.
6391 For every Fortran procedure with at least one @code{ENTRY}
6392 statement, @command{g77} compiles an extra procedure
6393 named @samp{__g77_masterfun_@var{x}}, where @var{x} is
6394 the name of the primary entry point (which, in the above case,
6395 using the standard compiler options, would be @samp{x_} in C).
6397 This extra procedure is compiled as a private procedure---that is,
6398 a procedure not accessible by name to separately compiled modules.
6399 It contains all the code in the program unit, including the code
6400 for the primary entry point plus for every entry point.
6401 (The code for each public procedure is quite short, and explained later.)
6403 The extra procedure has some other interesting characteristics.
6405 The argument list for this procedure is invented by @command{g77}.
6406 It contains
6407 a single integer argument named @samp{__g77_which_entrypoint},
6408 passed by value (as in Fortran's @samp{%VAL()} intrinsic), specifying the
6409 entry point index---0 for the primary entry point, 1 for the
6410 first entry point (the first @code{ENTRY} statement encountered), 2 for
6411 the second entry point, and so on.
6413 It also contains, for functions returning @code{CHARACTER} and
6414 (when @option{-ff2c} is in effect) @code{COMPLEX} functions,
6415 and for functions returning different types among the
6416 @code{ENTRY} statements (e.g. @samp{REAL FUNCTION R()}
6417 containing @samp{ENTRY I()}), an argument named @samp{__g77_result} that
6418 is expected at run time to contain a pointer to where to store
6419 the result of the entry point.
6420 For @code{CHARACTER} functions, this
6421 storage area is an array of the appropriate number of characters;
6422 for @code{COMPLEX} functions, it is the appropriate area for the return
6423 type; for multiple-return-type functions, it is a union of all the supported return
6424 types (which cannot include @code{CHARACTER}, since combining @code{CHARACTER}
6425 and non-@code{CHARACTER} return types via @code{ENTRY} in a single function
6426 is not supported by @command{g77}).
6428 For @code{CHARACTER} functions, the @samp{__g77_result} argument is followed
6429 by yet another argument named @samp{__g77_length} that, at run time,
6430 specifies the caller's expected length of the returned value.
6431 Note that only @code{CHARACTER*(*)} functions and entry points actually
6432 make use of this argument, even though it is always passed by
6433 all callers of public @code{CHARACTER} functions (since the caller does not
6434 generally know whether such a function is @code{CHARACTER*(*)} or whether
6435 there are any other callers that don't have that information).
6437 The rest of the argument list is the union of all the arguments
6438 specified for all the entry points (in their usual forms, e.g.
6439 @code{CHARACTER} arguments have extra length arguments, all appended at
6440 the end of this list).
6441 This is considered the ``master list'' of
6442 arguments.
6444 The code for this procedure has, before the code for the first
6445 executable statement, code much like that for the following Fortran
6446 statement:
6448 @smallexample
6449        GOTO (100000,100001,100002), __g77_which_entrypoint
6450 100000 @dots{}code for primary entry point@dots{}
6451 100001 @dots{}code immediately following first ENTRY statement@dots{}
6452 100002 @dots{}code immediately following second ENTRY statement@dots{}
6453 @end smallexample
6455 @noindent
6456 (Note that invalid Fortran statement labels and variable names
6457 are used in the above example to highlight the fact that it
6458 represents code generated by the @command{g77} internals, not code to be
6459 written by the user.)
6461 It is this code that, when the procedure is called, picks which
6462 entry point to start executing.
6464 Getting back to the public procedures (@samp{x} and @samp{Y} in the original
6465 example), those procedures are fairly simple.
6466 Their interfaces
6467 are just like they would be if they were self-contained procedures
6468 (without @code{ENTRY}), of course, since that is what the callers
6469 expect.
6470 Their code consists of simply calling the private
6471 procedure, described above, with the appropriate extra arguments
6472 (the entry point index, and perhaps a pointer to a multiple-type-
6473 return variable, local to the public procedure, that contains
6474 all the supported returnable non-character types).
6475 For arguments
6476 that are not listed for a given entry point that are listed for
6477 other entry points, and therefore that are in the ``master list''
6478 for the private procedure, null pointers (in C, the @code{NULL} macro)
6479 are passed.
6480 Also, for entry points that are part of a multiple-type-
6481 returning function, code is compiled after the call of the private
6482 procedure to extract from the multi-type union the appropriate result,
6483 depending on the type of the entry point in question, returning
6484 that result to the original caller.
6486 When debugging a procedure containing alternate entry points, you
6487 can either set a break point on the public procedure itself (e.g.
6488 a break point on @samp{X} or @samp{Y}) or on the private procedure that
6489 contains most of the pertinent code (e.g. @samp{__g77_masterfun_@var{x}}).
6490 If you do the former, you should use the debugger's command to
6491 ``step into'' the called procedure to get to the actual code; with
6492 the latter approach, the break point leaves you right at the
6493 actual code, skipping over the public entry point and its call
6494 to the private procedure (unless you have set a break point there
6495 as well, of course).
6497 Further, the list of dummy arguments that is visible when the
6498 private procedure is active is going to be the expanded version
6499 of the list for whichever particular entry point is active,
6500 as explained above, and the way in which return values are
6501 handled might well be different from how they would be handled
6502 for an equivalent single-entry function.
6504 @node Alternate Returns
6505 @section Alternate Returns (SUBROUTINE and RETURN)
6506 @cindex subroutines
6507 @cindex alternate returns
6508 @cindex SUBROUTINE statement
6509 @cindex statements, SUBROUTINE
6510 @cindex RETURN statement
6511 @cindex statements, RETURN
6513 Subroutines with alternate returns (e.g. @samp{SUBROUTINE X(*)} and
6514 @samp{CALL X(*50)}) are implemented by @command{g77} as functions returning
6515 the C @code{int} type.
6516 The actual alternate-return arguments are omitted from the calling sequence.
6517 Instead, the caller uses
6518 the return value to do a rough equivalent of the Fortran
6519 computed-@code{GOTO} statement, as in @samp{GOTO (50), X()} in the
6520 example above (where @samp{X} is quietly declared as an @code{INTEGER(KIND=1)}
6521 function), and the callee just returns whatever integer
6522 is specified in the @code{RETURN} statement for the subroutine
6523 For example, @samp{RETURN 1} is implemented as @samp{X = 1} followed
6524 by @samp{RETURN}
6525 in C, and @samp{RETURN} by itself is @samp{X = 0} and @samp{RETURN}).
6527 @node Assigned Statement Labels
6528 @section Assigned Statement Labels (ASSIGN and GOTO)
6529 @cindex assigned statement labels
6530 @cindex statement labels, assigned
6531 @cindex ASSIGN statement
6532 @cindex statements, ASSIGN
6533 @cindex GOTO statement
6534 @cindex statements, GOTO
6536 For portability to machines where a pointer (such as to a label,
6537 which is how @command{g77} implements @code{ASSIGN} and its relatives,
6538 the assigned-@code{GOTO} and assigned-@code{FORMAT}-I/O statements)
6539 is wider (bitwise) than an @code{INTEGER(KIND=1)}, @command{g77}
6540 uses a different memory location to hold the @code{ASSIGN}ed value of a variable
6541 than it does the numerical value in that variable, unless the
6542 variable is wide enough (can hold enough bits).
6544 In particular, while @command{g77} implements
6546 @example
6547 I = 10
6548 @end example
6550 @noindent
6551 as, in C notation, @samp{i = 10;}, it implements
6553 @example
6554 ASSIGN 10 TO I
6555 @end example
6557 @noindent
6558 as, in GNU's extended C notation (for the label syntax),
6559 @samp{__g77_ASSIGN_I = &&L10;} (where @samp{L10} is just a massaging
6560 of the Fortran label @samp{10} to make the syntax C-like; @command{g77} doesn't
6561 actually generate the name @samp{L10} or any other name like that,
6562 since debuggers cannot access labels anyway).
6564 While this currently means that an @code{ASSIGN} statement does not
6565 overwrite the numeric contents of its target variable, @emph{do not}
6566 write any code depending on this feature.
6567 @command{g77} has already changed this implementation across
6568 versions and might do so in the future.
6569 This information is provided only to make debugging Fortran programs
6570 compiled with the current version of @command{g77} somewhat easier.
6571 If there's no debugger-visible variable named @samp{__g77_ASSIGN_I}
6572 in a program unit that does @samp{ASSIGN 10 TO I}, that probably
6573 means @command{g77} has decided it can store the pointer to the label directly
6574 into @samp{I} itself.
6576 @xref{Ugly Assigned Labels}, for information on a command-line option
6577 to force @command{g77} to use the same storage for both normal and
6578 assigned-label uses of a variable.
6580 @node Run-time Library Errors
6581 @section Run-time Library Errors
6582 @cindex IOSTAT=
6583 @cindex error values
6584 @cindex error messages
6585 @cindex messages, run-time
6586 @cindex I/O, errors
6588 The @code{libg2c} library currently has the following table to relate
6589 error code numbers, returned in @code{IOSTAT=} variables, to messages.
6590 This information should, in future versions of this document, be
6591 expanded upon to include detailed descriptions of each message.
6593 In line with good coding practices, any of the numbers in the
6594 list below should @emph{not} be directly written into Fortran
6595 code you write.
6596 Instead, make a separate @code{INCLUDE} file that defines
6597 @code{PARAMETER} names for them, and use those in your code,
6598 so you can more easily change the actual numbers in the future.
6600 The information below is culled from the definition
6601 of @code{F_err} in @file{f/runtime/libI77/err.c} in the
6602 @command{g77} source tree.
6604 @smallexample
6605 100: "error in format"
6606 101: "illegal unit number"
6607 102: "formatted io not allowed"
6608 103: "unformatted io not allowed"
6609 104: "direct io not allowed"
6610 105: "sequential io not allowed"
6611 106: "can't backspace file"
6612 107: "null file name"
6613 108: "can't stat file"
6614 109: "unit not connected"
6615 110: "off end of record"
6616 111: "truncation failed in endfile"
6617 112: "incomprehensible list input"
6618 113: "out of free space"
6619 114: "unit not connected"
6620 115: "read unexpected character"
6621 116: "bad logical input field"
6622 117: "bad variable type"
6623 118: "bad namelist name"
6624 119: "variable not in namelist"
6625 120: "no end record"
6626 121: "variable count incorrect"
6627 122: "subscript for scalar variable"
6628 123: "invalid array section"
6629 124: "substring out of bounds"
6630 125: "subscript out of bounds"
6631 126: "can't read file"
6632 127: "can't write file"
6633 128: "'new' file exists"
6634 129: "can't append to file"
6635 130: "non-positive record number"
6636 131: "I/O started while already doing I/O"
6637 @end smallexample
6639 @node Collected Fortran Wisdom
6640 @chapter Collected Fortran Wisdom
6641 @cindex wisdom
6642 @cindex legacy code
6643 @cindex code, legacy
6644 @cindex writing code
6645 @cindex code, writing
6647 Most users of @command{g77} can be divided into two camps:
6649 @itemize @bullet
6650 @item
6651 Those writing new Fortran code to be compiled by @command{g77}.
6653 @item
6654 Those using @command{g77} to compile existing, ``legacy'' code.
6655 @end itemize
6657 Users writing new code generally understand most of the necessary
6658 aspects of Fortran to write ``mainstream'' code, but often need
6659 help deciding how to handle problems, such as the construction
6660 of libraries containing @code{BLOCK DATA}.
6662 Users dealing with ``legacy'' code sometimes don't have much
6663 experience with Fortran, but believe that the code they're compiling
6664 already works when compiled by other compilers (and might
6665 not understand why, as is sometimes the case, it doesn't work
6666 when compiled by @command{g77}).
6668 The following information is designed to help users do a better job
6669 coping with existing, ``legacy'' Fortran code, and with writing
6670 new code as well.
6672 @menu
6673 * Advantages Over f2c::        If @command{f2c} is so great, why @command{g77}?
6674 * Block Data and Libraries::   How @command{g77} solves a common problem.
6675 * Loops::                      Fortran @code{DO} loops surprise many people.
6676 * Working Programs::           Getting programs to work should be done first.
6677 * Overly Convenient Options::  Temptations to avoid, habits to not form.
6678 * Faster Programs::            Everybody wants these, but at what cost?
6679 @end menu
6681 @node Advantages Over f2c
6682 @section Advantages Over f2c
6684 Without @command{f2c}, @command{g77} would have taken much longer to
6685 do and probably not been as good for quite a while.
6686 Sometimes people who notice how much @command{g77} depends on, and
6687 documents encouragement to use, @command{f2c} ask why @command{g77}
6688 was created if @command{f2c} already existed.
6690 This section gives some basic answers to these questions, though it
6691 is not intended to be comprehensive.
6693 @menu
6694 * Language Extensions::  Features used by Fortran code.
6695 * Diagnostic Abilities:: Abilities to spot problems early.
6696 * Compiler Options::     Features helpful to accommodate legacy code, etc.
6697 * Compiler Speed::       Speed of the compilation process.
6698 * Program Speed::        Speed of the generated, optimized code.
6699 * Ease of Debugging::    Debugging ease-of-use at the source level.
6700 * Character and Hollerith Constants::  A byte saved is a byte earned.
6701 @end menu
6703 @node Language Extensions
6704 @subsection Language Extensions
6706 @command{g77} offers several extensions to FORTRAN 77 language that @command{f2c}
6707 doesn't:
6709 @itemize @bullet
6710 @item
6711 Automatic arrays
6713 @item
6714 @code{CYCLE} and @code{EXIT}
6716 @item
6717 Construct names
6719 @item
6720 @code{SELECT CASE}
6722 @item
6723 @code{KIND=} and @code{LEN=} notation
6725 @item
6726 Semicolon as statement separator
6728 @item
6729 Constant expressions in @code{FORMAT} statements
6730 (such as @samp{FORMAT(I<J>)},
6731 where @samp{J} is a @code{PARAMETER} named constant)
6733 @item
6734 @code{MvBits} intrinsic
6736 @item
6737 @code{libU77} (Unix-compatibility) library,
6738 with routines known to compiler as intrinsics
6739 (so they work even when compiler options are used
6740 to change the interfaces used by Fortran routines)
6741 @end itemize
6743 @command{g77} also implements iterative @code{DO} loops
6744 so that they work even in the presence of certain ``extreme'' inputs,
6745 unlike @command{f2c}.
6746 @xref{Loops}.
6748 However, @command{f2c} offers a few that @command{g77} doesn't, such as:
6750 @itemize @bullet
6751 @item
6752 Intrinsics in @code{PARAMETER} statements
6754 @item
6755 Array bounds expressions (such as @samp{REAL M(N(2))})
6757 @item
6758 @code{AUTOMATIC} statement
6759 @end itemize
6761 It is expected that @command{g77} will offer some or all of these missing
6762 features at some time in the future.
6764 @node Diagnostic Abilities
6765 @subsection Diagnostic Abilities
6767 @command{g77} offers better diagnosis of problems in @code{FORMAT} statements.
6768 @command{f2c} doesn't, for example, emit any diagnostic for
6769 @samp{FORMAT(XZFAJG10324)},
6770 leaving that to be diagnosed, at run time, by
6771 the @code{libf2c} run-time library.
6773 @node Compiler Options
6774 @subsection Compiler Options
6776 @command{g77} offers compiler options that @command{f2c} doesn't,
6777 most of which are designed to more easily accommodate
6778 legacy code:
6780 @itemize @bullet
6781 @item
6782 Two that control the automatic appending of extra
6783 underscores to external names
6785 @item
6786 One that allows dollar signs (@samp{$}) in symbol names
6788 @item
6789 A variety that control acceptance of various
6790 ``ugly'' constructs
6792 @item
6793 Several that specify acceptable use of upper and lower case
6794 in the source code
6796 @item
6797 Many that enable, disable, delete, or hide
6798 groups of intrinsics
6800 @item
6801 One to specify the length of fixed-form source lines
6802 (normally 72)
6804 @item
6805 One to specify the the source code is written in
6806 Fortran-90-style free-form
6807 @end itemize
6809 However, @command{f2c} offers a few that @command{g77} doesn't,
6810 like an option to have @code{REAL} default to @code{REAL*8}.
6811 It is expected that @command{g77} will offer all of the
6812 missing options pertinent to being a Fortran compiler
6813 at some time in the future.
6815 @node Compiler Speed
6816 @subsection Compiler Speed
6818 Saving the steps of writing and then rereading C code is a big reason
6819 why @command{g77} should be able to compile code much faster than using
6820 @command{f2c} in conjunction with the equivalent invocation of @command{gcc}.
6822 However, due to @command{g77}'s youth, lots of self-checking is still being
6823 performed.
6824 As a result, this improvement is as yet unrealized
6825 (though the potential seems to be there for quite a big speedup
6826 in the future).
6827 It is possible that, as of version 0.5.18, @command{g77}
6828 is noticeably faster compiling many Fortran source files than using
6829 @command{f2c} in conjunction with @command{gcc}.
6831 @node Program Speed
6832 @subsection Program Speed
6834 @command{g77} has the potential to better optimize code than @command{f2c},
6835 even when @command{gcc} is used to compile the output of @command{f2c},
6836 because @command{f2c} must necessarily
6837 translate Fortran into a somewhat lower-level language (C) that cannot
6838 preserve all the information that is potentially useful for optimization,
6839 while @command{g77} can gather, preserve, and transmit that information directly
6840 to the GBE.
6842 For example, @command{g77} implements @code{ASSIGN} and assigned
6843 @code{GOTO} using direct assignment of pointers to labels and direct
6844 jumps to labels, whereas @command{f2c} maps the assigned labels to
6845 integer values and then uses a C @code{switch} statement to encode
6846 the assigned @code{GOTO} statements.
6848 However, as is typical, theory and reality don't quite match, at least
6849 not in all cases, so it is still the case that @command{f2c} plus @command{gcc}
6850 can generate code that is faster than @command{g77}.
6852 Version 0.5.18 of @command{g77} offered default
6853 settings and options, via patches to the @command{gcc}
6854 back end, that allow for better program speed, though
6855 some of these improvements also affected the performance
6856 of programs translated by @command{f2c} and then compiled
6857 by @command{g77}'s version of @command{gcc}.
6859 Version 0.5.20 of @command{g77} offers further performance
6860 improvements, at least one of which (alias analysis) is
6861 not generally applicable to @command{f2c} (though @command{f2c}
6862 could presumably be changed to also take advantage of
6863 this new capability of the @command{gcc} back end, assuming
6864 this is made available in an upcoming release of @command{gcc}).
6866 @node Ease of Debugging
6867 @subsection Ease of Debugging
6869 Because @command{g77} compiles directly to assembler code like @command{gcc},
6870 instead of translating to an intermediate language (C) as does @command{f2c},
6871 support for debugging can be better for @command{g77} than @command{f2c}.
6873 However, although @command{g77} might be somewhat more ``native'' in terms of
6874 debugging support than @command{f2c} plus @command{gcc}, there still are a lot
6875 of things ``not quite right''.
6876 Many of the important ones should be resolved in the near future.
6878 For example, @command{g77} doesn't have to worry about reserved names
6879 like @command{f2c} does.
6880 Given @samp{FOR = WHILE}, @command{f2c} must necessarily
6881 translate this to something @emph{other} than
6882 @samp{for = while;}, because C reserves those words.
6884 However, @command{g77} does still uses things like an extra level of indirection
6885 for @code{ENTRY}-laden procedures---in this case, because the back end doesn't
6886 yet support multiple entry points.
6888 Another example is that, given
6890 @smallexample
6891 COMMON A, B
6892 EQUIVALENCE (B, C)
6893 @end smallexample
6895 @noindent
6896 the @command{g77} user should be able to access the variables directly, by name,
6897 without having to traverse C-like structures and unions, while @command{f2c}
6898 is unlikely to ever offer this ability (due to limitations in the
6899 C language).
6901 However, due to apparent bugs in the back end, @command{g77} currently doesn't
6902 take advantage of this facility at all---it doesn't emit any debugging
6903 information for @code{COMMON} and @code{EQUIVALENCE} areas,
6904 other than information
6905 on the array of @code{char} it creates (and, in the case
6906 of local @code{EQUIVALENCE}, names) for each such area.
6908 Yet another example is arrays.
6909 @command{g77} represents them to the debugger
6910 using the same ``dimensionality'' as in the source code, while @command{f2c}
6911 must necessarily convert them all to one-dimensional arrays to fit
6912 into the confines of the C language.
6913 However, the level of support
6914 offered by debuggers for interactive Fortran-style access to arrays
6915 as compiled by @command{g77} can vary widely.
6916 In some cases, it can actually
6917 be an advantage that @command{f2c} converts everything to widely supported
6918 C semantics.
6920 In fairness, @command{g77} could do many of the things @command{f2c} does
6921 to get things working at least as well as @command{f2c}---for now,
6922 the developers prefer making @command{g77} work the
6923 way they think it is supposed to, and finding help improving the
6924 other products (the back end of @command{gcc}; @command{gdb}; and so on)
6925 to get things working properly.
6927 @node Character and Hollerith Constants
6928 @subsection Character and Hollerith Constants
6929 @cindex character constants
6930 @cindex constants, character
6931 @cindex Hollerith constants
6932 @cindex constants, Hollerith
6933 @cindex trailing null byte
6934 @cindex null byte, trailing
6935 @cindex zero byte, trailing
6937 To avoid the extensive hassle that would be needed to avoid this,
6938 @command{f2c} uses C character constants to encode character and Hollerith
6939 constants.
6940 That means a constant like @samp{'HELLO'} is translated to
6941 @samp{"hello"} in C, which further means that an extra null byte is
6942 present at the end of the constant.
6943 This null byte is superfluous.
6945 @command{g77} does not generate such null bytes.
6946 This represents significant
6947 savings of resources, such as on systems where @file{/dev/null} or
6948 @file{/dev/zero} represent bottlenecks in the systems' performance,
6949 because @command{g77} simply asks for fewer zeros from the operating
6950 system than @command{f2c}.
6951 (Avoiding spurious use of zero bytes, each byte typically have
6952 eight zero bits, also reduces the liabilities in case
6953 Microsoft's rumored patent on the digits 0 and 1 is upheld.)
6955 @node Block Data and Libraries
6956 @section Block Data and Libraries
6957 @cindex block data and libraries
6958 @cindex BLOCK DATA statement
6959 @cindex statements, BLOCK DATA
6960 @cindex libraries, containing BLOCK DATA
6961 @cindex f2c compatibility
6962 @cindex compatibility, f2c
6964 To ensure that block data program units are linked, especially a concern
6965 when they are put into libraries, give each one a name (as in
6966 @samp{BLOCK DATA FOO}) and make sure there is an @samp{EXTERNAL FOO}
6967 statement in every program unit that uses any common block
6968 initialized by the corresponding @code{BLOCK DATA}.
6969 @command{g77} currently compiles a @code{BLOCK DATA} as if it were a
6970 @code{SUBROUTINE},
6971 that is, it generates an actual procedure having the appropriate name.
6972 The procedure does nothing but return immediately if it happens to be
6973 called.
6974 For @samp{EXTERNAL FOO}, where @samp{FOO} is not otherwise referenced in the
6975 same program unit, @command{g77} assumes there exists a @samp{BLOCK DATA FOO}
6976 in the program and ensures that by generating a
6977 reference to it so the linker will make sure it is present.
6978 (Specifically, @command{g77} outputs in the data section a static pointer to the
6979 external name @samp{FOO}.)
6981 The implementation @command{g77} currently uses to make this work is
6982 one of the few things not compatible with @command{f2c} as currently
6983 shipped.
6984 @command{f2c} currently does nothing with @samp{EXTERNAL FOO} except
6985 issue a warning that @samp{FOO} is not otherwise referenced,
6986 and, for @samp{BLOCK DATA FOO},
6987 @command{f2c} doesn't generate a dummy procedure with the name @samp{FOO}.
6988 The upshot is that you shouldn't mix @command{f2c} and @command{g77} in
6989 this particular case.
6990 If you use @command{f2c} to compile @samp{BLOCK DATA FOO},
6991 then any @command{g77}-compiled program unit that says @samp{EXTERNAL FOO}
6992 will result in an unresolved reference when linked.
6993 If you do the
6994 opposite, then @samp{FOO} might not be linked in under various
6995 circumstances (such as when @samp{FOO} is in a library, or you're
6996 using a ``clever'' linker---so clever, it produces a broken program
6997 with little or no warning by omitting initializations of global data
6998 because they are contained in unreferenced procedures).
7000 The changes you make to your code to make @command{g77} handle this situation,
7001 however, appear to be a widely portable way to handle it.
7002 That is, many systems permit it (as they should, since the
7003 FORTRAN 77 standard permits @samp{EXTERNAL FOO} when @samp{FOO}
7004 is a block data program unit), and of the ones
7005 that might not link @samp{BLOCK DATA FOO} under some circumstances, most of
7006 them appear to do so once @samp{EXTERNAL FOO} is present in the appropriate
7007 program units.
7009 Here is the recommended approach to modifying a program containing
7010 a program unit such as the following:
7012 @smallexample
7013 BLOCK DATA FOO
7014 COMMON /VARS/ X, Y, Z
7015 DATA X, Y, Z / 3., 4., 5. /
7017 @end smallexample
7019 @noindent
7020 If the above program unit might be placed in a library module, then
7021 ensure that every program unit in every program that references that
7022 particular @code{COMMON} area uses the @code{EXTERNAL} statement
7023 to force the area to be initialized.
7025 For example, change a program unit that starts with
7027 @smallexample
7028 INTEGER FUNCTION CURX()
7029 COMMON /VARS/ X, Y, Z
7030 CURX = X
7032 @end smallexample
7034 @noindent
7035 so that it uses the @code{EXTERNAL} statement, as in:
7037 @smallexample
7038 INTEGER FUNCTION CURX()
7039 COMMON /VARS/ X, Y, Z
7040 EXTERNAL FOO
7041 CURX = X
7043 @end smallexample
7045 @noindent
7046 That way, @samp{CURX} is compiled by @command{g77} (and many other
7047 compilers) so that the linker knows it must include @samp{FOO},
7048 the @code{BLOCK DATA} program unit that sets the initial values
7049 for the variables in @samp{VAR}, in the executable program.
7051 @node Loops
7052 @section Loops
7053 @cindex DO statement
7054 @cindex statements, DO
7055 @cindex trips, number of
7056 @cindex number of trips
7058 The meaning of a @code{DO} loop in Fortran is precisely specified
7059 in the Fortran standard@dots{}and is quite different from what
7060 many programmers might expect.
7062 In particular, Fortran iterative @code{DO} loops are implemented as if
7063 the number of trips through the loop is calculated @emph{before}
7064 the loop is entered.
7066 The number of trips for a loop is calculated from the @var{start},
7067 @var{end}, and @var{increment} values specified in a statement such as:
7069 @smallexample
7070 DO @var{iter} = @var{start}, @var{end}, @var{increment}
7071 @end smallexample
7073 @noindent
7074 The trip count is evaluated using a fairly simple formula
7075 based on the three values following the @samp{=} in the
7076 statement, and it is that trip count that is effectively
7077 decremented during each iteration of the loop.
7078 If, at the beginning of an iteration of the loop, the
7079 trip count is zero or negative, the loop terminates.
7080 The per-loop-iteration modifications to @var{iter} are not
7081 related to determining whether to terminate the loop.
7083 There are two important things to remember about the trip
7084 count:
7086 @itemize @bullet
7087 @item
7088 It can be @emph{negative}, in which case it is
7089 treated as if it was zero---meaning the loop is
7090 not executed at all.
7092 @item
7093 The type used to @emph{calculate} the trip count
7094 is the same type as @var{iter}, but the final
7095 calculation, and thus the type of the trip
7096 count itself, always is @code{INTEGER(KIND=1)}.
7097 @end itemize
7099 These two items mean that there are loops that cannot
7100 be written in straightforward fashion using the Fortran @code{DO}.
7102 For example, on a system with the canonical 32-bit two's-complement
7103 implementation of @code{INTEGER(KIND=1)}, the following loop will not work:
7105 @smallexample
7106 DO I = -2000000000, 2000000000
7107 @end smallexample
7109 @noindent
7110 Although the @var{start} and @var{end} values are well within
7111 the range of @code{INTEGER(KIND=1)}, the @emph{trip count} is not.
7112 The expected trip count is 40000000001, which is outside
7113 the range of @code{INTEGER(KIND=1)} on many systems.
7115 Instead, the above loop should be constructed this way:
7117 @smallexample
7118 I = -2000000000
7120   IF (I .GT. 2000000000) EXIT
7121   @dots{}
7122   I = I + 1
7123 END DO
7124 @end smallexample
7126 @noindent
7127 The simple @code{DO} construct and the @code{EXIT} statement
7128 (used to leave the innermost loop)
7129 are F90 features that @command{g77} supports.
7131 Some Fortran compilers have buggy implementations of @code{DO},
7132 in that they don't follow the standard.
7133 They implement @code{DO} as a straightforward translation
7134 to what, in C, would be a @code{for} statement.
7135 Instead of creating a temporary variable to hold the trip count
7136 as calculated at run time, these compilers
7137 use the iteration variable @var{iter} to control
7138 whether the loop continues at each iteration.
7140 The bug in such an implementation shows up when the
7141 trip count is within the range of the type of @var{iter},
7142 but the magnitude of @samp{ABS(@var{end}) + ABS(@var{incr})}
7143 exceeds that range.  For example:
7145 @smallexample
7146 DO I = 2147483600, 2147483647
7147 @end smallexample
7149 @noindent
7150 A loop started by the above statement will work as implemented
7151 by @command{g77}, but the use, by some compilers, of a
7152 more C-like implementation akin to
7154 @smallexample
7155 for (i = 2147483600; i <= 2147483647; ++i)
7156 @end smallexample
7158 @noindent
7159 produces a loop that does not terminate, because @samp{i}
7160 can never be greater than 2147483647, since incrementing it
7161 beyond that value overflows @samp{i}, setting it to -2147483648.
7162 This is a large, negative number that still is less than 2147483647.
7164 Another example of unexpected behavior of @code{DO} involves
7165 using a nonintegral iteration variable @var{iter}, that is,
7166 a @code{REAL} variable.
7167 Consider the following program:
7169 @smallexample
7170       DATA BEGIN, END, STEP /.1, .31, .007/
7171       DO 10 R = BEGIN, END, STEP
7172          IF (R .GT. END) PRINT *, R, ' .GT. ', END, '!!'
7173          PRINT *,R
7174 10    CONTINUE
7175       PRINT *,'LAST = ',R
7176       IF (R .LE. END) PRINT *, R, ' .LE. ', END, '!!'
7177       END
7178 @end smallexample
7180 @noindent
7181 A C-like view of @code{DO} would hold that the two ``exclamatory''
7182 @code{PRINT} statements are never executed.
7183 However, this is the output of running the above program
7184 as compiled by @command{g77} on a GNU/Linux ix86 system:
7186 @smallexample
7187  .100000001
7188  .107000001
7189  .114
7190  .120999999
7191  @dots{}
7192  .289000005
7193  .296000004
7194  .303000003
7195 LAST =   .310000002
7196  .310000002 .LE.   .310000002!!
7197 @end smallexample
7199 Note that one of the two checks in the program turned up
7200 an apparent violation of the programmer's expectation---yet,
7201 the loop is correctly implemented by @command{g77}, in that
7202 it has 30 iterations.
7203 This trip count of 30 is correct when evaluated using
7204 the floating-point representations for the @var{begin},
7205 @var{end}, and @var{incr} values (.1, .31, .007) on GNU/Linux
7206 ix86 are used.
7207 On other systems, an apparently more accurate trip count
7208 of 31 might result, but, nevertheless, @command{g77} is
7209 faithfully following the Fortran standard, and the result
7210 is not what the author of the sample program above
7211 apparently expected.
7212 (Such other systems might, for different values in the @code{DATA}
7213 statement, violate the other programmer's expectation,
7214 for example.)
7216 Due to this combination of imprecise representation
7217 of floating-point values and the often-misunderstood
7218 interpretation of @code{DO} by standard-conforming
7219 compilers such as @command{g77}, use of @code{DO} loops
7220 with @code{REAL} iteration
7221 variables is not recommended.
7222 Such use can be caught by specifying @option{-Wsurprising}.
7223 @xref{Warning Options}, for more information on this
7224 option.
7226 @node Working Programs
7227 @section Working Programs
7229 Getting Fortran programs to work in the first place can be
7230 quite a challenge---even when the programs already work on
7231 other systems, or when using other compilers.
7233 @command{g77} offers some facilities that might be useful for
7234 tracking down bugs in such programs.
7236 @menu
7237 * Not My Type::
7238 * Variables Assumed To Be Zero::
7239 * Variables Assumed To Be Saved::
7240 * Unwanted Variables::
7241 * Unused Arguments::
7242 * Surprising Interpretations of Code::
7243 * Aliasing Assumed To Work::
7244 * Output Assumed To Flush::
7245 * Large File Unit Numbers::
7246 * Floating-point precision::
7247 * Inconsistent Calling Sequences::
7248 @end menu
7250 @node Not My Type
7251 @subsection Not My Type
7252 @cindex mistyped variables
7253 @cindex variables, mistyped
7254 @cindex mistyped functions
7255 @cindex functions, mistyped
7256 @cindex implicit typing
7258 A fruitful source of bugs in Fortran source code is use, or
7259 mis-use, of Fortran's implicit-typing feature, whereby the
7260 type of a variable, array, or function is determined by the
7261 first character of its name.
7263 Simple cases of this include statements like @samp{LOGX=9.227},
7264 without a statement such as @samp{REAL LOGX}.
7265 In this case, @samp{LOGX} is implicitly given @code{INTEGER(KIND=1)}
7266 type, with the result of the assignment being that it is given
7267 the value @samp{9}.
7269 More involved cases include a function that is defined starting
7270 with a statement like @samp{DOUBLE PRECISION FUNCTION IPS(@dots{})}.
7271 Any caller of this function that does not also declare @samp{IPS}
7272 as type @code{DOUBLE PRECISION} (or, in GNU Fortran, @code{REAL(KIND=2)})
7273 is likely to assume it returns
7274 @code{INTEGER}, or some other type, leading to invalid results
7275 or even program crashes.
7277 The @option{-Wimplicit} option might catch failures to
7278 properly specify the types of
7279 variables, arrays, and functions in the code.
7281 However, in code that makes heavy use of Fortran's
7282 implicit-typing facility, this option might produce so
7283 many warnings about cases that are working, it would be
7284 hard to find the one or two that represent bugs.
7285 This is why so many experienced Fortran programmers strongly
7286 recommend widespread use of the @code{IMPLICIT NONE} statement,
7287 despite it not being standard FORTRAN 77, to completely turn
7288 off implicit typing.
7289 (@command{g77} supports @code{IMPLICIT NONE}, as do almost all
7290 FORTRAN 77 compilers.)
7292 Note that @option{-Wimplicit} catches only implicit typing of
7293 @emph{names}.
7294 It does not catch implicit typing of expressions such
7295 as @samp{X**(2/3)}.
7296 Such expressions can be buggy as well---in fact, @samp{X**(2/3)}
7297 is equivalent to @samp{X**0}, due to the way Fortran expressions
7298 are given types and then evaluated.
7299 (In this particular case, the programmer probably wanted
7300 @samp{X**(2./3.)}.)
7302 @node Variables Assumed To Be Zero
7303 @subsection Variables Assumed To Be Zero
7304 @cindex zero-initialized variables
7305 @cindex variables, assumed to be zero
7306 @cindex uninitialized variables
7308 Many Fortran programs were developed on systems that provided
7309 automatic initialization of all, or some, variables and arrays
7310 to zero.
7311 As a result, many of these programs depend, sometimes
7312 inadvertently, on this behavior, though to do so violates
7313 the Fortran standards.
7315 You can ask @command{g77} for this behavior by specifying the
7316 @option{-finit-local-zero} option when compiling Fortran code.
7317 (You might want to specify @option{-fno-automatic} as well,
7318 to avoid code-size inflation for non-optimized compilations.)
7320 Note that a program that works better when compiled with the
7321 @option{-finit-local-zero} option
7322 is almost certainly depending on a particular system's,
7323 or compiler's, tendency to initialize some variables to zero.
7324 It might be worthwhile finding such cases and fixing them,
7325 using techniques such as compiling with the @option{-O -Wuninitialized}
7326 options using @command{g77}.
7328 @node Variables Assumed To Be Saved
7329 @subsection Variables Assumed To Be Saved
7330 @cindex variables, retaining values across calls
7331 @cindex saved variables
7332 @cindex static variables
7334 Many Fortran programs were developed on systems that
7335 saved the values of all, or some, variables and arrays
7336 across procedure calls.
7337 As a result, many of these programs depend, sometimes
7338 inadvertently, on being able to assign a value to a
7339 variable, perform a @code{RETURN} to a calling procedure,
7340 and, upon subsequent invocation, reference the previously
7341 assigned variable to obtain the value.
7343 They expect this despite not using the @code{SAVE} statement
7344 to specify that the value in a variable is expected to survive
7345 procedure returns and calls.
7346 Depending on variables and arrays to retain values across
7347 procedure calls without using @code{SAVE} to require it violates
7348 the Fortran standards.
7350 You can ask @command{g77} to assume @code{SAVE} is specified for all
7351 relevant (local) variables and arrays by using the
7352 @option{-fno-automatic} option.
7354 Note that a program that works better when compiled with the
7355 @option{-fno-automatic} option
7356 is almost certainly depending on not having to use
7357 the @code{SAVE} statement as required by the Fortran standard.
7358 It might be worthwhile finding such cases and fixing them,
7359 using techniques such as compiling with the @samp{-O -Wuninitialized}
7360 options using @command{g77}.
7362 @node Unwanted Variables
7363 @subsection Unwanted Variables
7365 The @option{-Wunused} option can find bugs involving
7366 implicit typing, sometimes
7367 more easily than using @option{-Wimplicit} in code that makes
7368 heavy use of implicit typing.
7369 An unused variable or array might indicate that the
7370 spelling for its declaration is different from that of
7371 its intended uses.
7373 Other than cases involving typos, unused variables rarely
7374 indicate actual bugs in a program.
7375 However, investigating such cases thoroughly has, on occasion,
7376 led to the discovery of code that had not been completely
7377 written---where the programmer wrote declarations as needed
7378 for the whole algorithm, wrote some or even most of the code
7379 for that algorithm, then got distracted and forgot that the
7380 job was not complete.
7382 @node Unused Arguments
7383 @subsection Unused Arguments
7384 @cindex unused arguments
7385 @cindex arguments, unused
7387 As with unused variables, It is possible that unused arguments
7388 to a procedure might indicate a bug.
7389 Compile with @samp{-W -Wunused} option to catch cases of
7390 unused arguments.
7392 Note that @option{-W} also enables warnings regarding overflow
7393 of floating-point constants under certain circumstances.
7395 @node Surprising Interpretations of Code
7396 @subsection Surprising Interpretations of Code
7398 The @option{-Wsurprising} option can help find bugs involving
7399 expression evaluation or in
7400 the way @code{DO} loops with non-integral iteration variables
7401 are handled.
7402 Cases found by this option might indicate a difference of
7403 interpretation between the author of the code involved, and
7404 a standard-conforming compiler such as @command{g77}.
7405 Such a difference might produce actual bugs.
7407 In any case, changing the code to explicitly do what the
7408 programmer might have expected it to do, so @command{g77} and
7409 other compilers are more likely to follow the programmer's
7410 expectations, might be worthwhile, especially if such changes
7411 make the program work better.
7413 @node Aliasing Assumed To Work
7414 @subsection Aliasing Assumed To Work
7415 @cindex -falias-check option
7416 @cindex options, -falias-check
7417 @cindex -fargument-alias option
7418 @cindex options, -fargument-alias
7419 @cindex -fargument-noalias option
7420 @cindex options, -fargument-noalias
7421 @cindex -fno-argument-noalias-global option
7422 @cindex options, -fno-argument-noalias-global
7423 @cindex aliasing
7424 @cindex anti-aliasing
7425 @cindex overlapping arguments
7426 @cindex overlays
7427 @cindex association, storage
7428 @cindex storage association
7429 @cindex scheduling of reads and writes
7430 @cindex reads and writes, scheduling
7432 The @option{-falias-check}, @option{-fargument-alias},
7433 @option{-fargument-noalias},
7434 and @option{-fno-argument-noalias-global} options,
7435 introduced in version 0.5.20 and
7436 @command{g77}'s version 2.7.2.2.f.2 of @command{gcc},
7437 were withdrawn as of @command{g77} version 0.5.23
7438 due to their not being supported by @command{gcc} version 2.8.
7440 These options control the assumptions regarding aliasing
7441 (overlapping) of writes and reads to main memory (core) made
7442 by the @command{gcc} back end.
7444 The information below still is useful, but applies to
7445 only those versions of @command{g77} that support the
7446 alias analysis implied by support for these options.
7448 These options are effective only when compiling with @option{-O}
7449 (specifying any level other than @option{-O0})
7450 or with @option{-falias-check}.
7452 The default for Fortran code is @option{-fargument-noalias-global}.
7453 (The default for C code and code written in other C-based languages
7454 is @option{-fargument-alias}.
7455 These defaults apply regardless of whether you use @command{g77} or
7456 @command{gcc} to compile your code.)
7458 Note that, on some systems, compiling with @option{-fforce-addr} in
7459 effect can produce more optimal code when the default aliasing
7460 options are in effect (and when optimization is enabled).
7462 If your program is not working when compiled with optimization,
7463 it is possible it is violating the Fortran standards (77 and 90)
7464 by relying on the ability to ``safely'' modify variables and
7465 arrays that are aliased, via procedure calls, to other variables
7466 and arrays, without using @code{EQUIVALENCE} to explicitly
7467 set up this kind of aliasing.
7469 (The FORTRAN 77 standard's prohibition of this sort of
7470 overlap, generally referred to therein as ``storage
7471 association'', appears in Sections 15.9.3.6.
7472 This prohibition allows implementations, such as @command{g77},
7473 to, for example, implement the passing of procedures and
7474 even values in @code{COMMON} via copy operations into local,
7475 perhaps more efficiently accessed temporaries at entry to a
7476 procedure, and, where appropriate, via copy operations back
7477 out to their original locations in memory at exit from that
7478 procedure, without having to take into consideration the
7479 order in which the local copies are updated by the code,
7480 among other things.)
7482 To test this hypothesis, try compiling your program with
7483 the @option{-fargument-alias} option, which causes the
7484 compiler to revert to assumptions essentially the same as
7485 made by versions of @command{g77} prior to 0.5.20.
7487 If the program works using this option, that strongly suggests
7488 that the bug is in your program.
7489 Finding and fixing the bug(s) should result in a program that
7490 is more standard-conforming and that can be compiled by @command{g77}
7491 in a way that results in a faster executable.
7493 (You might want to try compiling with @option{-fargument-noalias},
7494 a kind of half-way point, to see if the problem is limited to
7495 aliasing between dummy arguments and @code{COMMON} variables---this
7496 option assumes that such aliasing is not done, while still allowing
7497 aliasing among dummy arguments.)
7499 An example of aliasing that is invalid according to the standards
7500 is shown in the following program, which might @emph{not} produce
7501 the expected results when executed:
7503 @smallexample
7504 I = 1
7505 CALL FOO(I, I)
7506 PRINT *, I
7509 SUBROUTINE FOO(J, K)
7510 J = J + K
7511 K = J * K
7512 PRINT *, J, K
7514 @end smallexample
7516 The above program attempts to use the temporary aliasing of the
7517 @samp{J} and @samp{K} arguments in @samp{FOO} to effect a
7518 pathological behavior---the simultaneous changing of the values
7519 of @emph{both} @samp{J} and @samp{K} when either one of them
7520 is written.
7522 The programmer likely expects the program to print these values:
7524 @example
7525 2  4
7527 @end example
7529 However, since the program is not standard-conforming, an
7530 implementation's behavior when running it is undefined, because
7531 subroutine @samp{FOO} modifies at least one of the arguments,
7532 and they are aliased with each other.
7533 (Even if one of the assignment statements was deleted, the
7534 program would still violate these rules.
7535 This kind of on-the-fly aliasing is permitted by the standard
7536 only when none of the aliased items are defined, or written,
7537 while the aliasing is in effect.)
7539 As a practical example, an optimizing compiler might schedule
7540 the @samp{J =} part of the second line of @samp{FOO} @emph{after}
7541 the reading of @samp{J} and @samp{K} for the @samp{J * K} expression,
7542 resulting in the following output:
7544 @example
7545 2  2
7547 @end example
7549 Essentially, compilers are promised (by the standard and, therefore,
7550 by programmers who write code they claim to be standard-conforming)
7551 that if they cannot detect aliasing via static analysis of a single
7552 program unit's @code{EQUIVALENCE} and @code{COMMON} statements, no
7553 such aliasing exists.
7554 In such cases, compilers are free to assume that an assignment to
7555 one variable will not change the value of another variable, allowing
7556 it to avoid generating code to re-read the value of the other
7557 variable, to re-schedule reads and writes, and so on, to produce
7558 a faster executable.
7560 The same promise holds true for arrays (as seen by the called
7561 procedure)---an element of one dummy array cannot be aliased
7562 with, or overlap, any element of another dummy array or be
7563 in a @code{COMMON} area known to the procedure.
7565 (These restrictions apply only when the procedure defines, or
7566 writes to, one of the aliased variables or arrays.)
7568 Unfortunately, there is no way to find @emph{all} possible cases of
7569 violations of the prohibitions against aliasing in Fortran code.
7570 Static analysis is certainly imperfect, as is run-time analysis,
7571 since neither can catch all violations.
7572 (Static analysis can catch all likely violations, and some that
7573 might never actually happen, while run-time analysis can catch
7574 only those violations that actually happen during a particular run.
7575 Neither approach can cope with programs mixing Fortran code with
7576 routines written in other languages, however.)
7578 Currently, @command{g77} provides neither static nor run-time facilities
7579 to detect any cases of this problem, although other products might.
7580 Run-time facilities are more likely to be offered by future
7581 versions of @command{g77}, though patches improving @command{g77} so that
7582 it provides either form of detection are welcome.
7584 @node Output Assumed To Flush
7585 @subsection Output Assumed To Flush
7586 @cindex ALWAYS_FLUSH
7587 @cindex synchronous write errors
7588 @cindex disk full
7589 @cindex flushing output
7590 @cindex fflush()
7591 @cindex I/O, flushing
7592 @cindex output, flushing
7593 @cindex writes, flushing
7594 @cindex NFS
7595 @cindex network file system
7597 For several versions prior to 0.5.20, @command{g77} configured its
7598 version of the @code{libf2c} run-time library so that one of
7599 its configuration macros, @code{ALWAYS_FLUSH}, was defined.
7601 This was done as a result of a belief that many programs expected
7602 output to be flushed to the operating system (under UNIX, via
7603 the @code{fflush()} library call) with the result that errors,
7604 such as disk full, would be immediately flagged via the
7605 relevant @code{ERR=} and @code{IOSTAT=} mechanism.
7607 Because of the adverse effects this approach had on the performance
7608 of many programs, @command{g77} no longer configures @code{libf2c}
7609 (now named @code{libg2c} in its @command{g77} incarnation)
7610 to always flush output.
7612 If your program depends on this behavior, either insert the
7613 appropriate @samp{CALL FLUSH} statements, or modify the sources
7614 to the @code{libg2c}, rebuild and reinstall @command{g77}, and
7615 relink your programs with the modified library.
7617 (Ideally, @code{libg2c} would offer the choice at run-time, so
7618 that a compile-time option to @command{g77} or @command{f2c} could
7619 result in generating the appropriate calls to flushing or
7620 non-flushing library routines.)
7622 Some Fortran programs require output
7623 (writes) to be flushed to the operating system (under UNIX,
7624 via the @code{fflush()} library call) so that errors,
7625 such as disk full, are immediately flagged via the relevant
7626 @code{ERR=} and @code{IOSTAT=} mechanism, instead of such
7627 errors being flagged later as subsequent writes occur, forcing
7628 the previously written data to disk, or when the file is
7629 closed.
7631 Essentially, the difference can be viewed as synchronous error
7632 reporting (immediate flagging of errors during writes) versus
7633 asynchronous, or, more precisely, buffered error reporting
7634 (detection of errors might be delayed).
7636 @code{libg2c} supports flagging write errors immediately when
7637 it is built with the @code{ALWAYS_FLUSH} macro defined.
7638 This results in a @code{libg2c} that runs slower, sometimes
7639 quite a bit slower, under certain circumstances---for example,
7640 accessing files via the networked file system NFS---but the
7641 effect can be more reliable, robust file I/O.
7643 If you know that Fortran programs requiring this level of precision
7644 of error reporting are to be compiled using the
7645 version of @command{g77} you are building, you might wish to
7646 modify the @command{g77} source tree so that the version of
7647 @code{libg2c} is built with the @code{ALWAYS_FLUSH} macro
7648 defined, enabling this behavior.
7650 To do this, find this line in @file{@value{path-libf2c}/f2c.h} in
7651 your @command{g77} source tree:
7653 @example
7654 /* #define ALWAYS_FLUSH */
7655 @end example
7657 Remove the leading @samp{/*@w{ }},
7658 so the line begins with @samp{#define},
7659 and the trailing @samp{@w{ }*/}.
7661 Then build or rebuild @command{g77} as appropriate.
7663 @node Large File Unit Numbers
7664 @subsection Large File Unit Numbers
7665 @cindex MXUNIT
7666 @cindex unit numbers
7667 @cindex maximum unit number
7668 @cindex illegal unit number
7669 @cindex increasing maximum unit number
7671 If your program crashes at run time with a message including
7672 the text @samp{illegal unit number}, that probably is
7673 a message from the run-time library, @code{libg2c}.
7675 The message means that your program has attempted to use a
7676 file unit number that is out of the range accepted by
7677 @code{libg2c}.
7678 Normally, this range is 0 through 99, and the high end
7679 of the range is controlled by a @code{libg2c} source-file
7680 macro named @code{MXUNIT}.
7682 If you can easily change your program to use unit numbers
7683 in the range 0 through 99, you should do so.
7685 As distributed, whether as part of @command{f2c} or @command{g77},
7686 @code{libf2c} accepts file unit numbers only in the range
7687 0 through 99.
7688 For example, a statement such as @samp{WRITE (UNIT=100)} causes
7689 a run-time crash in @code{libf2c}, because the unit number,
7690 100, is out of range.
7692 If you know that Fortran programs at your installation require
7693 the use of unit numbers higher than 99, you can change the
7694 value of the @code{MXUNIT} macro, which represents the maximum unit
7695 number, to an appropriately higher value.
7697 To do this, edit the file @file{@value{path-libf2c}/libI77/fio.h} in your
7698 @command{g77} source tree, changing the following line:
7700 @example
7701 #define MXUNIT 100
7702 @end example
7704 Change the line so that the value of @code{MXUNIT} is defined to be
7705 at least one @emph{greater} than the maximum unit number used by
7706 the Fortran programs on your system.
7708 (For example, a program that does @samp{WRITE (UNIT=255)} would require
7709 @code{MXUNIT} set to at least 256 to avoid crashing.)
7711 Then build or rebuild @command{g77} as appropriate.
7713 @emph{Note:} Changing this macro has @emph{no} effect on other limits
7714 your system might place on the number of files open at the same time.
7715 That is, the macro might allow a program to do @samp{WRITE (UNIT=100)},
7716 but the library and operating system underlying @code{libf2c} might
7717 disallow it if many other files have already been opened (via @code{OPEN} or
7718 implicitly via @code{READ}, @code{WRITE}, and so on).
7719 Information on how to increase these other limits should be found
7720 in your system's documentation.
7722 @node Floating-point precision
7723 @subsection Floating-point precision
7725 @cindex IEEE 754 conformance
7726 @cindex conformance, IEEE 754
7727 @cindex floating-point, precision
7728 @cindex ix86 floating-point
7729 @cindex x86 floating-point
7730 If your program depends on exact IEEE 754 floating-point handling it may
7731 help on some systems---specifically x86 or m68k hardware---to use
7732 the @option{-ffloat-store} option or to reset the precision flag on the
7733 floating-point unit.
7734 @xref{Optimize Options}.
7736 However, it might be better simply to put the FPU into double precision
7737 mode and not take the performance hit of @option{-ffloat-store}.  On x86
7738 and m68k GNU systems you can do this with a technique similar to that
7739 for turning on floating-point exceptions
7740 (@pxref{Floating-point Exception Handling}).
7741 The control word could be set to double precision by some code like this
7742 one:
7743 @smallexample
7744 #include <fpu_control.h>
7746   fpu_control_t cw = (_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE;
7747   _FPU_SETCW(cw);
7749 @end smallexample
7750 (It is not clear whether this has any effect on the operation of the GNU
7751 maths library, but we have no evidence of it causing trouble.)
7753 Some targets (such as the Alpha) may need special options for full IEEE
7754 conformance.
7755 @xref{Submodel Options,,Hardware Models and Configurations,gcc,Using
7756 the GNU Compiler Collection (GCC)}.
7758 @node Inconsistent Calling Sequences
7759 @subsection Inconsistent Calling Sequences
7761 @pindex ftnchek
7762 @cindex floating-point, errors
7763 @cindex ix86 FPU stack
7764 @cindex x86 FPU stack
7765 Code containing inconsistent calling sequences in the same file is
7766 normally rejected---see @ref{GLOBALS}.
7767 (Use, say, @command{ftnchek} to ensure
7768 consistency across source files.
7769 @xref{f2c Skeletons and Prototypes,,
7770 Generating Skeletons and Prototypes with @command{f2c}}.)
7772 Mysterious errors, which may appear to be code generation problems, can
7773 appear specifically on the x86 architecture with some such
7774 inconsistencies.  On x86 hardware, floating-point return values of
7775 functions are placed on the floating-point unit's register stack, not
7776 the normal stack.  Thus calling a @code{REAL} or @code{DOUBLE PRECISION}
7777 @code{FUNCTION} as some other sort of procedure, or vice versa,
7778 scrambles the floating-point stack.  This may break unrelated code
7779 executed later.  Similarly if, say, external C routines are written
7780 incorrectly.
7782 @node Overly Convenient Options
7783 @section Overly Convenient Command-line Options
7784 @cindex overly convenient options
7785 @cindex options, overly convenient
7787 These options should be used only as a quick-and-dirty way to determine
7788 how well your program will run under different compilation models
7789 without having to change the source.
7790 Some are more problematic
7791 than others, depending on how portable and maintainable you want the
7792 program to be (and, of course, whether you are allowed to change it
7793 at all is crucial).
7795 You should not continue to use these command-line options to compile
7796 a given program, but rather should make changes to the source code:
7798 @table @code
7799 @cindex -finit-local-zero option
7800 @cindex options, -finit-local-zero
7801 @item -finit-local-zero
7802 (This option specifies that any uninitialized local variables
7803 and arrays have default initialization to binary zeros.)
7805 Many other compilers do this automatically, which means lots of
7806 Fortran code developed with those compilers depends on it.
7808 It is safer (and probably
7809 would produce a faster program) to find the variables and arrays that
7810 need such initialization and provide it explicitly via @code{DATA}, so that
7811 @option{-finit-local-zero} is not needed.
7813 Consider using @option{-Wuninitialized} (which requires @option{-O}) to
7814 find likely candidates, but
7815 do not specify @option{-finit-local-zero} or @option{-fno-automatic},
7816 or this technique won't work.
7818 @cindex -fno-automatic option
7819 @cindex options, -fno-automatic
7820 @item -fno-automatic
7821 (This option specifies that all local variables and arrays
7822 are to be treated as if they were named in @code{SAVE} statements.)
7824 Many other compilers do this automatically, which means lots of
7825 Fortran code developed with those compilers depends on it.
7827 The effect of this is that all non-automatic variables and arrays
7828 are made static, that is, not placed on the stack or in heap storage.
7829 This might cause a buggy program to appear to work better.
7830 If so, rather than relying on this command-line option (and hoping all
7831 compilers provide the equivalent one), add @code{SAVE}
7832 statements to some or all program unit sources, as appropriate.
7833 Consider using @option{-Wuninitialized} (which requires @option{-O})
7834 to find likely candidates, but
7835 do not specify @option{-finit-local-zero} or @option{-fno-automatic},
7836 or this technique won't work.
7838 The default is @option{-fautomatic}, which tells @command{g77} to try
7839 and put variables and arrays on the stack (or in fast registers)
7840 where possible and reasonable.
7841 This tends to make programs faster.
7843 @cindex automatic arrays
7844 @cindex arrays, automatic
7845 @emph{Note:} Automatic variables and arrays are not affected
7846 by this option.
7847 These are variables and arrays that are @emph{necessarily} automatic,
7848 either due to explicit statements, or due to the way they are
7849 declared.
7850 Examples include local variables and arrays not given the
7851 @code{SAVE} attribute in procedures declared @code{RECURSIVE},
7852 and local arrays declared with non-constant bounds (automatic
7853 arrays).
7854 Currently, @command{g77} supports only automatic arrays, not
7855 @code{RECURSIVE} procedures or other means of explicitly
7856 specifying that variables or arrays are automatic.
7858 @cindex -f@var{group}-intrinsics-hide option
7859 @cindex options, -f@var{group}-intrinsics-hide
7860 @item -f@var{group}-intrinsics-hide
7861 Change the source code to use @code{EXTERNAL} for any external procedure
7862 that might be the name of an intrinsic.
7863 It is easy to find these using @option{-f@var{group}-intrinsics-disable}.
7864 @end table
7866 @node Faster Programs
7867 @section Faster Programs
7868 @cindex speed, of programs
7869 @cindex programs, speeding up
7871 Aside from the usual @command{gcc} options, such as @option{-O},
7872 @option{-ffast-math}, and so on, consider trying some of the
7873 following approaches to speed up your program (once you get
7874 it working).
7876 @menu
7877 * Aligned Data::
7878 * Prefer Automatic Uninitialized Variables::
7879 * Avoid f2c Compatibility::
7880 * Use Submodel Options::
7881 @end menu
7883 @node Aligned Data
7884 @subsection Aligned Data
7885 @cindex alignment
7886 @cindex data, aligned
7887 @cindex stack, aligned
7888 @cindex aligned data
7889 @cindex aligned stack
7890 @cindex Pentium optimizations
7891 @cindex optimization, for Pentium
7893 On some systems, such as those with Pentium Pro CPUs, programs
7894 that make heavy use of @code{REAL(KIND=2)} (@code{DOUBLE PRECISION})
7895 might run much slower
7896 than possible due to the compiler not aligning these 64-bit
7897 values to 64-bit boundaries in memory.
7898 (The effect also is present, though
7899 to a lesser extent, on the 586 (Pentium) architecture.)
7901 The Intel x86 architecture generally ensures that these programs will
7902 work on all its implementations,
7903 but particular implementations (such as Pentium Pro)
7904 perform better with more strict alignment.
7905 (Such behavior isn't unique to the Intel x86 architecture.)
7906 Other architectures might @emph{demand} 64-bit alignment
7907 of 64-bit data.
7909 There are a variety of approaches to use to address this problem:
7911 @itemize @bullet
7912 @item
7913 @cindex @code{COMMON} layout
7914 @cindex layout of @code{COMMON} blocks
7915 Order your @code{COMMON} and @code{EQUIVALENCE} areas such
7916 that the variables and arrays with the widest alignment
7917 guidelines come first.
7919 For example, on most systems, this would mean placing
7920 @code{COMPLEX(KIND=2)}, @code{REAL(KIND=2)}, and
7921 @code{INTEGER(KIND=2)} entities first, followed by @code{REAL(KIND=1)},
7922 @code{INTEGER(KIND=1)}, and @code{LOGICAL(KIND=1)} entities, then
7923 @code{INTEGER(KIND=6)} entities, and finally @code{CHARACTER}
7924 and @code{INTEGER(KIND=3)} entities.
7926 The reason to use such placement is it makes it more likely
7927 that your data will be aligned properly, without requiring
7928 you to do detailed analysis of each aggregate (@code{COMMON}
7929 and @code{EQUIVALENCE}) area.
7931 Specifically, on systems where the above guidelines are
7932 appropriate, placing @code{CHARACTER} entities before
7933 @code{REAL(KIND=2)} entities can work just as well,
7934 but only if the number of bytes occupied by the @code{CHARACTER}
7935 entities is divisible by the recommended alignment for
7936 @code{REAL(KIND=2)}.
7938 By ordering the placement of entities in aggregate
7939 areas according to the simple guidelines above, you
7940 avoid having to carefully count the number of bytes
7941 occupied by each entity to determine whether the
7942 actual alignment of each subsequent entity meets the
7943 alignment guidelines for the type of that entity.
7945 If you don't ensure correct alignment of @code{COMMON} elements, the
7946 compiler may be forced by some systems to violate the Fortran semantics by
7947 adding padding to get @code{DOUBLE PRECISION} data properly aligned.
7948 If the unfortunate practice is employed of overlaying different types of
7949 data in the @code{COMMON} block, the different variants
7950 of this block may become misaligned with respect to each other.
7951 Even if your platform doesn't require strict alignment,
7952 @code{COMMON} should be laid out as above for portability.
7953 (Unfortunately the FORTRAN 77 standard didn't anticipate this
7954 possible requirement, which is compiler-independent on a given platform.)
7956 @item
7957 @cindex -malign-double option
7958 @cindex options, -malign-double
7959 Use the (x86-specific) @option{-malign-double} option when compiling
7960 programs for the Pentium and Pentium Pro architectures (called 586
7961 and 686 in the @command{gcc} configuration subsystem).
7962 The warning about this in the @command{gcc} manual isn't
7963 generally relevant to Fortran,
7964 but using it will force @code{COMMON} to be padded if necessary to align
7965 @code{DOUBLE PRECISION} data.
7967 When @code{DOUBLE PRECISION} data is forcibly aligned
7968 in @code{COMMON} by @command{g77} due to specifying @option{-malign-double},
7969 @command{g77} issues a warning about the need to
7970 insert padding.
7972 In this case, each and every program unit that uses
7973 the same @code{COMMON} area
7974 must specify the same layout of variables and their types
7975 for that area
7976 and be compiled with @option{-malign-double} as well.
7977 @command{g77} will issue warnings in each case,
7978 but as long as every program unit using that area
7979 is compiled with the same warnings,
7980 the resulting object files should work when linked together
7981 unless the program makes additional assumptions about
7982 @code{COMMON} area layouts that are outside the scope
7983 of the FORTRAN 77 standard,
7984 or uses @code{EQUIVALENCE} or different layouts
7985 in ways that assume no padding is ever inserted by the compiler.
7987 @item
7988 Ensure that @file{crt0.o} or @file{crt1.o}
7989 on your system guarantees a 64-bit
7990 aligned stack for @code{main()}.
7991 The recent one from GNU (@code{glibc2}) will do this on x86 systems,
7992 but we don't know of any other x86 setups where it will be right.
7993 Read your system's documentation to determine if
7994 it is appropriate to upgrade to a more recent version
7995 to obtain the optimal alignment.
7996 @end itemize
7998 Progress is being made on making this work
7999 ``out of the box'' on future versions of @command{g77},
8000 @command{gcc}, and some of the relevant operating systems
8001 (such as GNU/Linux).
8003 @cindex alignment testing
8004 @cindex testing alignment
8005 A package that tests the degree to which a Fortran compiler
8006 (such as @command{g77})
8007 aligns 64-bit floating-point variables and arrays
8008 is available at @uref{ftp://alpha.gnu.org/gnu/g77/align/}.
8010 @node Prefer Automatic Uninitialized Variables
8011 @subsection Prefer Automatic Uninitialized Variables
8013 If you're using @option{-fno-automatic} already, you probably
8014 should change your code to allow compilation with @option{-fautomatic}
8015 (the default), to allow the program to run faster.
8017 Similarly, you should be able to use @option{-fno-init-local-zero}
8018 (the default) instead of @option{-finit-local-zero}.
8019 This is because it is rare that every variable affected by these
8020 options in a given program actually needs to
8021 be so affected.
8023 For example, @option{-fno-automatic}, which effectively @code{SAVE}s
8024 every local non-automatic variable and array, affects even things like
8025 @code{DO} iteration
8026 variables, which rarely need to be @code{SAVE}d, and this often reduces
8027 run-time performances.
8028 Similarly, @option{-fno-init-local-zero} forces such
8029 variables to be initialized to zero---when @code{SAVE}d (such as when
8030 @option{-fno-automatic}), this by itself generally affects only
8031 startup time for a program, but when not @code{SAVE}d,
8032 it can slow down the procedure every time it is called.
8034 @xref{Overly Convenient Options,,Overly Convenient Command-Line Options},
8035 for information on the @option{-fno-automatic} and
8036 @option{-finit-local-zero} options and how to convert
8037 their use into selective changes in your own code.
8039 @node Avoid f2c Compatibility
8040 @subsection Avoid f2c Compatibility
8041 @cindex -fno-f2c option
8042 @cindex options, -fno-f2c
8043 @cindex @command{f2c} compatibility
8044 @cindex compatibility, @command{f2c}
8046 If you aren't linking with any code compiled using
8047 @command{f2c}, try using the @option{-fno-f2c} option when
8048 compiling @emph{all} the code in your program.
8049 (Note that @code{libf2c} is @emph{not} an example of code
8050 that is compiled using @command{f2c}---it is compiled by a C
8051 compiler, typically @command{gcc}.)
8053 @node Use Submodel Options
8054 @subsection Use Submodel Options
8055 @cindex submodels
8057 Using an appropriate @option{-m} option to generate specific code for your
8058 CPU may be worthwhile, though it may mean the executable won't run on
8059 other versions of the CPU that don't support the same instruction set.
8060 @xref{Submodel Options,,Hardware Models and Configurations,gcc,Using the
8061 GNU Compiler Collection (GCC)}.  For instance on an x86 system the
8062 compiler might have
8063 been built---as shown by @samp{g77 -v}---for the target
8064 @samp{i386-pc-linux-gnu}, i.e.@: an @samp{i386} CPU@.  In that case to
8065 generate code best optimized for a Pentium you could use the option
8066 @option{-march=pentium}.
8068 For recent CPUs that don't have explicit support in the released version
8069 of @command{gcc}, it @emph{might} still be possible to get improvements
8070 with certain @option{-m} options.
8072 @option{-fomit-frame-pointer} can help performance on x86 systems and
8073 others.  It will, however, inhibit debugging on the systems on which it
8074 is not turned on anyway by @option{-O}.
8076 @node Trouble
8077 @chapter Known Causes of Trouble with GNU Fortran
8078 @cindex bugs, known
8079 @cindex installation trouble
8080 @cindex known causes of trouble
8082 This section describes known problems that affect users of GNU Fortran.
8083 Most of these are not GNU Fortran bugs per se---if they were, we would
8084 fix them.
8085 But the result for a user might be like the result of a bug.
8087 Some of these problems are due to bugs in other software, some are
8088 missing features that are too much work to add, and some are places
8089 where people's opinions differ as to what is best.
8091 To find out about major bugs discovered in the current release and
8092 possible workarounds for them, see
8093 @uref{ftp://alpha.gnu.org/g77.plan}.
8095 (Note that some of this portion of the manual is lifted
8096 directly from the @command{gcc} manual, with minor modifications
8097 to tailor it to users of @command{g77}.
8098 Anytime a bug seems to have more to do with the @command{gcc}
8099 portion of @command{g77}, see
8100 @ref{Trouble,,Known Causes of Trouble with GCC,
8101 gcc,Using the GNU Compiler Collection (GCC)}.)
8103 @menu
8104 * But-bugs::         Bugs really in other programs or elsewhere.
8105 * Known Bugs::       Bugs known to be in this version of @command{g77}.
8106 * Missing Features:: Features we already know we want to add later.
8107 * Disappointments::  Regrettable things we can't change.
8108 * Non-bugs::         Things we think are right, but some others disagree.
8109 * Warnings and Errors::  Which problems in your code get warnings,
8110                         and which get errors.
8111 @end menu
8113 @node But-bugs
8114 @section Bugs Not In GNU Fortran
8115 @cindex but-bugs
8117 These are bugs to which the maintainers often have to reply,
8118 ``but that isn't a bug in @command{g77}@dots{}''.
8119 Some of these already are fixed in new versions of other
8120 software; some still need to be fixed; some are problems
8121 with how @command{g77} is installed or is being used;
8122 some are the result of bad hardware that causes software
8123 to misbehave in sometimes bizarre ways;
8124 some just cannot be addressed at this time until more
8125 is known about the problem.
8127 Please don't re-report these bugs to the @command{g77} maintainers---if
8128 you must remind someone how important it is to you that the problem
8129 be fixed, talk to the people responsible for the other products
8130 identified below, but preferably only after you've tried the
8131 latest versions of those products.
8132 The @command{g77} maintainers have their hands full working on
8133 just fixing and improving @command{g77}, without serving as a
8134 clearinghouse for all bugs that happen to affect @command{g77}
8135 users.
8137 @xref{Collected Fortran Wisdom}, for information on behavior
8138 of Fortran programs, and the programs that compile them, that
8139 might be @emph{thought} to indicate bugs.
8141 @menu
8142 * Signal 11 and Friends::  Strange behavior by any software.
8143 * Cannot Link Fortran Programs::  Unresolved references.
8144 * Large Common Blocks::    Problems on older GNU/Linux systems.
8145 * Debugger Problems::      When the debugger crashes.
8146 * NeXTStep Problems::      Misbehaving executables.
8147 * Stack Overflow::         More misbehaving executables.
8148 * Nothing Happens::        Less behaving executables.
8149 * Strange Behavior at Run Time::  Executables misbehaving due to
8150                             bugs in your program.
8151 * Floating-point Errors::  The results look wrong, but@dots{}.
8152 @end menu
8154 @node Signal 11 and Friends
8155 @subsection Signal 11 and Friends
8156 @cindex signal 11
8157 @cindex hardware errors
8159 A whole variety of strange behaviors can occur when the
8160 software, or the way you are using the software,
8161 stresses the hardware in a way that triggers hardware bugs.
8162 This might seem hard to believe, but it happens frequently
8163 enough that there exist documents explaining in detail
8164 what the various causes of the problems are, what
8165 typical symptoms look like, and so on.
8167 Generally these problems are referred to in this document
8168 as ``signal 11'' crashes, because the Linux kernel, running
8169 on the most popular hardware (the Intel x86 line), often
8170 stresses the hardware more than other popular operating
8171 systems.
8172 When hardware problems do occur under GNU/Linux on x86
8173 systems, these often manifest themselves as ``signal 11''
8174 problems, as illustrated by the following diagnostic:
8176 @smallexample
8177 sh# @kbd{g77 myprog.f}
8178 gcc: Internal compiler error: program f771 got fatal signal 11
8180 @end smallexample
8182 It is @emph{very} important to remember that the above
8183 message is @emph{not} the only one that indicates a
8184 hardware problem, nor does it always indicate a hardware
8185 problem.
8187 In particular, on systems other than those running the Linux
8188 kernel, the message might appear somewhat or very different,
8189 as it will if the error manifests itself while running a
8190 program other than the @command{g77} compiler.
8191 For example,
8192 it will appear somewhat different when running your program,
8193 when running Emacs, and so on.
8195 How to cope with such problems is well beyond the scope
8196 of this manual.
8198 However, users of Linux-based systems (such as GNU/Linux)
8199 should review @uref{http://www.bitwizard.nl/sig11/}, a source
8200 of detailed information on diagnosing hardware problems,
8201 by recognizing their common symptoms.
8203 Users of other operating systems and hardware might
8204 find this reference useful as well.
8205 If you know of similar material for another hardware/software
8206 combination, please let us know so we can consider including
8207 a reference to it in future versions of this manual.
8209 @node Cannot Link Fortran Programs
8210 @subsection Cannot Link Fortran Programs
8211 @cindex unresolved reference (various)
8212 @cindex linking error for user code
8213 @cindex code, user
8214 @cindex @command{ld}, error linking user code
8215 @cindex @command{ld}, can't find strange names
8216 On some systems, perhaps just those with out-of-date (shared?)
8217 libraries, unresolved-reference errors happen when linking @command{g77}-compiled
8218 programs (which should be done using @command{g77}).
8220 If this happens to you, try appending @option{-lc} to the command you
8221 use to link the program, e.g. @samp{g77 foo.f -lc}.
8222 @command{g77} already specifies @samp{-lg2c -lm} when it calls the linker,
8223 but it cannot also specify @option{-lc} because not all systems have a
8224 file named @file{libc.a}.
8226 It is unclear at this point whether there are legitimately installed
8227 systems where @samp{-lg2c -lm} is insufficient to resolve code produced
8228 by @command{g77}.
8230 @cindex undefined reference (_main)
8231 @cindex linking error, user code
8232 @cindex @command{ld}, error linking user code
8233 @cindex code, user
8234 @cindex @command{ld}, can't find @samp{_main}
8235 If your program doesn't link due to unresolved references to names
8236 like @samp{_main}, make sure you're using the @command{g77} command to do the
8237 link, since this command ensures that the necessary libraries are
8238 loaded by specifying @samp{-lg2c -lm} when it invokes the @command{gcc}
8239 command to do the actual link.
8240 (Use the @option{-v} option to discover
8241 more about what actually happens when you use the @command{g77} and @command{gcc}
8242 commands.)
8244 Also, try specifying @option{-lc} as the last item on the @command{g77}
8245 command line, in case that helps.
8247 @node Large Common Blocks
8248 @subsection Large Common Blocks
8249 @cindex common blocks, large
8250 @cindex large common blocks
8251 @cindex linking, errors
8252 @cindex @command{ld}, errors
8253 @cindex errors, linker
8254 On some older GNU/Linux systems, programs with common blocks larger
8255 than 16MB cannot be linked without some kind of error
8256 message being produced.
8258 This is a bug in older versions of @command{ld}, fixed in
8259 more recent versions of @code{binutils}, such as version 2.6.
8261 @node Debugger Problems
8262 @subsection Debugger Problems
8263 @cindex @command{gdb}, support
8264 @cindex support, @command{gdb}
8265 There are some known problems when using @command{gdb} on code
8266 compiled by @command{g77}.
8267 Inadequate investigation as of the release of 0.5.16 results in not
8268 knowing which products are the culprit, but @file{gdb-4.14} definitely
8269 crashes when, for example, an attempt is made to print the contents
8270 of a @code{COMPLEX(KIND=2)} dummy array, on at least some GNU/Linux
8271 machines, plus some others.
8272 Attempts to access assumed-size arrays are
8273 also known to crash recent versions of @command{gdb}.
8274 (@command{gdb}'s Fortran support was done for a different compiler
8275 and isn't properly compatible with @command{g77}.)
8277 @node NeXTStep Problems
8278 @subsection NeXTStep Problems
8279 @cindex NeXTStep problems
8280 @cindex bus error
8281 @cindex segmentation violation
8282 Developers of Fortran code on NeXTStep (all architectures) have to
8283 watch out for the following problem when writing programs with
8284 large, statically allocated (i.e. non-stack based) data structures
8285 (common blocks, saved arrays).
8287 Due to the way the native loader (@file{/bin/ld}) lays out
8288 data structures in virtual memory, it is very easy to create an
8289 executable wherein the @samp{__DATA} segment overlaps (has addresses in
8290 common) with the @samp{UNIX STACK} segment.
8292 This leads to all sorts of trouble, from the executable simply not
8293 executing, to bus errors.
8294 The NeXTStep command line tool @command{ebadexec} points to
8295 the problem as follows:
8297 @smallexample
8298 % @kbd{/bin/ebadexec a.out}
8299 /bin/ebadexec: __LINKEDIT segment (truncated address = 0x3de000
8300 rounded size = 0x2a000) of executable file: a.out overlaps with UNIX
8301 STACK segment (truncated address = 0x400000 rounded size =
8302 0x3c00000) of executable file: a.out
8303 @end smallexample
8305 (In the above case, it is the @samp{__LINKEDIT} segment that overlaps the
8306 stack segment.)
8308 This can be cured by assigning the @samp{__DATA} segment
8309 (virtual) addresses beyond the stack segment.
8310 A conservative
8311 estimate for this is from address 6000000 (hexadecimal) onwards---this
8312 has always worked for me [Toon Moene]:
8314 @smallexample
8315 % @kbd{g77 -segaddr __DATA 6000000 test.f}
8316 % @kbd{ebadexec a.out}
8317 ebadexec: file: a.out appears to be executable
8319 @end smallexample
8321 Browsing through @file{@value{path-g77}/Makefile.in},
8322 you will find that the @code{f771} program itself also has to be
8323 linked with these flags---it has large statically allocated
8324 data structures.
8325 (Version 0.5.18 reduces this somewhat, but probably
8326 not enough.)
8328 (The above item was contributed by Toon Moene
8329 (@email{toon@@moene.indiv.nluug.nl}).)
8331 @node Stack Overflow
8332 @subsection Stack Overflow
8333 @cindex stack, overflow
8334 @cindex segmentation violation
8335 @command{g77} code might fail at runtime (probably with a ``segmentation
8336 violation'') due to overflowing the stack.
8337 This happens most often on systems with an environment
8338 that provides substantially more heap space (for use
8339 when arbitrarily allocating and freeing memory) than stack
8340 space.
8342 Often this can be cured by
8343 increasing or removing your shell's limit on stack usage, typically
8344 using @kbd{limit stacksize} (in @command{csh} and derivatives) or
8345 @kbd{ulimit -s} (in @command{sh} and derivatives).
8347 Increasing the allowed stack size might, however, require
8348 changing some operating system or system configuration parameters.
8350 You might be able to work around the problem by compiling with the
8351 @option{-fno-automatic} option to reduce stack usage, probably at the
8352 expense of speed.
8354 @command{g77}, on most machines, puts many variables and arrays on the stack
8355 where possible, and can be configured (by changing
8356 @code{FFECOM_sizeMAXSTACKITEM} in @file{@value{path-g77}/com.c}) to force
8357 smaller-sized entities into static storage (saving
8358 on stack space) or permit larger-sized entities to be put on the
8359 stack (which can improve run-time performance, as it presents
8360 more opportunities for the GBE to optimize the generated code).
8362 @emph{Note:} Putting more variables and arrays on the stack
8363 might cause problems due to system-dependent limits on stack size.
8364 Also, the value of @code{FFECOM_sizeMAXSTACKITEM} has no
8365 effect on automatic variables and arrays.
8366 @xref{But-bugs}, for more information.
8367 @emph{Note:} While @code{libg2c} places a limit on the range
8368 of Fortran file-unit numbers, the underlying library and operating
8369 system might impose different kinds of limits.
8370 For example, some systems limit the number of files simultaneously
8371 open by a running program.
8372 Information on how to increase these limits should be found
8373 in your system's documentation.
8375 @cindex automatic arrays
8376 @cindex arrays, automatic
8377 However, if your program uses large automatic arrays
8378 (for example, has declarations like @samp{REAL A(N)} where
8379 @samp{A} is a local array and @samp{N} is a dummy or
8380 @code{COMMON} variable that can have a large value),
8381 neither use of @option{-fno-automatic},
8382 nor changing the cut-off point for @command{g77} for using the stack,
8383 will solve the problem by changing the placement of these
8384 large arrays, as they are @emph{necessarily} automatic.
8386 @command{g77} currently provides no means to specify that
8387 automatic arrays are to be allocated on the heap instead
8388 of the stack.
8389 So, other than increasing the stack size, your best bet is to
8390 change your source code to avoid large automatic arrays.
8391 Methods for doing this currently are outside the scope of
8392 this document.
8394 (@emph{Note:} If your system puts stack and heap space in the
8395 same memory area, such that they are effectively combined, then
8396 a stack overflow probably indicates a program that is either
8397 simply too large for the system, or buggy.)
8399 @node Nothing Happens
8400 @subsection Nothing Happens
8401 @cindex nothing happens
8402 @cindex naming programs
8403 @cindex @command{test} programs
8404 @cindex programs, @command{test}
8405 It is occasionally reported that a ``simple'' program,
8406 such as a ``Hello, World!'' program, does nothing when
8407 it is run, even though the compiler reported no errors,
8408 despite the program containing nothing other than a
8409 simple @code{PRINT} statement.
8411 This most often happens because the program has been
8412 compiled and linked on a UNIX system and named @command{test},
8413 though other names can lead to similarly unexpected
8414 run-time behavior on various systems.
8416 Essentially this problem boils down to giving
8417 your program a name that is already known to
8418 the shell you are using to identify some other program,
8419 which the shell continues to execute instead of your
8420 program when you invoke it via, for example:
8422 @smallexample
8423 sh# @kbd{test}
8425 @end smallexample
8427 Under UNIX and many other system, a simple command name
8428 invokes a searching mechanism that might well not choose
8429 the program located in the current working directory if
8430 there is another alternative (such as the @command{test}
8431 command commonly installed on UNIX systems).
8433 The reliable way to invoke a program you just linked in
8434 the current directory under UNIX is to specify it using
8435 an explicit pathname, as in:
8437 @smallexample
8438 sh# @kbd{./test}
8439  Hello, World!
8441 @end smallexample
8443 Users who encounter this problem should take the time to
8444 read up on how their shell searches for commands, how to
8445 set their search path, and so on.
8446 The relevant UNIX commands to learn about include
8447 @command{man}, @command{info} (on GNU systems), @command{setenv} (or
8448 @command{set} and @command{env}), @command{which}, and @command{find}.
8450 @node Strange Behavior at Run Time
8451 @subsection Strange Behavior at Run Time
8452 @cindex segmentation violation
8453 @cindex bus error
8454 @cindex overwritten data
8455 @cindex data, overwritten
8456 @command{g77} code might fail at runtime with ``segmentation violation'',
8457 ``bus error'', or even something as subtle as a procedure call
8458 overwriting a variable or array element that it is not supposed
8459 to touch.
8461 These can be symptoms of a wide variety of actual bugs that
8462 occurred earlier during the program's run, but manifested
8463 themselves as @emph{visible} problems some time later.
8465 Overflowing the bounds of an array---usually by writing beyond
8466 the end of it---is one of two kinds of bug that often occurs
8467 in Fortran code.
8468 (Compile your code with the @option{-fbounds-check} option
8469 to catch many of these kinds of errors at program run time.)
8471 The other kind of bug is a mismatch between the actual arguments
8472 passed to a procedure and the dummy arguments as declared by that
8473 procedure.
8475 Both of these kinds of bugs, and some others as well, can be
8476 difficult to track down, because the bug can change its behavior,
8477 or even appear to not occur, when using a debugger.
8479 That is, these bugs can be quite sensitive to data, including
8480 data representing the placement of other data in memory (that is,
8481 pointers, such as the placement of stack frames in memory).
8483 @command{g77} now offers the
8484 ability to catch and report some of these problems at compile, link, or
8485 run time, such as by generating code to detect references to
8486 beyond the bounds of most arrays (except assumed-size arrays),
8487 and checking for agreement between calling and called procedures.
8488 Future improvements are likely to be made in the procedure-mismatch area,
8489 at least.
8491 In the meantime, finding and fixing the programming
8492 bugs that lead to these behaviors is, ultimately, the user's
8493 responsibility, as difficult as that task can sometimes be.
8495 @cindex infinite spaces printed
8496 @cindex space, endless printing of
8497 @cindex libc, non-ANSI or non-default
8498 @cindex C library
8499 @cindex linking against non-standard library
8500 @cindex Solaris
8501 One runtime problem that has been observed might have a simple solution.
8502 If a formatted @code{WRITE} produces an endless stream of spaces, check
8503 that your program is linked against the correct version of the C library.
8504 The configuration process takes care to account for your
8505 system's normal @file{libc} not being ANSI-standard, which will
8506 otherwise cause this behavior.
8507 If your system's default library is
8508 ANSI-standard and you subsequently link against a non-ANSI one, there
8509 might be problems such as this one.
8511 Specifically, on Solaris2 systems,
8512 avoid picking up the @code{BSD} library from @file{/usr/ucblib}.
8514 @node Floating-point Errors
8515 @subsection Floating-point Errors
8516 @cindex floating-point errors
8517 @cindex rounding errors
8518 @cindex inconsistent floating-point results
8519 @cindex results, inconsistent
8520 Some programs appear to produce inconsistent floating-point
8521 results compiled by @command{g77} versus by other compilers.
8523 Often the reason for this behavior is the fact that floating-point
8524 values are represented on almost all Fortran systems by
8525 @emph{approximations}, and these approximations are inexact
8526 even for apparently simple values like 0.1, 0.2, 0.3, 0.4, 0.6,
8527 0.7, 0.8, 0.9, 1.1, and so on.
8528 Most Fortran systems, including all current ports of @command{g77},
8529 use binary arithmetic to represent these approximations.
8531 Therefore, the exact value of any floating-point approximation
8532 as manipulated by @command{g77}-compiled code is representable by
8533 adding some combination of the values 1.0, 0.5, 0.25, 0.125, and
8534 so on (just keep dividing by two) through the precision of the
8535 fraction (typically around 23 bits for @code{REAL(KIND=1)}, 52 for
8536 @code{REAL(KIND=2)}), then multiplying the sum by a integral
8537 power of two (in Fortran, by @samp{2**N}) that typically is between
8538 -127 and +128 for @code{REAL(KIND=1)} and -1023 and +1024 for
8539 @code{REAL(KIND=2)}, then multiplying by -1 if the number
8540 is negative.
8542 So, a value like 0.2 is exactly represented in decimal---since
8543 it is a fraction, @samp{2/10}, with a denominator that is compatible
8544 with the base of the number system (base 10).
8545 However, @samp{2/10} cannot be represented by any finite number
8546 of sums of any of 1.0, 0.5, 0.25, and so on, so 0.2 cannot
8547 be exactly represented in binary notation.
8549 (On the other hand, decimal notation can represent any binary
8550 number in a finite number of digits.
8551 Decimal notation cannot do so with ternary, or base-3,
8552 notation, which would represent floating-point numbers as
8553 sums of any of @samp{1/1}, @samp{1/3}, @samp{1/9}, and so on.
8554 After all, no finite number of decimal digits can exactly
8555 represent @samp{1/3}.
8556 Fortunately, few systems use ternary notation.)
8558 Moreover, differences in the way run-time I/O libraries convert
8559 between these approximations and the decimal representation often
8560 used by programmers and the programs they write can result in
8561 apparent differences between results that do not actually exist,
8562 or exist to such a small degree that they usually are not worth
8563 worrying about.
8565 For example, consider the following program:
8567 @smallexample
8568 PRINT *, 0.2
8570 @end smallexample
8572 When compiled by @command{g77}, the above program might output
8573 @samp{0.20000003}, while another compiler might produce a
8574 executable that outputs @samp{0.2}.
8576 This particular difference is due to the fact that, currently,
8577 conversion of floating-point values by the @code{libg2c} library,
8578 used by @command{g77}, handles only double-precision values.
8580 Since @samp{0.2} in the program is a single-precision value, it
8581 is converted to double precision (still in binary notation)
8582 before being converted back to decimal.
8583 The conversion to binary appends @emph{binary} zero digits to the
8584 original value---which, again, is an inexact approximation of
8585 0.2---resulting in an approximation that is much less exact
8586 than is connoted by the use of double precision.
8588 (The appending of binary zero digits has essentially the same
8589 effect as taking a particular decimal approximation of
8590 @samp{1/3}, such as @samp{0.3333333}, and appending decimal
8591 zeros to it, producing @samp{0.33333330000000000}.
8592 Treating the resulting decimal approximation as if it really
8593 had 18 or so digits of valid precision would make it seem
8594 a very poor approximation of @samp{1/3}.)
8596 As a result of converting the single-precision approximation
8597 to double precision by appending binary zeros, the conversion
8598 of the resulting double-precision
8599 value to decimal produces what looks like an incorrect
8600 result, when in fact the result is @emph{inexact}, and
8601 is probably no less inaccurate or imprecise an approximation
8602 of 0.2 than is produced by other compilers that happen to output
8603 the converted value as ``exactly'' @samp{0.2}.
8604 (Some compilers behave in a way that can make them appear
8605 to retain more accuracy across a conversion of a single-precision
8606 constant to double precision.
8607 @xref{Context-Sensitive Constants}, to see why
8608 this practice is illusory and even dangerous.)
8610 Note that a more exact approximation of the constant is
8611 computed when the program is changed to specify a
8612 double-precision constant:
8614 @smallexample
8615 PRINT *, 0.2D0
8617 @end smallexample
8619 Future versions of @command{g77} and/or @code{libg2c} might convert
8620 single-precision values directly to decimal,
8621 instead of converting them to double precision first.
8622 This would tend to result in output that is more consistent
8623 with that produced by some other Fortran implementations.
8625 A useful source of information on floating-point computation is David
8626 Goldberg, `What Every Computer Scientist Should Know About
8627 Floating-Point Arithmetic', Computing Surveys, 23, March 1991, pp.@:
8628 5-48.
8629 An online version is available at
8630 @uref{http://docs.sun.com/},
8631 and there is a supplemented version, in PostScript form, at
8632 @uref{http://www.validgh.com/goldberg/paper.ps}.
8634 Information related to the IEEE 754
8635 floating-point standard by a leading light can be found at
8636 @uref{http://http.cs.berkeley.edu/%7Ewkahan/ieee754status/};
8637 see also slides from the short course referenced from
8638 @uref{http://http.cs.berkeley.edu/%7Efateman/}.
8639 @uref{http://www.linuxsupportline.com/%7Ebillm/} has a brief
8640 guide to IEEE 754, a somewhat x86-GNU/Linux-specific FAQ,
8641 and library code for GNU/Linux x86 systems.
8643 The supplement to the PostScript-formatted Goldberg document,
8644 referenced above, is available in HTML format.
8645 See `Differences Among IEEE 754 Implementations' by Doug Priest,
8646 available online at
8647 @uref{http://www.validgh.com/goldberg/addendum.html}.
8648 This document explores some of the issues surrounding computing
8649 of extended (80-bit) results on processors such as the x86,
8650 especially when those results are arbitrarily truncated
8651 to 32-bit or 64-bit values by the compiler
8652 as ``spills''.
8654 @cindex spills of floating-point results
8655 @cindex 80-bit spills
8656 @cindex truncation, of floating-point values
8657 (@emph{Note:} @command{g77} specifically, and @command{gcc} generally,
8658 does arbitrarily truncate 80-bit results during spills
8659 as of this writing.
8660 It is not yet clear whether a future version of
8661 the GNU compiler suite will offer 80-bit spills
8662 as an option, or perhaps even as the default behavior.)
8664 @c xref would be different between editions:
8665 The GNU C library provides routines for controlling the FPU, and other
8666 documentation about this.
8668 @xref{Floating-point precision}, regarding IEEE 754 conformance.
8670 @include bugs.texi
8672 @node Missing Features
8673 @section Missing Features
8675 This section lists features we know are missing from @command{g77},
8676 and which we want to add someday.
8677 (There is no priority implied in the ordering below.)
8679 @menu
8680 GNU Fortran language:
8681 * Better Source Model::
8682 * Fortran 90 Support::
8683 * Intrinsics in PARAMETER Statements::
8684 * Arbitrary Concatenation::
8685 * SELECT CASE on CHARACTER Type::
8686 * RECURSIVE Keyword::
8687 * Popular Non-standard Types::
8688 * Full Support for Compiler Types::
8689 * Array Bounds Expressions::
8690 * POINTER Statements::
8691 * Sensible Non-standard Constructs::
8692 * READONLY Keyword::
8693 * FLUSH Statement::
8694 * Expressions in FORMAT Statements::
8695 * Explicit Assembler Code::
8696 * Q Edit Descriptor::
8698 GNU Fortran dialects:
8699 * Old-style PARAMETER Statements::
8700 * TYPE and ACCEPT I/O Statements::
8701 * STRUCTURE UNION RECORD MAP::
8702 * OPEN CLOSE and INQUIRE Keywords::
8703 * ENCODE and DECODE::
8704 * AUTOMATIC Statement::
8705 * Suppressing Space Padding::
8706 * Fortran Preprocessor::
8707 * Bit Operations on Floating-point Data::
8708 * Really Ugly Character Assignments::
8710 New facilities:
8711 * POSIX Standard::
8712 * Floating-point Exception Handling::
8713 * Nonportable Conversions::
8714 * Large Automatic Arrays::
8715 * Support for Threads::
8716 * Increasing Precision/Range::
8717 * Enabling Debug Lines::
8719 Better diagnostics:
8720 * Better Warnings::
8721 * Gracefully Handle Sensible Bad Code::
8722 * Non-standard Conversions::
8723 * Non-standard Intrinsics::
8724 * Modifying DO Variable::
8725 * Better Pedantic Compilation::
8726 * Warn About Implicit Conversions::
8727 * Invalid Use of Hollerith Constant::
8728 * Dummy Array Without Dimensioning Dummy::
8729 * Invalid FORMAT Specifiers::
8730 * Ambiguous Dialects::
8731 * Unused Labels::
8732 * Informational Messages::
8734 Run-time facilities:
8735 * Uninitialized Variables at Run Time::
8736 * Portable Unformatted Files::
8737 * Better List-directed I/O::
8738 * Default to Console I/O::
8740 Debugging:
8741 * Labels Visible to Debugger::
8742 @end menu
8744 @node Better Source Model
8745 @subsection Better Source Model
8747 @command{g77} needs to provide, as the default source-line model,
8748 a ``pure visual'' mode, where
8749 the interpretation of a source program in this mode can be accurately
8750 determined by a user looking at a traditionally displayed rendition
8751 of the program (assuming the user knows whether the program is fixed
8752 or free form).
8754 The design should assume the user cannot tell tabs from spaces
8755 and cannot see trailing spaces on lines, but has canonical tab stops
8756 and, for fixed-form source, has the ability to always know exactly
8757 where column 72 is (since the Fortran standard itself requires
8758 this for fixed-form source).
8760 This would change the default treatment of fixed-form source
8761 to not treat lines with tabs as if they were infinitely long---instead,
8762 they would end at column 72 just as if the tabs were replaced
8763 by spaces in the canonical way.
8765 As part of this, provide common alternate models (Digital, @command{f2c},
8766 and so on) via command-line options.
8767 This includes allowing arbitrarily long
8768 lines for free-form source as well as fixed-form source and providing
8769 various limits and diagnostics as appropriate.
8771 @cindex sequence numbers
8772 @cindex columns 73 through 80
8773 Also, @command{g77} should offer, perhaps even default to, warnings
8774 when characters beyond the last valid column are anything other
8775 than spaces.
8776 This would mean code with ``sequence numbers'' in columns 73 through 80
8777 would be rejected, and there's a lot of that kind of code around,
8778 but one of the most frequent bugs encountered by new users is
8779 accidentally writing fixed-form source code into and beyond
8780 column 73.
8781 So, maybe the users of old code would be able to more easily handle
8782 having to specify, say, a @option{-Wno-col73to80} option.
8784 @node Fortran 90 Support
8785 @subsection Fortran 90 Support
8786 @cindex Fortran 90, support
8787 @cindex support, Fortran 90
8789 @command{g77} does not support many of the features that
8790 distinguish Fortran 90 (and, now, Fortran 95) from
8791 ANSI FORTRAN 77.
8793 Some Fortran 90 features are supported, because they
8794 make sense to offer even to die-hard users of F77.
8795 For example, many of them codify various ways F77 has
8796 been extended to meet users' needs during its tenure,
8797 so @command{g77} might as well offer them as the primary
8798 way to meet those same needs, even if it offers compatibility
8799 with one or more of the ways those needs were met
8800 by other F77 compilers in the industry.
8802 Still, many important F90 features are not supported,
8803 because no attempt has been made to research each and
8804 every feature and assess its viability in @command{g77}.
8805 In the meantime, users who need those features must
8806 use Fortran 90 compilers anyway, and the best approach
8807 to adding some F90 features to GNU Fortran might well be
8808 to fund a comprehensive project to create GNU Fortran 95.
8810 @node Intrinsics in PARAMETER Statements
8811 @subsection Intrinsics in @code{PARAMETER} Statements
8812 @cindex PARAMETER statement
8813 @cindex statements, PARAMETER
8815 @command{g77} doesn't allow intrinsics in @code{PARAMETER} statements.
8817 Related to this, @command{g77} doesn't allow non-integral
8818 exponentiation in @code{PARAMETER} statements, such as
8819 @samp{PARAMETER (R=2**.25)}.
8820 It is unlikely @command{g77} will ever support this feature,
8821 as doing it properly requires complete emulation of
8822 a target computer's floating-point facilities when
8823 building @command{g77} as a cross-compiler.
8824 But, if the @command{gcc} back end is enhanced to provide
8825 such a facility, @command{g77} will likely use that facility
8826 in implementing this feature soon afterwards.
8828 @node Arbitrary Concatenation
8829 @subsection Arbitrary Concatenation
8830 @cindex concatenation
8831 @cindex CHARACTER*(*)
8832 @cindex run-time, dynamic allocation
8834 @command{g77} doesn't support arbitrary operands for concatenation
8835 in contexts where run-time allocation is required.
8836 For example:
8838 @smallexample
8839 SUBROUTINE X(A)
8840 CHARACTER*(*) A
8841 CALL FOO(A // 'suffix')
8842 @end smallexample
8844 @node SELECT CASE on CHARACTER Type
8845 @subsection @code{SELECT CASE} on @code{CHARACTER} Type
8847 Character-type selector/cases for @code{SELECT CASE} currently
8848 are not supported.
8850 @node RECURSIVE Keyword
8851 @subsection @code{RECURSIVE} Keyword
8852 @cindex RECURSIVE keyword
8853 @cindex keywords, RECURSIVE
8854 @cindex recursion, lack of
8855 @cindex lack of recursion
8857 @command{g77} doesn't support the @code{RECURSIVE} keyword that
8858 F90 compilers do.
8859 Nor does it provide any means for compiling procedures
8860 designed to do recursion.
8862 All recursive code can be rewritten to not use recursion,
8863 but the result is not pretty.
8865 @node Increasing Precision/Range
8866 @subsection Increasing Precision/Range
8867 @cindex -r8
8868 @cindex -qrealsize=8
8869 @cindex -i8
8870 @cindex f2c
8871 @cindex increasing precision
8872 @cindex precision, increasing
8873 @cindex increasing range
8874 @cindex range, increasing
8875 @cindex Toolpack
8876 @cindex Netlib
8878 Some compilers, such as @command{f2c}, have an option (@option{-r8},
8879 @option{-qrealsize=8} or
8880 similar) that provides automatic treatment of @code{REAL}
8881 entities such that they have twice the storage size, and
8882 a corresponding increase in the range and precision, of what
8883 would normally be the @code{REAL(KIND=1)} (default @code{REAL}) type.
8884 (This affects @code{COMPLEX} the same way.)
8886 They also typically offer another option (@option{-i8}) to increase
8887 @code{INTEGER} entities so they are twice as large
8888 (with roughly twice as much range).
8890 (There are potential pitfalls in using these options.)
8892 @command{g77} does not yet offer any option that performs these
8893 kinds of transformations.
8894 Part of the problem is the lack of detailed specifications regarding
8895 exactly how these options affect the interpretation of constants,
8896 intrinsics, and so on.
8898 Until @command{g77} addresses this need, programmers could improve
8899 the portability of their code by modifying it to not require
8900 compile-time options to produce correct results.
8901 Some free tools are available which may help, specifically
8902 in Toolpack (which one would expect to be sound) and the @file{fortran}
8903 section of the Netlib repository.
8905 Use of preprocessors can provide a fairly portable means
8906 to work around the lack of widely portable methods in the Fortran
8907 language itself (though increasing acceptance of Fortran 90 would
8908 alleviate this problem).
8910 @node Popular Non-standard Types
8911 @subsection Popular Non-standard Types
8912 @cindex @code{INTEGER*2} support
8913 @cindex types, @code{INTEGER*2}
8914 @cindex @code{LOGICAL*1} support
8915 @cindex types, @code{LOGICAL*1}
8917 @command{g77} doesn't fully support @code{INTEGER*2}, @code{LOGICAL*1},
8918 and similar.
8919 In the meantime, version 0.5.18 provides rudimentary support
8920 for them.
8922 @node Full Support for Compiler Types
8923 @subsection Full Support for Compiler Types
8925 @cindex @code{REAL*16} support
8926 @cindex types, @code{REAL*16}
8927 @cindex @code{INTEGER*8} support
8928 @cindex types, @code{INTEGER*8}
8929 @command{g77} doesn't support @code{INTEGER}, @code{REAL}, and @code{COMPLEX} equivalents
8930 for @emph{all} applicable back-end-supported types (@code{char}, @code{short int},
8931 @code{int}, @code{long int}, @code{long long int}, and @code{long double}).
8932 This means providing intrinsic support, and maybe constant
8933 support (using F90 syntax) as well, and, for most
8934 machines will result in automatic support of @code{INTEGER*1},
8935 @code{INTEGER*2}, @code{INTEGER*8}, maybe even @code{REAL*16},
8936 and so on.
8938 @node Array Bounds Expressions
8939 @subsection Array Bounds Expressions
8940 @cindex array elements, in adjustable array bounds
8941 @cindex function references, in adjustable array bounds
8942 @cindex array bounds, adjustable
8943 @cindex @code{DIMENSION} statement
8944 @cindex statements, @code{DIMENSION}
8946 @command{g77} doesn't support more general expressions to dimension
8947 arrays, such as array element references, function
8948 references, etc.
8950 For example, @command{g77} currently does not accept the following:
8952 @smallexample
8953 SUBROUTINE X(M, N)
8954 INTEGER N(10), M(N(2), N(1))
8955 @end smallexample
8957 @node POINTER Statements
8958 @subsection POINTER Statements
8959 @cindex POINTER statement
8960 @cindex statements, POINTER
8961 @cindex Cray pointers
8963 @command{g77} doesn't support pointers or allocatable objects
8964 (other than automatic arrays).
8965 This set of features is
8966 probably considered just behind intrinsics
8967 in @code{PARAMETER} statements on the list of large,
8968 important things to add to @command{g77}.
8970 In the meantime, consider using the @code{INTEGER(KIND=7)}
8971 declaration to specify that a variable must be
8972 able to hold a pointer.
8973 This construct is not portable to other non-GNU compilers,
8974 but it is portable to all machines GNU Fortran supports
8975 when @command{g77} is used.
8977 @xref{Functions and Subroutines}, for information on
8978 @code{%VAL()}, @code{%REF()}, and @code{%DESCR()}
8979 constructs, which are useful for passing pointers to
8980 procedures written in languages other than Fortran.
8982 @node Sensible Non-standard Constructs
8983 @subsection Sensible Non-standard Constructs
8985 @command{g77} rejects things other compilers accept,
8986 like @samp{INTRINSIC SQRT,SQRT}.
8987 As time permits in the future, some of these things that are easy for
8988 humans to read and write and unlikely to be intended to mean something
8989 else will be accepted by @command{g77} (though @option{-fpedantic} should
8990 trigger warnings about such non-standard constructs).
8992 Until @command{g77} no longer gratuitously rejects sensible code,
8993 you might as well fix your code
8994 to be more standard-conforming and portable.
8996 The kind of case that is important to except from the
8997 recommendation to change your code is one where following
8998 good coding rules would force you to write non-standard
8999 code that nevertheless has a clear meaning.
9001 For example, when writing an @code{INCLUDE} file that
9002 defines a common block, it might be appropriate to
9003 include a @code{SAVE} statement for the common block
9004 (such as @samp{SAVE /CBLOCK/}), so that variables
9005 defined in the common block retain their values even
9006 when all procedures declaring the common block become
9007 inactive (return to their callers).
9009 However, putting @code{SAVE} statements in an @code{INCLUDE}
9010 file would prevent otherwise standard-conforming code
9011 from also specifying the @code{SAVE} statement, by itself,
9012 to indicate that all local variables and arrays are to
9013 have the @code{SAVE} attribute.
9015 For this reason, @command{g77} already has been changed to
9016 allow this combination, because although the general
9017 problem of gratuitously rejecting unambiguous and
9018 ``safe'' constructs still exists in @command{g77}, this
9019 particular construct was deemed useful enough that
9020 it was worth fixing @command{g77} for just this case.
9022 So, while there is no need to change your code
9023 to avoid using this particular construct, there
9024 might be other, equally appropriate but non-standard
9025 constructs, that you shouldn't have to stop using
9026 just because @command{g77} (or any other compiler)
9027 gratuitously rejects it.
9029 Until the general problem is solved, if you have
9030 any such construct you believe is worthwhile
9031 using (e.g. not just an arbitrary, redundant
9032 specification of an attribute), please submit a
9033 bug report with an explanation, so we can consider
9034 fixing @command{g77} just for cases like yours.
9036 @node READONLY Keyword
9037 @subsection @code{READONLY} Keyword
9038 @cindex READONLY
9040 Support for @code{READONLY}, in @code{OPEN} statements,
9041 requires @code{libg2c} support,
9042 to make sure that @samp{CLOSE(@dots{},STATUS='DELETE')}
9043 does not delete a file opened on a unit
9044 with the @code{READONLY} keyword,
9045 and perhaps to trigger a fatal diagnostic
9046 if a @code{WRITE} or @code{PRINT}
9047 to such a unit is attempted.
9049 @emph{Note:} It is not sufficient for @command{g77} and @code{libg2c}
9050 (its version of @code{libf2c})
9051 to assume that @code{READONLY} does not need some kind of explicit support
9052 at run time,
9053 due to UNIX systems not (generally) needing it.
9054 @command{g77} is not just a UNIX-based compiler!
9056 Further, mounting of non-UNIX filesystems on UNIX systems
9057 (such as via NFS)
9058 might require proper @code{READONLY} support.
9060 @cindex SHARED
9061 (Similar issues might be involved with supporting the @code{SHARED}
9062 keyword.)
9064 @node FLUSH Statement
9065 @subsection @code{FLUSH} Statement
9067 @command{g77} could perhaps use a @code{FLUSH} statement that
9068 does what @samp{CALL FLUSH} does,
9069 but that supports @samp{*} as the unit designator (same unit as for
9070 @code{PRINT}) and accepts @code{ERR=} and/or @code{IOSTAT=}
9071 specifiers.
9073 @node Expressions in FORMAT Statements
9074 @subsection Expressions in @code{FORMAT} Statements
9075 @cindex FORMAT statement
9076 @cindex statements, FORMAT
9078 @command{g77} doesn't support @samp{FORMAT(I<J>)} and the like.
9079 Supporting this requires a significant redesign or replacement
9080 of @code{libg2c}.
9082 However, @command{g77} does support
9083 this construct when the expression is constant
9084 (as of version 0.5.22).
9085 For example:
9087 @smallexample
9088       PARAMETER (IWIDTH = 12)
9089 10    FORMAT (I<IWIDTH>)
9090 @end smallexample
9092 Otherwise, at least for output (@code{PRINT} and
9093 @code{WRITE}), Fortran code making use of this feature can
9094 be rewritten to avoid it by constructing the @code{FORMAT}
9095 string in a @code{CHARACTER} variable or array, then
9096 using that variable or array in place of the @code{FORMAT}
9097 statement label to do the original @code{PRINT} or @code{WRITE}.
9099 Many uses of this feature on input can be rewritten this way
9100 as well, but not all can.
9101 For example, this can be rewritten:
9103 @smallexample
9104       READ 20, I
9105 20    FORMAT (I<J>)
9106 @end smallexample
9108 However, this cannot, in general, be rewritten, especially
9109 when @code{ERR=} and @code{END=} constructs are employed:
9111 @smallexample
9112       READ 30, J, I
9113 30    FORMAT (I<J>)
9114 @end smallexample
9116 @node Explicit Assembler Code
9117 @subsection Explicit Assembler Code
9119 @command{g77} needs to provide some way, a la @command{gcc}, for @command{g77}
9120 code to specify explicit assembler code.
9122 @node Q Edit Descriptor
9123 @subsection Q Edit Descriptor
9124 @cindex FORMAT statement
9125 @cindex Q edit descriptor
9126 @cindex edit descriptor, Q
9128 The @code{Q} edit descriptor in @code{FORMAT}s isn't supported.
9129 (This is meant to get the number of characters remaining in an input record.)
9130 Supporting this requires a significant redesign or replacement
9131 of @code{libg2c}.
9133 A workaround might be using internal I/O or the stream-based intrinsics.
9134 @xref{FGetC Intrinsic (subroutine)}.
9136 @node Old-style PARAMETER Statements
9137 @subsection Old-style PARAMETER Statements
9138 @cindex PARAMETER statement
9139 @cindex statements, PARAMETER
9141 @command{g77} doesn't accept @samp{PARAMETER I=1}.
9142 Supporting this obsolete form of
9143 the @code{PARAMETER} statement would not be particularly hard, as most of the
9144 parsing code is already in place and working.
9146 Until time/money is
9147 spent implementing it, you might as well fix your code to use the
9148 standard form, @samp{PARAMETER (I=1)} (possibly needing
9149 @samp{INTEGER I} preceding the @code{PARAMETER} statement as well,
9150 otherwise, in the obsolete form of @code{PARAMETER}, the
9151 type of the variable is set from the type of the constant being
9152 assigned to it).
9154 @node TYPE and ACCEPT I/O Statements
9155 @subsection @code{TYPE} and @code{ACCEPT} I/O Statements
9156 @cindex TYPE statement
9157 @cindex statements, TYPE
9158 @cindex ACCEPT statement
9159 @cindex statements, ACCEPT
9161 @command{g77} doesn't support the I/O statements @code{TYPE} and
9162 @code{ACCEPT}.
9163 These are common extensions that should be easy to support,
9164 but also are fairly easy to work around in user code.
9166 Generally, any @samp{TYPE fmt,list} I/O statement can be replaced
9167 by @samp{PRINT fmt,list}.
9168 And, any @samp{ACCEPT fmt,list} statement can be
9169 replaced by @samp{READ fmt,list}.
9171 @node STRUCTURE UNION RECORD MAP
9172 @subsection @code{STRUCTURE}, @code{UNION}, @code{RECORD}, @code{MAP}
9173 @cindex STRUCTURE statement
9174 @cindex statements, STRUCTURE
9175 @cindex UNION statement
9176 @cindex statements, UNION
9177 @cindex RECORD statement
9178 @cindex statements, RECORD
9179 @cindex MAP statement
9180 @cindex statements, MAP
9182 @command{g77} doesn't support @code{STRUCTURE}, @code{UNION}, @code{RECORD},
9183 @code{MAP}.
9184 This set of extensions is quite a bit
9185 lower on the list of large, important things to add to @command{g77}, partly
9186 because it requires a great deal of work either upgrading or
9187 replacing @code{libg2c}.
9189 @node OPEN CLOSE and INQUIRE Keywords
9190 @subsection @code{OPEN}, @code{CLOSE}, and @code{INQUIRE} Keywords
9191 @cindex disposition of files
9192 @cindex OPEN statement
9193 @cindex statements, OPEN
9194 @cindex CLOSE statement
9195 @cindex statements, CLOSE
9196 @cindex INQUIRE statement
9197 @cindex statements, INQUIRE
9199 @command{g77} doesn't have support for keywords such as @code{DISP='DELETE'} in
9200 the @code{OPEN}, @code{CLOSE}, and @code{INQUIRE} statements.
9201 These extensions are easy to add to @command{g77} itself, but
9202 require much more work on @code{libg2c}.
9204 @cindex FORM='PRINT'
9205 @cindex ANS carriage control
9206 @cindex carriage control
9207 @pindex asa
9208 @pindex fpr
9209 @command{g77} doesn't support @code{FORM='PRINT'} or an equivalent to
9210 translate the traditional `carriage control' characters in column 1 of
9211 output to use backspaces, carriage returns and the like.  However
9212 programs exist to translate them in output files (or standard output).
9213 These are typically called either @command{fpr} or @command{asa}.  You can get
9214 a version of @command{asa} from
9215 @uref{ftp://sunsite.unc.edu/pub/Linux/devel/lang/fortran} for GNU
9216 systems which will probably build easily on other systems.
9217 Alternatively, @command{fpr} is in BSD distributions in various archive
9218 sites.
9220 @c (Can both programs can be used in a pipeline,
9221 @c with a named input file,
9222 @c and/or with a named output file???)
9224 @node ENCODE and DECODE
9225 @subsection @code{ENCODE} and @code{DECODE}
9226 @cindex ENCODE statement
9227 @cindex statements, ENCODE
9228 @cindex DECODE statement
9229 @cindex statements, DECODE
9231 @command{g77} doesn't support @code{ENCODE} or @code{DECODE}.
9233 These statements are best replaced by READ and WRITE statements
9234 involving internal files (CHARACTER variables and arrays).
9236 For example, replace a code fragment like
9238 @smallexample
9239       INTEGER*1 LINE(80)
9240 @dots{}
9241       DECODE (80, 9000, LINE) A, B, C
9242 @dots{}
9243 9000  FORMAT (1X, 3(F10.5))
9244 @end smallexample
9246 @noindent
9247 with:
9249 @smallexample
9250       CHARACTER*80 LINE
9251 @dots{}
9252       READ (UNIT=LINE, FMT=9000) A, B, C
9253 @dots{}
9254 9000  FORMAT (1X, 3(F10.5))
9255 @end smallexample
9257 Similarly, replace a code fragment like
9259 @smallexample
9260       INTEGER*1 LINE(80)
9261 @dots{}
9262       ENCODE (80, 9000, LINE) A, B, C
9263 @dots{}
9264 9000  FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
9265 @end smallexample
9267 @noindent
9268 with:
9270 @smallexample
9271       CHARACTER*80 LINE
9272 @dots{}
9273       WRITE (UNIT=LINE, FMT=9000) A, B, C
9274 @dots{}
9275 9000  FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
9276 @end smallexample
9278 It is entirely possible that @code{ENCODE} and @code{DECODE} will
9279 be supported by a future version of @command{g77}.
9281 @node AUTOMATIC Statement
9282 @subsection @code{AUTOMATIC} Statement
9283 @cindex @code{AUTOMATIC} statement
9284 @cindex statements, @code{AUTOMATIC}
9285 @cindex automatic variables
9286 @cindex variables, automatic
9288 @command{g77} doesn't support the @code{AUTOMATIC} statement that
9289 @command{f2c} does.
9291 @code{AUTOMATIC} would identify a variable or array
9292 as not being @code{SAVE}'d, which is normally the default,
9293 but which would be especially useful for code that, @emph{generally},
9294 needed to be compiled with the @option{-fno-automatic} option.
9296 @code{AUTOMATIC} also would serve as a hint to the compiler that placing
9297 the variable or array---even a very large array--on the stack is acceptable.
9299 @code{AUTOMATIC} would not, by itself, designate the containing procedure
9300 as recursive.
9302 @code{AUTOMATIC} should work syntactically like @code{SAVE},
9303 in that @code{AUTOMATIC} with no variables listed should apply to
9304 all pertinent variables and arrays
9305 (which would not include common blocks or their members).
9307 Variables and arrays denoted as @code{AUTOMATIC}
9308 would not be permitted to be initialized via @code{DATA}
9309 or other specification of any initial values,
9310 requiring explicit initialization,
9311 such as via assignment statements.
9313 @cindex UNSAVE
9314 @cindex STATIC
9315 Perhaps @code{UNSAVE} and @code{STATIC},
9316 as strict semantic opposites to @code{SAVE} and @code{AUTOMATIC},
9317 should be provided as well.
9319 @node Suppressing Space Padding
9320 @subsection Suppressing Space Padding of Source Lines
9322 @command{g77} should offer VXT-Fortran-style suppression of virtual
9323 spaces at the end of a source line
9324 if an appropriate command-line option is specified.
9326 This affects cases where
9327 a character constant is continued onto the next line in a fixed-form
9328 source file, as in the following example:
9330 @smallexample
9331 10    PRINT *,'HOW MANY
9332      1 SPACES?'
9333 @end smallexample
9335 @noindent
9336 @command{g77}, and many other compilers, virtually extend
9337 the continued line through column 72 with spaces that become part
9338 of the character constant, but Digital Fortran normally didn't,
9339 leaving only one space between @samp{MANY} and @samp{SPACES?}
9340 in the output of the above statement.
9342 Fairly recently, at least one version of Digital Fortran
9343 was enhanced to provide the other behavior when a
9344 command-line option is specified, apparently due to demand
9345 from readers of the USENET group @file{comp.lang.fortran}
9346 to offer conformance to this widespread practice in the
9347 industry.
9348 @command{g77} should return the favor by offering conformance
9349 to Digital's approach to handling the above example.
9351 @node Fortran Preprocessor
9352 @subsection Fortran Preprocessor
9354 @command{g77} should offer a preprocessor designed specifically
9355 for Fortran to replace @samp{cpp -traditional}.
9356 There are several out there worth evaluating, at least.
9358 Such a preprocessor would recognize Hollerith constants,
9359 properly parse comments and character constants, and so on.
9360 It might also recognize, process, and thus preprocess
9361 files included via the @code{INCLUDE} directive.
9363 @node Bit Operations on Floating-point Data
9364 @subsection Bit Operations on Floating-point Data
9365 @cindex @code{And} intrinsic
9366 @cindex intrinsics, @code{And}
9367 @cindex @code{Or} intrinsic
9368 @cindex intrinsics, @code{Or}
9369 @cindex @code{Shift} intrinsic
9370 @cindex intrinsics, @code{Shift}
9372 @command{g77} does not allow @code{REAL} and other non-integral types for
9373 arguments to intrinsics like @code{And}, @code{Or}, and @code{Shift}.
9375 For example, this program is rejected by @command{g77}, because
9376 the intrinsic @code{Iand} does not accept @code{REAL} arguments:
9378 @smallexample
9379 DATA A/7.54/, B/9.112/
9380 PRINT *, IAND(A, B)
9382 @end smallexample
9384 @node Really Ugly Character Assignments
9385 @subsection Really Ugly Character Assignments
9387 An option such as @option{-fugly-char} should be provided
9388 to allow
9390 @smallexample
9391 REAL*8 A1
9392 DATA A1 / '12345678' /
9393 @end smallexample
9395 and:
9397 @smallexample
9398 REAL*8 A1
9399 A1 = 'ABCDEFGH'
9400 @end smallexample
9402 @node POSIX Standard
9403 @subsection @code{POSIX} Standard
9405 @command{g77} should support the POSIX standard for Fortran.
9407 @node Floating-point Exception Handling
9408 @subsection Floating-point Exception Handling
9409 @cindex floating-point, exceptions
9410 @cindex exceptions, floating-point
9411 @cindex FPE handling
9412 @cindex NaN values
9414 The @command{gcc} backend and, consequently, @command{g77}, currently provides no
9415 general control over whether or not floating-point exceptions are trapped or
9416 ignored.
9417 (Ignoring them typically results in NaN values being
9418 propagated in systems that conform to IEEE 754.)
9419 The behavior is normally inherited from the system-dependent startup
9420 code, though some targets, such as the Alpha, have code generation
9421 options which change the behavior.
9423 Most systems provide some C-callable mechanism to change this; this can
9424 be invoked at startup using @command{gcc}'s @code{constructor} attribute.
9425 For example, just compiling and linking the following C code with your
9426 program will turn on exception trapping for the ``common'' exceptions
9427 on a GNU system using glibc 2.2 or newer:
9429 @smallexample
9430 #define _GNU_SOURCE 1
9431 #include <fenv.h>
9432 static void __attribute__ ((constructor))
9433 trapfpe ()
9435   /* Enable some exceptions.  At startup all exceptions are masked.  */
9436   
9437   feenableexcept (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
9439 @end smallexample
9441 A convenient trick is to compile this something like:
9442 @smallexample
9443 gcc -o libtrapfpe.a trapfpe.c
9444 @end smallexample
9445 and then use it by adding @option{-trapfpe} to the @command{g77} command line
9446 when linking.
9448 @node Nonportable Conversions
9449 @subsection Nonportable Conversions
9450 @cindex nonportable conversions
9451 @cindex conversions, nonportable
9453 @command{g77} doesn't accept some particularly nonportable,
9454 silent data-type conversions such as @code{LOGICAL}
9455 to @code{REAL} (as in @samp{A=.FALSE.}, where @samp{A}
9456 is type @code{REAL}), that other compilers might
9457 quietly accept.
9459 Some of these conversions are accepted by @command{g77}
9460 when the @option{-fugly-logint} option is specified.
9461 Perhaps it should accept more or all of them.
9463 @node Large Automatic Arrays
9464 @subsection Large Automatic Arrays
9465 @cindex automatic arrays
9466 @cindex arrays, automatic
9468 Currently, automatic arrays always are allocated on the stack.
9469 For situations where the stack cannot be made large enough,
9470 @command{g77} should offer a compiler option that specifies
9471 allocation of automatic arrays in heap storage.
9473 @node Support for Threads
9474 @subsection Support for Threads
9475 @cindex threads
9476 @cindex parallel processing
9478 Neither the code produced by @command{g77} nor the @code{libg2c} library
9479 are thread-safe, nor does @command{g77} have support for parallel processing
9480 (other than the instruction-level parallelism available on some
9481 processors).
9482 A package such as PVM might help here.
9484 @node Enabling Debug Lines
9485 @subsection Enabling Debug Lines
9486 @cindex debug line
9487 @cindex comment line, debug
9489 An option such as @option{-fdebug-lines} should be provided
9490 to turn fixed-form lines beginning with @samp{D}
9491 to be treated as if they began with a space,
9492 instead of as if they began with a @samp{C}
9493 (as comment lines).
9495 @node Better Warnings
9496 @subsection Better Warnings
9498 Because of how @command{g77} generates code via the back end,
9499 it doesn't always provide warnings the user wants.
9500 Consider:
9502 @smallexample
9503 PROGRAM X
9504 PRINT *, A
9506 @end smallexample
9508 Currently, the above is not flagged as a case of
9509 using an uninitialized variable,
9510 because @command{g77} generates a run-time library call that looks,
9511 to the GBE, like it might actually @emph{modify} @samp{A} at run time.
9512 (And, in fact, depending on the previous run-time library call,
9513 it would!)
9515 Fixing this requires one of the following:
9517 @itemize @bullet
9518 @item
9519 Switch to new library, @code{libg77}, that provides
9520 a more ``clean'' interface,
9521 vis-a-vis input, output, and modified arguments,
9522 so the GBE can tell what's going on.
9524 This would provide a pretty big performance improvement,
9525 at least theoretically, and, ultimately, in practice,
9526 for some types of code.
9528 @item
9529 Have @command{g77} pass a pointer to a temporary
9530 containing a copy of @samp{A},
9531 instead of to @samp{A} itself.
9532 The GBE would then complain about the copy operation
9533 involving a potentially uninitialized variable.
9535 This might also provide a performance boost for some code,
9536 because @samp{A} might then end up living in a register,
9537 which could help with inner loops.
9539 @item
9540 Have @command{g77} use a GBE construct similar to @code{ADDR_EXPR}
9541 but with extra information on the fact that the
9542 item pointed to won't be modified
9543 (a la @code{const} in C).
9545 Probably the best solution for now, but not quite trivial
9546 to implement in the general case.
9547 @end itemize
9549 @node Gracefully Handle Sensible Bad Code
9550 @subsection Gracefully Handle Sensible Bad Code
9552 @command{g77} generally should continue processing for
9553 warnings and recoverable (user) errors whenever possible---that
9554 is, it shouldn't gratuitously make bad or useless code.
9556 For example:
9558 @smallexample
9559 INTRINSIC ZABS
9560 CALL FOO(ZABS)
9562 @end smallexample
9564 @noindent
9565 When compiling the above with @option{-ff2c-intrinsics-disable},
9566 @command{g77} should indeed complain about passing @code{ZABS},
9567 but it still should compile, instead of rejecting
9568 the entire @code{CALL} statement.
9569 (Some of this is related to improving
9570 the compiler internals to improve how statements are analyzed.)
9572 @node Non-standard Conversions
9573 @subsection Non-standard Conversions
9575 @option{-Wconversion} and related should flag places where non-standard
9576 conversions are found.
9577 Perhaps much of this would be part of @option{-Wugly*}.
9579 @node Non-standard Intrinsics
9580 @subsection Non-standard Intrinsics
9582 @command{g77} needs a new option, like @option{-Wintrinsics}, to warn about use of
9583 non-standard intrinsics without explicit @code{INTRINSIC} statements for them.
9584 This would help find code that might fail silently when ported to another
9585 compiler.
9587 @node Modifying DO Variable
9588 @subsection Modifying @code{DO} Variable
9590 @command{g77} should warn about modifying @code{DO} variables
9591 via @code{EQUIVALENCE}.
9592 (The internal information gathered to produce this warning
9593 might also be useful in setting the
9594 internal ``doiter'' flag for a variable or even array
9595 reference within a loop, since that might produce faster code someday.)
9597 For example, this code is invalid, so @command{g77} should warn about
9598 the invalid assignment to @samp{NOTHER}:
9600 @smallexample
9601 EQUIVALENCE (I, NOTHER)
9602 DO I = 1, 100
9603    IF (I.EQ. 10) NOTHER = 20
9604 END DO
9605 @end smallexample
9607 @node Better Pedantic Compilation
9608 @subsection Better Pedantic Compilation
9610 @command{g77} needs to support @option{-fpedantic} more thoroughly,
9611 and use it only to generate
9612 warnings instead of rejecting constructs outright.
9613 Have it warn:
9614 if a variable that dimensions an array is not a dummy or placed
9615 explicitly in @code{COMMON} (F77 does not allow it to be
9616 placed in @code{COMMON} via @code{EQUIVALENCE}); if specification statements
9617 follow statement-function-definition statements; about all sorts of
9618 syntactic extensions.
9620 @node Warn About Implicit Conversions
9621 @subsection Warn About Implicit Conversions
9623 @command{g77} needs a @option{-Wpromotions} option to warn if source code appears
9624 to expect automatic, silent, and
9625 somewhat dangerous compiler-assisted conversion of @code{REAL(KIND=1)}
9626 constants to @code{REAL(KIND=2)} based on context.
9628 For example, it would warn about cases like this:
9630 @smallexample
9631 DOUBLE PRECISION FOO
9632 PARAMETER (TZPHI = 9.435784839284958)
9633 FOO = TZPHI * 3D0
9634 @end smallexample
9636 @node Invalid Use of Hollerith Constant
9637 @subsection Invalid Use of Hollerith Constant
9639 @command{g77} should disallow statements like @samp{RETURN 2HAB},
9640 which are invalid in both source forms
9641 (unlike @samp{RETURN (2HAB)},
9642 which probably still makes no sense but at least can
9643 be reliably parsed).
9644 Fixed-form processing rejects it, but not free-form, except
9645 in a way that is a bit difficult to understand.
9647 @node Dummy Array Without Dimensioning Dummy
9648 @subsection Dummy Array Without Dimensioning Dummy
9650 @command{g77} should complain when a list of dummy arguments containing an
9651 adjustable dummy array does
9652 not also contain every variable listed in the dimension list of the
9653 adjustable array.
9655 Currently, @command{g77} does complain about a variable that
9656 dimensions an array but doesn't appear in any dummy list or @code{COMMON}
9657 area, but this needs to be extended to catch cases where it doesn't appear in
9658 every dummy list that also lists any arrays it dimensions.
9660 For example, @command{g77} should warn about the entry point @samp{ALT}
9661 below, since it includes @samp{ARRAY} but not @samp{ISIZE} in its
9662 list of arguments:
9664 @smallexample
9665 SUBROUTINE PRIMARY(ARRAY, ISIZE)
9666 REAL ARRAY(ISIZE)
9667 ENTRY ALT(ARRAY)
9668 @end smallexample
9670 @node Invalid FORMAT Specifiers
9671 @subsection Invalid FORMAT Specifiers
9673 @command{g77} should check @code{FORMAT} specifiers for validity
9674 as it does @code{FORMAT} statements.
9676 For example, a diagnostic would be produced for:
9678 @smallexample
9679 PRINT 'HI THERE!'  !User meant PRINT *, 'HI THERE!'
9680 @end smallexample
9682 @node Ambiguous Dialects
9683 @subsection Ambiguous Dialects
9685 @command{g77} needs a set of options such as @option{-Wugly*}, @option{-Wautomatic},
9686 @option{-Wvxt}, @option{-Wf90}, and so on.
9687 These would warn about places in the user's source where ambiguities
9688 are found, helpful in resolving ambiguities in the program's
9689 dialect or dialects.
9691 @node Unused Labels
9692 @subsection Unused Labels
9694 @command{g77} should warn about unused labels when @option{-Wunused} is in effect.
9696 @node Informational Messages
9697 @subsection Informational Messages
9699 @command{g77} needs an option to suppress information messages (notes).
9700 @option{-w} does this but also suppresses warnings.
9701 The default should be to suppress info messages.
9703 Perhaps info messages should simply be eliminated.
9705 @node Uninitialized Variables at Run Time
9706 @subsection Uninitialized Variables at Run Time
9708 @command{g77} needs an option to initialize everything (not otherwise
9709 explicitly initialized) to ``weird''
9710 (machine-dependent) values, e.g. NaNs, bad (non-@code{NULL}) pointers, and
9711 largest-magnitude integers, would help track down references to
9712 some kinds of uninitialized variables at run time.
9714 Note that use of the options @samp{-O -Wuninitialized} can catch
9715 many such bugs at compile time.
9717 @node Portable Unformatted Files
9718 @subsection Portable Unformatted Files
9720 @cindex unformatted files
9721 @cindex file formats
9722 @cindex binary data
9723 @cindex byte ordering
9724 @command{g77} has no facility for exchanging unformatted files with systems
9725 using different number formats---even differing only in endianness (byte
9726 order)---or written by other compilers.  Some compilers provide
9727 facilities at least for doing byte-swapping during unformatted I/O.
9729 It is unrealistic to expect to cope with exchanging unformatted files
9730 with arbitrary other compiler runtimes, but the @command{g77} runtime
9731 should at least be able to read files written by @command{g77} on systems
9732 with different number formats, particularly if they differ only in byte
9733 order.
9735 In case you do need to write a program to translate to or from
9736 @command{g77} (@code{libf2c}) unformatted files, they are written as
9737 follows:
9738 @table @asis
9739 @item Sequential
9740 Unformatted sequential records consist of
9741 @enumerate
9742 @item
9743 A number giving the length of the record contents;
9744 @item
9745 the length of record contents again (for backspace).
9746 @end enumerate
9748 The record length is of C type
9749 @code{long}; this means that it is 8 bytes on 64-bit systems such as
9750 Alpha GNU/Linux and 4 bytes on other systems, such as x86 GNU/Linux.
9751 Consequently such files cannot be exchanged between 64-bit and 32-bit
9752 systems, even with the same basic number format.
9753 @item Direct access
9754 Unformatted direct access files form a byte stream of length
9755 @var{records}*@var{recl} bytes, where @var{records} is the maximum
9756 record number (@code{REC=@var{records}}) written and @var{recl} is the
9757 record length in bytes specified in the @code{OPEN} statement
9758 (@code{RECL=@var{recl}}).  Data appear in the records as determined by
9759 the relevant @code{WRITE} statement.  Dummy records with arbitrary
9760 contents appear in the file in place of records which haven't been
9761 written.
9762 @end table
9764 Thus for exchanging a sequential or direct access unformatted file
9765 between big- and little-endian 32-bit systems using IEEE 754 floating
9766 point it would be sufficient to reverse the bytes in consecutive words
9767 in the file if, and @emph{only} if, only @code{REAL*4}, @code{COMPLEX},
9768 @code{INTEGER*4} and/or @code{LOGICAL*4} data have been written to it by
9769 @command{g77}.
9771 If necessary, it is possible to do byte-oriented i/o with @command{g77}'s
9772 @code{FGETC} and @code{FPUTC} intrinsics.  Byte-swapping can be done in
9773 Fortran by equivalencing larger sized variables to an @code{INTEGER*1}
9774 array or a set of scalars.
9776 @cindex HDF
9777 @cindex PDB
9778 If you need to exchange binary data between arbitrary system and
9779 compiler variations, we recommend using a portable binary format with
9780 Fortran bindings, such as NCSA's HDF (@uref{http://hdf.ncsa.uiuc.edu/})
9781 or PACT's PDB@footnote{No, not @emph{that} one.}
9782 (@uref{http://www.llnl.gov/def_sci/pact/pact_homepage.html}).  (Unlike,
9783 say, CDF or XDR, HDF-like systems write in the native number formats and
9784 only incur overhead when they are read on a system with a different
9785 format.)  A future @command{g77} runtime library should use such
9786 techniques.
9788 @node Better List-directed I/O
9789 @subsection Better List-directed I/O
9791 Values output using list-directed I/O
9792 (@samp{PRINT *, R, D})
9793 should be written with a field width, precision, and so on
9794 appropriate for the type (precision) of each value.
9796 (Currently, no distinction is made between single-precision
9797 and double-precision values
9798 by @code{libf2c}.)
9800 It is likely this item will require the @code{libg77} project
9801 to be undertaken.
9803 In the meantime, use of formatted I/O is recommended.
9804 While it might be of little consolation,
9805 @command{g77} does support @samp{FORMAT(F<WIDTH>.4)}, for example,
9806 as long as @samp{WIDTH} is defined as a named constant
9807 (via @code{PARAMETER}).
9808 That at least allows some compile-time specification
9809 of the precision of a data type,
9810 perhaps controlled by preprocessing directives.
9812 @node Default to Console I/O
9813 @subsection Default to Console I/O
9815 The default I/O units,
9816 specified by @samp{READ @var{fmt}},
9817 @samp{READ (UNIT=*)},
9818 @samp{WRITE (UNIT=*)}, and
9819 @samp{PRINT @var{fmt}},
9820 should not be units 5 (input) and 6 (output),
9821 but, rather, unit numbers not normally available
9822 for use in statements such as @code{OPEN} and @code{CLOSE}.
9824 Changing this would allow a program to connect units 5 and 6
9825 to files via @code{OPEN},
9826 but still use @samp{READ (UNIT=*)} and @samp{PRINT}
9827 to do I/O to the ``console''.
9829 This change probably requires the @code{libg77} project.
9831 @node Labels Visible to Debugger
9832 @subsection Labels Visible to Debugger
9834 @command{g77} should output debugging information for statements labels,
9835 for use by debuggers that know how to support them.
9836 Same with weirder things like construct names.
9837 It is not yet known if any debug formats or debuggers support these.
9839 @node Disappointments
9840 @section Disappointments and Misunderstandings
9842 These problems are perhaps regrettable, but we don't know any practical
9843 way around them for now.
9845 @menu
9846 * Mangling of Names::                       @samp{SUBROUTINE FOO} is given
9847                                               external name @samp{foo_}.
9848 * Multiple Definitions of External Names::  No doing both @samp{COMMON /FOO/}
9849                                               and @samp{SUBROUTINE FOO}.
9850 * Limitation on Implicit Declarations::     No @samp{IMPLICIT CHARACTER*(*)}.
9851 @end menu
9853 @node Mangling of Names
9854 @subsection Mangling of Names in Source Code
9855 @cindex naming issues
9856 @cindex external names
9857 @cindex common blocks
9858 @cindex name space
9859 @cindex underscore
9861 The current external-interface design, which includes naming of
9862 external procedures, COMMON blocks, and the library interface,
9863 has various usability problems, including things like adding
9864 underscores where not really necessary (and preventing easier
9865 inter-language operability) and yet not providing complete
9866 namespace freedom for user C code linked with Fortran apps (due
9867 to the naming of functions in the library, among other things).
9869 Project GNU should at least get all this ``right'' for systems
9870 it fully controls, such as the Hurd, and provide defaults and
9871 options for compatibility with existing systems and interoperability
9872 with popular existing compilers.
9874 @node Multiple Definitions of External Names
9875 @subsection Multiple Definitions of External Names
9876 @cindex block data
9877 @cindex BLOCK DATA statement
9878 @cindex statements, BLOCK DATA
9879 @cindex @code{COMMON} statement
9880 @cindex statements, @code{COMMON}
9881 @cindex naming conflicts
9883 @command{g77} doesn't allow a common block and an external procedure or
9884 @code{BLOCK DATA} to have the same name.
9885 Some systems allow this, but @command{g77} does not,
9886 to be compatible with @command{f2c}.
9888 @command{g77} could special-case the way it handles
9889 @code{BLOCK DATA}, since it is not compatible with @command{f2c} in this
9890 particular area (necessarily, since @command{g77} offers an
9891 important feature here), but
9892 it is likely that such special-casing would be very annoying to people
9893 with programs that use @samp{EXTERNAL FOO}, with no other mention of
9894 @samp{FOO} in the same program unit, to refer to external procedures, since
9895 the result would be that @command{g77} would treat these references as requests to
9896 force-load BLOCK DATA program units.
9898 In that case, if @command{g77} modified
9899 names of @code{BLOCK DATA} so they could have the same names as
9900 @code{COMMON}, users
9901 would find that their programs wouldn't link because the @samp{FOO} procedure
9902 didn't have its name translated the same way.
9904 (Strictly speaking,
9905 @command{g77} could emit a null-but-externally-satisfying definition of
9906 @samp{FOO} with its name transformed as if it had been a
9907 @code{BLOCK DATA}, but that probably invites more trouble than it's
9908 worth.)
9910 @node Limitation on Implicit Declarations
9911 @subsection Limitation on Implicit Declarations
9912 @cindex IMPLICIT CHARACTER*(*) statement
9913 @cindex statements, IMPLICIT CHARACTER*(*)
9915 @command{g77} disallows @code{IMPLICIT CHARACTER*(*)}.
9916 This is not standard-conforming.
9918 @node Non-bugs
9919 @section Certain Changes We Don't Want to Make
9921 This section lists changes that people frequently request, but which
9922 we do not make because we think GNU Fortran is better without them.
9924 @menu
9925 * Backslash in Constants::           Why @samp{'\\'} is a constant that
9926                                        is one, not two, characters long.
9927 * Initializing Before Specifying::   Why @samp{DATA VAR/1/} can't precede
9928                                        @samp{COMMON VAR}.
9929 * Context-Sensitive Intrinsicness::  Why @samp{CALL SQRT} won't work.
9930 * Context-Sensitive Constants::      Why @samp{9.435784839284958} is a
9931                                        single-precision constant,
9932                                        and might be interpreted as
9933                                        @samp{9.435785} or similar.
9934 * Equivalence Versus Equality::      Why @samp{.TRUE. .EQ. .TRUE.} won't work.
9935 * Order of Side Effects::            Why @samp{J = IFUNC() - IFUNC()} might
9936                                        not behave as expected.
9937 @end menu
9939 @node Backslash in Constants
9940 @subsection Backslash in Constants
9941 @cindex backslash
9942 @cindex @command{f77} support
9943 @cindex support, @command{f77}
9945 In the opinion of many experienced Fortran users,
9946 @option{-fno-backslash} should be the default, not @option{-fbackslash},
9947 as currently set by @command{g77}.
9949 First of all, you can always specify
9950 @option{-fno-backslash} to turn off this processing.
9952 Despite not being within the spirit (though apparently within the
9953 letter) of the ANSI FORTRAN 77 standard, @command{g77} defaults to
9954 @option{-fbackslash} because that is what most UNIX @command{f77} commands
9955 default to, and apparently lots of code depends on this feature.
9957 This is a particularly troubling issue.
9958 The use of a C construct in the midst of Fortran code
9959 is bad enough, worse when it makes existing Fortran
9960 programs stop working (as happens when programs written
9961 for non-UNIX systems are ported to UNIX systems with
9962 compilers that provide the @option{-fbackslash} feature
9963 as the default---sometimes with no option to turn it off).
9965 The author of GNU Fortran wished, for reasons of linguistic
9966 purity, to make @option{-fno-backslash} the default for GNU
9967 Fortran and thus require users of UNIX @command{f77} and @command{f2c}
9968 to specify @option{-fbackslash} to get the UNIX behavior.
9970 However, the realization that @command{g77} is intended as
9971 a replacement for @emph{UNIX} @command{f77}, caused the author
9972 to choose to make @command{g77} as compatible with
9973 @command{f77} as feasible, which meant making @option{-fbackslash}
9974 the default.
9976 The primary focus on compatibility is at the source-code
9977 level, and the question became ``What will users expect
9978 a replacement for @command{f77} to do, by default?''
9979 Although at least one UNIX @command{f77} does not provide
9980 @option{-fbackslash} as a default, it appears that
9981 the majority of them do, which suggests that
9982 the majority of code that is compiled by UNIX @command{f77}
9983 compilers expects @option{-fbackslash} to be the default.
9985 It is probably the case that more code exists
9986 that would @emph{not} work with @option{-fbackslash}
9987 in force than code that requires it be in force.
9989 However, most of @emph{that} code is not being compiled
9990 with @command{f77},
9991 and when it is, new build procedures (shell scripts,
9992 makefiles, and so on) must be set up anyway so that
9993 they work under UNIX.
9994 That makes a much more natural and safe opportunity for
9995 non-UNIX users to adapt their build procedures for
9996 @command{g77}'s default of @option{-fbackslash} than would
9997 exist for the majority of UNIX @command{f77} users who
9998 would have to modify existing, working build procedures
9999 to explicitly specify @option{-fbackslash} if that was
10000 not the default.
10002 One suggestion has been to configure the default for
10003 @option{-fbackslash} (and perhaps other options as well)
10004 based on the configuration of @command{g77}.
10006 This is technically quite straightforward, but will be avoided
10007 even in cases where not configuring defaults to be
10008 dependent on a particular configuration greatly inconveniences
10009 some users of legacy code.
10011 Many users appreciate the GNU compilers because they provide an
10012 environment that is uniform across machines.
10013 These users would be
10014 inconvenienced if the compiler treated things like the
10015 format of the source code differently on certain machines.
10017 Occasionally users write programs intended only for a particular machine
10018 type.
10019 On these occasions, the users would benefit if the GNU Fortran compiler
10020 were to support by default the same dialect as the other compilers on
10021 that machine.
10022 But such applications are rare.
10023 And users writing a
10024 program to run on more than one type of machine cannot possibly benefit
10025 from this kind of compatibility.
10026 (This is consistent with the design goals for @command{gcc}.
10027 To change them for @command{g77}, you must first change them
10028 for @command{gcc}.
10029 Do not ask the maintainers of @command{g77} to do this for you,
10030 or to disassociate @command{g77} from the widely understood, if
10031 not widely agreed-upon, goals for GNU compilers in general.)
10033 This is why GNU Fortran does and will treat backslashes in the same
10034 fashion on all types of machines (by default).
10035 @xref{Direction of Language Development}, for more information on
10036 this overall philosophy guiding the development of the GNU Fortran
10037 language.
10039 Of course, users strongly concerned about portability should indicate
10040 explicitly in their build procedures which options are expected
10041 by their source code, or write source code that has as few such
10042 expectations as possible.
10044 For example, avoid writing code that depends on backslash (@samp{\})
10045 being interpreted either way in particular, such as by
10046 starting a program unit with:
10048 @smallexample
10049 CHARACTER BACKSL
10050 PARAMETER (BACKSL = '\\')
10051 @end smallexample
10053 @noindent
10054 Then, use concatenation of @samp{BACKSL} anyplace a backslash
10055 is desired.
10056 In this way, users can write programs which have the same meaning
10057 in many Fortran dialects.
10059 (However, this technique does not work for Hollerith constants---which
10060 is just as well, since the only generally portable uses for Hollerith
10061 constants are in places where character constants can and should
10062 be used instead, for readability.)
10064 @node Initializing Before Specifying
10065 @subsection Initializing Before Specifying
10066 @cindex initialization, statement placement
10067 @cindex placing initialization statements
10069 @command{g77} does not allow @samp{DATA VAR/1/} to appear in the
10070 source code before @samp{COMMON VAR},
10071 @samp{DIMENSION VAR(10)}, @samp{INTEGER VAR}, and so on.
10072 In general, @command{g77} requires initialization of a variable
10073 or array to be specified @emph{after} all other specifications
10074 of attributes (type, size, placement, and so on) of that variable
10075 or array are specified (though @emph{confirmation} of data type is
10076 permitted).
10078 It is @emph{possible} @command{g77} will someday allow all of this,
10079 even though it is not allowed by the FORTRAN 77 standard.
10081 Then again, maybe it is better to have
10082 @command{g77} always require placement of @code{DATA}
10083 so that it can possibly immediately write constants
10084 to the output file, thus saving time and space.
10086 That is, @samp{DATA A/1000000*1/} should perhaps always
10087 be immediately writable to canonical assembler, unless it's already known
10088 to be in a @code{COMMON} area following as-yet-uninitialized stuff,
10089 and to do this it cannot be followed by @samp{COMMON A}.
10091 @node Context-Sensitive Intrinsicness
10092 @subsection Context-Sensitive Intrinsicness
10093 @cindex intrinsics, context-sensitive
10094 @cindex context-sensitive intrinsics
10096 @command{g77} treats procedure references to @emph{possible} intrinsic
10097 names as always enabling their intrinsic nature, regardless of
10098 whether the @emph{form} of the reference is valid for that
10099 intrinsic.
10101 For example, @samp{CALL SQRT} is interpreted by @command{g77} as
10102 an invalid reference to the @code{SQRT} intrinsic function,
10103 because the reference is a subroutine invocation.
10105 First, @command{g77} recognizes the statement @samp{CALL SQRT}
10106 as a reference to a @emph{procedure} named @samp{SQRT}, not
10107 to a @emph{variable} with that name (as it would for a statement
10108 such as @samp{V = SQRT}).
10110 Next, @command{g77} establishes that, in the program unit being compiled,
10111 @code{SQRT} is an intrinsic---not a subroutine that
10112 happens to have the same name as an intrinsic (as would be
10113 the case if, for example, @samp{EXTERNAL SQRT} was present).
10115 Finally, @command{g77} recognizes that the @emph{form} of the
10116 reference is invalid for that particular intrinsic.
10117 That is, it recognizes that it is invalid for an intrinsic
10118 @emph{function}, such as @code{SQRT}, to be invoked as
10119 a @emph{subroutine}.
10121 At that point, @command{g77} issues a diagnostic.
10123 Some users claim that it is ``obvious'' that @samp{CALL SQRT}
10124 references an external subroutine of their own, not an
10125 intrinsic function.
10127 However, @command{g77} knows about intrinsic
10128 subroutines, not just functions, and is able to support both having
10129 the same names, for example.
10131 As a result of this, @command{g77} rejects calls
10132 to intrinsics that are not subroutines, and function invocations
10133 of intrinsics that are not functions, just as it (and most compilers)
10134 rejects invocations of intrinsics with the wrong number (or types)
10135 of arguments.
10137 So, use the @samp{EXTERNAL SQRT} statement in a program unit that calls
10138 a user-written subroutine named @samp{SQRT}.
10140 @node Context-Sensitive Constants
10141 @subsection Context-Sensitive Constants
10142 @cindex constants, context-sensitive
10143 @cindex context-sensitive constants
10145 @command{g77} does not use context to determine the types of
10146 constants or named constants (@code{PARAMETER}), except
10147 for (non-standard) typeless constants such as @samp{'123'O}.
10149 For example, consider the following statement:
10151 @smallexample
10152 PRINT *, 9.435784839284958 * 2D0
10153 @end smallexample
10155 @noindent
10156 @command{g77} will interpret the (truncated) constant
10157 @samp{9.435784839284958} as a @code{REAL(KIND=1)}, not @code{REAL(KIND=2)},
10158 constant, because the suffix @code{D0} is not specified.
10160 As a result, the output of the above statement when
10161 compiled by @command{g77} will appear to have ``less precision''
10162 than when compiled by other compilers.
10164 In these and other cases, some compilers detect the
10165 fact that a single-precision constant is used in
10166 a double-precision context and therefore interpret the
10167 single-precision constant as if it was @emph{explicitly}
10168 specified as a double-precision constant.
10169 (This has the effect of appending @emph{decimal}, not
10170 @emph{binary}, zeros to the fractional part of the
10171 number---producing different computational results.)
10173 The reason this misfeature is dangerous is that a slight,
10174 apparently innocuous change to the source code can change
10175 the computational results.
10176 Consider:
10178 @smallexample
10179 REAL ALMOST, CLOSE
10180 DOUBLE PRECISION FIVE
10181 PARAMETER (ALMOST = 5.000000000001)
10182 FIVE = 5
10183 CLOSE = 5.000000000001
10184 PRINT *, 5.000000000001 - FIVE
10185 PRINT *, ALMOST - FIVE
10186 PRINT *, CLOSE - FIVE
10188 @end smallexample
10190 @noindent
10191 Running the above program should
10192 result in the same value being
10193 printed three times.
10194 With @command{g77} as the compiler,
10195 it does.
10197 However, compiled by many other compilers,
10198 running the above program would print
10199 two or three distinct values, because
10200 in two or three of the statements, the
10201 constant @samp{5.000000000001}, which
10202 on most systems is exactly equal to @samp{5.}
10203 when interpreted as a single-precision constant,
10204 is instead interpreted as a double-precision
10205 constant, preserving the represented
10206 precision.
10207 However, this ``clever'' promotion of
10208 type does not extend to variables or,
10209 in some compilers, to named constants.
10211 Since programmers often are encouraged to replace manifest
10212 constants or permanently-assigned variables with named
10213 constants (@code{PARAMETER} in Fortran), and might need
10214 to replace some constants with variables having the same
10215 values for pertinent portions of code,
10216 it is important that compilers treat code so modified in the
10217 same way so that the results of such programs are the same.
10218 @command{g77} helps in this regard by treating constants just
10219 the same as variables in terms of determining their types
10220 in a context-independent way.
10222 Still, there is a lot of existing Fortran code that has
10223 been written to depend on the way other compilers freely
10224 interpret constants' types based on context, so anything
10225 @command{g77} can do to help flag cases of this in such code
10226 could be very helpful.
10228 @node Equivalence Versus Equality
10229 @subsection Equivalence Versus Equality
10230 @cindex .EQV., with integer operands
10231 @cindex comparing logical expressions
10232 @cindex logical expressions, comparing
10234 Use of @code{.EQ.} and @code{.NE.} on @code{LOGICAL} operands
10235 is not supported, except via @option{-fugly-logint}, which is not
10236 recommended except for legacy code (where the behavior expected
10237 by the @emph{code} is assumed).
10239 Legacy code should be changed, as resources permit, to use @code{.EQV.}
10240 and @code{.NEQV.} instead, as these are permitted by the various
10241 Fortran standards.
10243 New code should never be written expecting @code{.EQ.} or @code{.NE.}
10244 to work if either of its operands is @code{LOGICAL}.
10246 The problem with supporting this ``feature'' is that there is
10247 unlikely to be consensus on how it works, as illustrated by the
10248 following sample program:
10250 @smallexample
10251 LOGICAL L,M,N
10252 DATA L,M,N /3*.FALSE./
10253 IF (L.AND.M.EQ.N) PRINT *,'L.AND.M.EQ.N'
10255 @end smallexample
10257 The issue raised by the above sample program is: what is the
10258 precedence of @code{.EQ.} (and @code{.NE.}) when applied to
10259 @code{LOGICAL} operands?
10261 Some programmers will argue that it is the same as the precedence
10262 for @code{.EQ.} when applied to numeric (such as @code{INTEGER})
10263 operands.
10264 By this interpretation, the subexpression @samp{M.EQ.N} must be
10265 evaluated first in the above program, resulting in a program that,
10266 when run, does not execute the @code{PRINT} statement.
10268 Other programmers will argue that the precedence is the same as
10269 the precedence for @code{.EQV.}, which is restricted by the standards
10270 to @code{LOGICAL} operands.
10271 By this interpretation, the subexpression @samp{L.AND.M} must be
10272 evaluated first, resulting in a program that @emph{does} execute
10273 the @code{PRINT} statement.
10275 Assigning arbitrary semantic interpretations to syntactic expressions
10276 that might legitimately have more than one ``obvious'' interpretation
10277 is generally unwise.
10279 The creators of the various Fortran standards have done a good job
10280 in this case, requiring a distinct set of operators (which have their
10281 own distinct precedence) to compare @code{LOGICAL} operands.
10282 This requirement results in expression syntax with more certain
10283 precedence (without requiring substantial context), making it easier
10284 for programmers to read existing code.
10285 @command{g77} will avoid muddying up elements of the Fortran language
10286 that were well-designed in the first place.
10288 (Ask C programmers about the precedence of expressions such as
10289 @samp{(a) & (b)} and @samp{(a) - (b)}---they cannot even tell
10290 you, without knowing more context, whether the @samp{&} and @samp{-}
10291 operators are infix (binary) or unary!)
10293 Most dangerous of all is the fact that,
10294 even assuming consensus on its meaning,
10295 an expression like @samp{L.AND.M.EQ.N},
10296 if it is the result of a typographical error,
10297 doesn't @emph{look} like it has such a typo.
10298 Even experienced Fortran programmers would not likely notice that
10299 @samp{L.AND.M.EQV.N} was, in fact, intended.
10301 So, this is a prime example of a circumstance in which
10302 a quality compiler diagnoses the code,
10303 instead of leaving it up to someone debugging it
10304 to know to turn on special compiler options
10305 that might diagnose it.
10307 @node Order of Side Effects
10308 @subsection Order of Side Effects
10309 @cindex side effects, order of evaluation
10310 @cindex order of evaluation, side effects
10312 @command{g77} does not necessarily produce code that, when run, performs
10313 side effects (such as those performed by function invocations)
10314 in the same order as in some other compiler---or even in the same
10315 order as another version, port, or invocation (using different
10316 command-line options) of @command{g77}.
10318 It is never safe to depend on the order of evaluation of side effects.
10319 For example, an expression like this may very well behave differently
10320 from one compiler to another:
10322 @smallexample
10323 J = IFUNC() - IFUNC()
10324 @end smallexample
10326 @noindent
10327 There is no guarantee that @samp{IFUNC} will be evaluated in any particular
10328 order.
10329 Either invocation might happen first.
10330 If @samp{IFUNC} returns 5 the first time it is invoked, and
10331 returns 12 the second time, @samp{J} might end up with the
10332 value @samp{7}, or it might end up with @samp{-7}.
10334 Generally, in Fortran, procedures with side-effects intended to
10335 be visible to the caller are best designed as @emph{subroutines},
10336 not functions.
10337 Examples of such side-effects include:
10339 @itemize @bullet
10340 @item
10341 The generation of random numbers
10342 that are intended to influence return values.
10344 @item
10345 Performing I/O
10346 (other than internal I/O to local variables).
10348 @item
10349 Updating information in common blocks.
10350 @end itemize
10352 An example of a side-effect that is not intended to be visible
10353 to the caller is a function that maintains a cache of recently
10354 calculated results, intended solely to speed repeated invocations
10355 of the function with identical arguments.
10356 Such a function can be safely used in expressions, because
10357 if the compiler optimizes away one or more calls to the
10358 function, operation of the program is unaffected (aside
10359 from being speeded up).
10361 @node Warnings and Errors
10362 @section Warning Messages and Error Messages
10364 @cindex error messages
10365 @cindex warnings vs errors
10366 @cindex messages, warning and error
10367 The GNU compiler can produce two kinds of diagnostics: errors and
10368 warnings.
10369 Each kind has a different purpose:
10371 @itemize @w{}
10372 @item
10373 @emph{Errors} report problems that make it impossible to compile your
10374 program.
10375 GNU Fortran reports errors with the source file name, line
10376 number, and column within the line where the problem is apparent.
10378 @item
10379 @emph{Warnings} report other unusual conditions in your code that
10380 @emph{might} indicate a problem, although compilation can (and does)
10381 proceed.
10382 Warning messages also report the source file name, line number,
10383 and column information,
10384 but include the text @samp{warning:} to distinguish them
10385 from error messages.
10386 @end itemize
10388 Warnings might indicate danger points where you should check to make sure
10389 that your program really does what you intend; or the use of obsolete
10390 features; or the use of nonstandard features of GNU Fortran.
10391 Many warnings are issued only if you ask for them, with one of the
10392 @option{-W} options (for instance, @option{-Wall} requests a variety of
10393 useful warnings).
10395 @emph{Note:} Currently, the text of the line and a pointer to the column
10396 is printed in most @command{g77} diagnostics.
10398 @xref{Warning Options,,Options to Request or Suppress Warnings}, for
10399 more detail on these and related command-line options.
10401 @node Open Questions
10402 @chapter Open Questions
10404 Please consider offering useful answers to these questions!
10406 @itemize @bullet
10407 @item
10408 @code{LOC()} and other intrinsics are probably somewhat misclassified.
10409 Is the a need for more precise classification of intrinsics, and if so,
10410 what are the appropriate groupings?
10411 Is there a need to individually
10412 enable/disable/delete/hide intrinsics from the command line?
10413 @end itemize
10415 @node Bugs
10416 @chapter Reporting Bugs
10417 @cindex bugs
10418 @cindex reporting bugs
10420 Your bug reports play an essential role in making GNU Fortran reliable.
10422 When you encounter a problem, the first thing to do is to see if it is
10423 already known.
10424 @xref{Trouble}.
10425 If it isn't known, then you should report the problem.
10427 Reporting a bug might help you by bringing a solution to your problem, or
10428 it might not.
10429 (If it does not, look in the service directory; see
10430 @ref{Service}.)
10431 In any case, the principal function of a bug report is
10432 to help the entire community by making the next version of GNU Fortran work
10433 better.
10434 Bug reports are your contribution to the maintenance of GNU Fortran.
10436 Since the maintainers are very overloaded, we cannot respond to every
10437 bug report.
10438 However, if the bug has not been fixed, we are likely to
10439 send you a patch and ask you to tell us whether it works.
10441 In order for a bug report to serve its purpose, you must include the
10442 information that makes for fixing the bug.
10444 @menu
10445 * Criteria: Bug Criteria.    Have you really found a bug?
10446 * Where: Bug Lists.          Where to send your bug report.
10447 * Reporting: Bug Reporting.  How to report a bug effectively.
10448 @end menu
10450 @xref{Trouble,,Known Causes of Trouble with GNU Fortran},
10451 for information on problems we already know about.
10453 @xref{Service,,How To Get Help with GNU Fortran},
10454 for information on where to ask for help.
10456 @node Bug Criteria
10457 @section Have You Found a Bug?
10458 @cindex bug criteria
10460 If you are not sure whether you have found a bug, here are some guidelines:
10462 @itemize @bullet
10463 @cindex fatal signal
10464 @cindex core dump
10465 @item
10466 If the compiler gets a fatal signal, for any input whatever, that is a
10467 compiler bug.
10468 Reliable compilers never crash---they just remain obsolete.
10470 @cindex invalid assembly code
10471 @cindex assembly code, invalid
10472 @item
10473 If the compiler produces invalid assembly code, for any input whatever,
10474 @c (except an @code{asm} statement),
10475 that is a compiler bug, unless the
10476 compiler reports errors (not just warnings) which would ordinarily
10477 prevent the assembler from being run.
10479 @cindex undefined behavior
10480 @cindex undefined function value
10481 @item
10482 If the compiler produces valid assembly code that does not correctly
10483 execute the input source code, that is a compiler bug.
10485 However, you must double-check to make sure, because you might have run
10486 into an incompatibility between GNU Fortran and traditional Fortran.
10487 @c (@pxref{Incompatibilities}).
10488 These incompatibilities might be considered
10489 bugs, but they are inescapable consequences of valuable features.
10491 Or you might have a program whose behavior is undefined, which happened
10492 by chance to give the desired results with another Fortran compiler.
10493 It is best to check the relevant Fortran standard thoroughly if
10494 it is possible that the program indeed does something undefined.
10496 After you have localized the error to a single source line, it should
10497 be easy to check for these things.
10498 If your program is correct and well defined, you have found
10499 a compiler bug.
10501 It might help if, in your submission, you identified the specific
10502 language in the relevant Fortran standard that specifies the
10503 desired behavior, if it isn't likely to be obvious and agreed-upon
10504 by all Fortran users.
10506 @item
10507 If the compiler produces an error message for valid input, that is a
10508 compiler bug.
10510 @cindex invalid input
10511 @item
10512 If the compiler does not produce an error message for invalid input,
10513 that is a compiler bug.
10514 However, you should note that your idea of
10515 ``invalid input'' might be someone else's idea
10516 of ``an extension'' or ``support for traditional practice''.
10518 @item
10519 If you are an experienced user of Fortran compilers, your suggestions
10520 for improvement of GNU Fortran are welcome in any case.
10521 @end itemize
10523 Many, perhaps most, bug reports against @command{g77} turn out to
10524 be bugs in the user's code.
10525 While we find such bug reports educational, they sometimes take
10526 a considerable amount of time to track down or at least respond
10527 to---time we could be spending making @command{g77}, not some user's
10528 code, better.
10530 Some steps you can take to verify that the bug is not certainly
10531 in the code you're compiling with @command{g77}:
10533 @itemize @bullet
10534 @item
10535 Compile your code using the @command{g77} options @samp{-W -Wall -O}.
10536 These options enable many useful warning; the @option{-O} option
10537 enables flow analysis that enables the uninitialized-variable
10538 warning.
10540 If you investigate the warnings and find evidence of possible bugs
10541 in your code, fix them first and retry @command{g77}.
10543 @item
10544 Compile your code using the @command{g77} options @option{-finit-local-zero},
10545 @option{-fno-automatic}, @option{-ffloat-store}, and various
10546 combinations thereof.
10548 If your code works with any of these combinations, that is not
10549 proof that the bug isn't in @command{g77}---a @command{g77} bug exposed
10550 by your code might simply be avoided, or have a different, more subtle
10551 effect, when different options are used---but it can be a
10552 strong indicator that your code is making unwarranted assumptions
10553 about the Fortran dialect and/or underlying machine it is
10554 being compiled and run on.
10556 @xref{Overly Convenient Options,,Overly Convenient Command-Line Options},
10557 for information on the @option{-fno-automatic} and
10558 @option{-finit-local-zero} options and how to convert
10559 their use into selective changes in your own code.
10561 @item
10562 @pindex ftnchek
10563 Validate your code with @command{ftnchek} or a similar code-checking
10564 tool.
10565 @command{ftnchek} can be found at @uref{ftp://ftp.netlib.org/fortran}
10566 or @uref{ftp://ftp.dsm.fordham.edu}.
10568 @pindex make
10569 @cindex Makefile example
10570 Here are some sample @file{Makefile} rules using @command{ftnchek}
10571 ``project'' files to do cross-file checking and @command{sfmakedepend}
10572 (from @uref{ftp://ahab.rutgers.edu/pub/perl/sfmakedepend})
10573 to maintain dependencies automatically.
10574 These assume the use of GNU @command{make}.
10576 @smallexample
10577 # Dummy suffix for ftnchek targets:
10578 .SUFFIXES: .chek
10579 .PHONY: chekall
10581 # How to compile .f files (for implicit rule):
10582 FC = g77
10583 # Assume `include' directory:
10584 FFLAGS = -Iinclude -g -O -Wall
10586 # Flags for ftnchek:
10587 CHEK1 = -array=0 -include=includes -noarray
10588 CHEK2 = -nonovice -usage=1 -notruncation
10589 CHEKFLAGS = $(CHEK1) $(CHEK2)
10591 # Run ftnchek with all the .prj files except the one corresponding
10592 # to the target's root:
10593 %.chek : %.f ; \
10594   ftnchek $(filter-out $*.prj,$(PRJS)) $(CHEKFLAGS) \
10595     -noextern -library $<
10597 # Derive a project file from a source file:
10598 %.prj : %.f ; \
10599   ftnchek $(CHEKFLAGS) -noextern -project -library $<
10601 # The list of objects is assumed to be in variable OBJS.
10602 # Sources corresponding to the objects:
10603 SRCS = $(OBJS:%.o=%.f)
10604 # ftnchek project files:
10605 PRJS = $(OBJS:%.o=%.prj)
10607 # Build the program
10608 prog: $(OBJS) ; \
10609   $(FC) -o $@ $(OBJS)
10611 chekall: $(PRJS) ; \
10612   ftnchek $(CHEKFLAGS) $(PRJS)
10614 prjs: $(PRJS)
10616 # For Emacs M-x find-tag:
10617 TAGS: $(SRCS) ; \
10618   etags $(SRCS)
10620 # Rebuild dependencies:
10621 depend: ; \
10622   sfmakedepend -I $(PLTLIBDIR) -I includes -a prj $(SRCS1)
10623 @end smallexample
10625 @item
10626 Try your code out using other Fortran compilers, such as @command{f2c}.
10627 If it does not work on at least one other compiler (assuming the
10628 compiler supports the features the code needs), that is a strong
10629 indicator of a bug in the code.
10631 However, even if your code works on many compilers @emph{except}
10632 @command{g77}, that does @emph{not} mean the bug is in @command{g77}.
10633 It might mean the bug is in your code, and that @command{g77} simply
10634 exposes it more readily than other compilers.
10635 @end itemize
10637 @node Bug Lists
10638 @section Where to Report Bugs
10639 @cindex bug report mailing lists
10640 @kindex @value{email-bugs}
10641 Send bug reports for GNU Fortran to @email{@value{email-bugs}}.
10643 Often people think of posting bug reports to a newsgroup instead of
10644 mailing them.
10645 This sometimes appears to work, but it has one problem which can be
10646 crucial: a newsgroup posting does not contain a mail path back to the
10647 sender.
10648 Thus, if maintainers need more information, they might be unable
10649 to reach you.  For this reason, you should always send bug reports by
10650 mail to the proper mailing list.
10652 As a last resort, send bug reports on paper to:
10654 @example
10655 GNU Compiler Bugs
10656 Free Software Foundation
10657 59 Temple Place - Suite 330
10658 Boston, MA 02111-1307, USA
10659 @end example
10661 @node Bug Reporting
10662 @section How to Report Bugs
10663 @cindex compiler bugs, reporting
10665 The fundamental principle of reporting bugs usefully is this:
10666 @strong{report all the facts}.
10667 If you are not sure whether to state a
10668 fact or leave it out, state it!
10670 Often people omit facts because they think they know what causes the
10671 problem and they conclude that some details don't matter.
10672 Thus, you might
10673 assume that the name of the variable you use in an example does not matter.
10674 Well, probably it doesn't, but one cannot be sure.
10675 Perhaps the bug is a
10676 stray memory reference which happens to fetch from the location where that
10677 name is stored in memory; perhaps, if the name were different, the contents
10678 of that location would fool the compiler into doing the right thing despite
10679 the bug.
10680 Play it safe and give a specific, complete example.
10681 That is the
10682 easiest thing for you to do, and the most helpful.
10684 Keep in mind that the purpose of a bug report is to enable someone to
10685 fix the bug if it is not known.
10686 It isn't very important what happens if
10687 the bug is already known.
10688 Therefore, always write your bug reports on
10689 the assumption that the bug is not known.
10691 Sometimes people give a few sketchy facts and ask, ``Does this ring a
10692 bell?''
10693 This cannot help us fix a bug, so it is rarely helpful.
10694 We respond by asking for enough details to enable us to investigate.
10695 You might as well expedite matters by sending them to begin with.
10696 (Besides, there are enough bells ringing around here as it is.)
10698 Try to make your bug report self-contained.
10699 If we have to ask you for
10700 more information, it is best if you include all the previous information
10701 in your response, as well as the information that was missing.
10703 Please report each bug in a separate message.
10704 This makes it easier for
10705 us to track which bugs have been fixed and to forward your bugs reports
10706 to the appropriate maintainer.
10708 Do not compress and encode any part of your bug report using programs
10709 such as @file{uuencode}.
10710 If you do so it will slow down the processing
10711 of your bug.
10712 If you must submit multiple large files, use @file{shar},
10713 which allows us to read your message without having to run any
10714 decompression programs.
10716 (As a special exception for GNU Fortran bug-reporting, at least
10717 for now, if you are sending more than a few lines of code, if
10718 your program's source file format contains ``interesting'' things
10719 like trailing spaces or strange characters, or if you need to
10720 include binary data files, it is acceptable to put all the
10721 files together in a @command{tar} archive, and, whether you need to
10722 do that, it is acceptable to then compress the single file (@command{tar}
10723 archive or source file)
10724 using @command{gzip} and encode it via @command{uuencode}.
10725 Do not use any MIME stuff---the current maintainer can't decode this.
10726 Using @command{compress} instead of @command{gzip} is acceptable, assuming
10727 you have licensed the use of the patented algorithm in
10728 @command{compress} from Unisys.)
10730 To enable someone to investigate the bug, you should include all these
10731 things:
10733 @itemize @bullet
10734 @item
10735 The version of GNU Fortran.
10736 You can get this by running @command{g77} with the @option{-v} option.
10737 (Ignore any error messages that might be displayed
10738 when the linker is run.)
10740 Without this, we won't know whether there is any point in looking for
10741 the bug in the current version of GNU Fortran.
10743 @item
10744 @cindex preprocessor
10745 @cindex cpp program
10746 @cindex programs, cpp
10747 @pindex cpp
10748 A complete input file that will reproduce the bug.
10750 If your source file(s) require preprocessing
10751 (for example, their names have suffixes like
10752 @samp{.F}, @samp{.fpp}, @samp{.FPP}, and @samp{.r}),
10753 and the bug is in the compiler proper (@file{f771})
10754 or in a subsequent phase of processing,
10755 run your source file through the C preprocessor
10756 by doing @samp{g77 -E @var{sourcefile} > @var{newfile}}.
10757 Then, include the contents of @var{newfile} in the bug report.
10758 (When you do this, use the same preprocessor options---such as
10759 @option{-I}, @option{-D}, and @option{-U}---that you used in actual
10760 compilation.)
10762 A single statement is not enough of an example.
10763 In order to compile it,
10764 it must be embedded in a complete file of compiler input.
10765 The bug might depend on the details of how this is done.
10767 Without a real example one can compile,
10768 all anyone can do about your bug report is wish you luck.
10769 It would be futile to try to guess how to provoke the bug.
10770 For example, bugs in register allocation and reloading
10771 can depend on every little detail of the source and include files
10772 that trigger them.
10774 @item
10775 @cindex included files
10776 @cindex INCLUDE directive
10777 @cindex directive, INCLUDE
10778 @cindex #include directive
10779 @cindex directive, #include
10780 Note that you should include with your bug report any files
10781 included by the source file
10782 (via the @code{#include} or @code{INCLUDE} directive)
10783 that you send, and any files they include, and so on.
10785 It is not necessary to replace
10786 the @code{#include} and @code{INCLUDE} directives
10787 with the actual files in the version of the source file that
10788 you send, but it might make submitting the bug report easier
10789 in the end.
10790 However, be sure to @emph{reproduce} the bug using the @emph{exact}
10791 version of the source material you submit, to avoid wild-goose
10792 chases.
10794 @item
10795 The command arguments you gave GNU Fortran to compile that example
10796 and observe the bug.  For example, did you use @option{-O}?  To guarantee
10797 you won't omit something important, list all the options.
10799 If we were to try to guess the arguments, we would probably guess wrong
10800 and then we would not encounter the bug.
10802 @item
10803 The type of machine you are using, and the operating system name and
10804 version number.
10805 (Much of this information is printed by @samp{g77 -v}---if you
10806 include that, send along any additional info you have that you
10807 don't see clearly represented in that output.)
10809 @item
10810 The operands you gave to the @command{configure} command when you installed
10811 the compiler.
10813 @item
10814 A complete list of any modifications you have made to the compiler
10815 source.  (We don't promise to investigate the bug unless it happens in
10816 an unmodified compiler.  But if you've made modifications and don't tell
10817 us, then you are sending us on a wild-goose chase.)
10819 Be precise about these changes.  A description in English is not
10820 enough---send a context diff for them.
10822 Adding files of your own (such as a machine description for a machine we
10823 don't support) is a modification of the compiler source.
10825 @item
10826 Details of any other deviations from the standard procedure for installing
10827 GNU Fortran.
10829 @item
10830 A description of what behavior you observe that you believe is
10831 incorrect.  For example, ``The compiler gets a fatal signal,'' or,
10832 ``The assembler instruction at line 208 in the output is incorrect.''
10834 Of course, if the bug is that the compiler gets a fatal signal, then one
10835 can't miss it.  But if the bug is incorrect output, the maintainer might
10836 not notice unless it is glaringly wrong.  None of us has time to study
10837 all the assembler code from a 50-line Fortran program just on the chance that
10838 one instruction might be wrong.  We need @emph{you} to do this part!
10840 Even if the problem you experience is a fatal signal, you should still
10841 say so explicitly.  Suppose something strange is going on, such as, your
10842 copy of the compiler is out of synch, or you have encountered a bug in
10843 the C library on your system.  (This has happened!)  Your copy might
10844 crash and the copy here would not.  If you @i{said} to expect a crash,
10845 then when the compiler here fails to crash, we would know that the bug
10846 was not happening.  If you don't say to expect a crash, then we would
10847 not know whether the bug was happening.  We would not be able to draw
10848 any conclusion from our observations.
10850 If the problem is a diagnostic when building GNU Fortran with some other
10851 compiler, say whether it is a warning or an error.
10853 Often the observed symptom is incorrect output when your program is run.
10854 Sad to say, this is not enough information unless the program is short
10855 and simple.  None of us has time to study a large program to figure out
10856 how it would work if compiled correctly, much less which line of it was
10857 compiled wrong.  So you will have to do that.  Tell us which source line
10858 it is, and what incorrect result happens when that line is executed.  A
10859 person who understands the program can find this as easily as finding a
10860 bug in the program itself.
10862 @item
10863 If you send examples of assembler code output from GNU Fortran,
10864 please use @option{-g} when you make them.  The debugging information
10865 includes source line numbers which are essential for correlating the
10866 output with the input.
10868 @item
10869 If you wish to mention something in the GNU Fortran source, refer to it by
10870 context, not by line number.
10872 The line numbers in the development sources don't match those in your
10873 sources.  Your line numbers would convey no convenient information to the
10874 maintainers.
10876 @item
10877 Additional information from a debugger might enable someone to find a
10878 problem on a machine which he does not have available.  However, you
10879 need to think when you collect this information if you want it to have
10880 any chance of being useful.
10882 @cindex backtrace for bug reports
10883 For example, many people send just a backtrace, but that is never
10884 useful by itself.  A simple backtrace with arguments conveys little
10885 about GNU Fortran because the compiler is largely data-driven; the same
10886 functions are called over and over for different RTL insns, doing
10887 different things depending on the details of the insn.
10889 Most of the arguments listed in the backtrace are useless because they
10890 are pointers to RTL list structure.  The numeric values of the
10891 pointers, which the debugger prints in the backtrace, have no
10892 significance whatever; all that matters is the contents of the objects
10893 they point to (and most of the contents are other such pointers).
10895 In addition, most compiler passes consist of one or more loops that
10896 scan the RTL insn sequence.  The most vital piece of information about
10897 such a loop---which insn it has reached---is usually in a local variable,
10898 not in an argument.
10900 @findex debug_rtx
10901 What you need to provide in addition to a backtrace are the values of
10902 the local variables for several stack frames up.  When a local
10903 variable or an argument is an RTX, first print its value and then use
10904 the GDB command @command{pr} to print the RTL expression that it points
10905 to.  (If GDB doesn't run on your machine, use your debugger to call
10906 the function @code{debug_rtx} with the RTX as an argument.)  In
10907 general, whenever a variable is a pointer, its value is no use
10908 without the data it points to.
10909 @end itemize
10911 Here are some things that are not necessary:
10913 @itemize @bullet
10914 @item
10915 A description of the envelope of the bug.
10917 Often people who encounter a bug spend a lot of time investigating
10918 which changes to the input file will make the bug go away and which
10919 changes will not affect it.
10921 This is often time consuming and not very useful, because the way we
10922 will find the bug is by running a single example under the debugger with
10923 breakpoints, not by pure deduction from a series of examples.  You might
10924 as well save your time for something else.
10926 Of course, if you can find a simpler example to report @emph{instead} of
10927 the original one, that is a convenience.  Errors in the output will be
10928 easier to spot, running under the debugger will take less time, etc.
10929 Most GNU Fortran bugs involve just one function, so the most straightforward
10930 way to simplify an example is to delete all the function definitions
10931 except the one where the bug occurs.  Those earlier in the file may be
10932 replaced by external declarations if the crucial function depends on
10933 them.  (Exception: inline functions might affect compilation of functions
10934 defined later in the file.)
10936 However, simplification is not vital; if you don't want to do this,
10937 report the bug anyway and send the entire test case you used.
10939 @item
10940 In particular, some people insert conditionals @samp{#ifdef BUG} around
10941 a statement which, if removed, makes the bug not happen.  These are just
10942 clutter; we won't pay any attention to them anyway.  Besides, you should
10943 send us preprocessor output, and that can't have conditionals.
10945 @item
10946 A patch for the bug.
10948 A patch for the bug is useful if it is a good one.  But don't omit the
10949 necessary information, such as the test case, on the assumption that a
10950 patch is all we need.  We might see problems with your patch and decide
10951 to fix the problem another way, or we might not understand it at all.
10953 Sometimes with a program as complicated as GNU Fortran it is very hard to
10954 construct an example that will make the program follow a certain path
10955 through the code.  If you don't send the example, we won't be able to
10956 construct one, so we won't be able to verify that the bug is fixed.
10958 And if we can't understand what bug you are trying to fix, or why your
10959 patch should be an improvement, we won't install it.  A test case will
10960 help us to understand.
10962 See @uref{http://gcc.gnu.org/contribute.html}
10963 for guidelines on how to make it easy for us to
10964 understand and install your patches.
10966 @item
10967 A guess about what the bug is or what it depends on.
10969 Such guesses are usually wrong.  Even the maintainer can't guess right
10970 about such things without first using the debugger to find the facts.
10972 @item
10973 A core dump file.
10975 We have no way of examining a core dump for your type of machine
10976 unless we have an identical system---and if we do have one,
10977 we should be able to reproduce the crash ourselves.
10978 @end itemize
10980 @node Service
10981 @chapter How To Get Help with GNU Fortran
10983 If you need help installing, using or changing GNU Fortran, there are two
10984 ways to find it:
10986 @itemize @bullet
10987 @item
10988 Look in the service directory for someone who might help you for a fee.
10989 The service directory is found in the file named @file{SERVICE} in the
10990 GNU CC distribution.
10992 @item
10993 Send a message to @email{@value{email-help}}.
10994 @end itemize
10996 @end ifset
10997 @ifset INTERNALS
10998 @node Adding Options
10999 @chapter Adding Options
11000 @cindex options, adding
11001 @cindex adding options
11003 To add a new command-line option to @command{g77}, first decide
11004 what kind of option you wish to add.
11005 Search the @command{g77} and @command{gcc} documentation for one
11006 or more options that is most closely like the one you want to add
11007 (in terms of what kind of effect it has, and so on) to
11008 help clarify its nature.
11010 @itemize @bullet
11011 @item
11012 @emph{Fortran options} are options that apply only
11013 when compiling Fortran programs.
11014 They are accepted by @command{g77} and @command{gcc}, but
11015 they apply only when compiling Fortran programs.
11017 @item
11018 @emph{Compiler options} are options that apply
11019 when compiling most any kind of program.
11020 @end itemize
11022 @emph{Fortran options} are listed in the file
11023 @file{@value{path-g77}/lang-options.h},
11024 which is used during the build of @command{gcc} to
11025 build a list of all options that are accepted by
11026 at least one language's compiler.
11027 This list goes into the @code{documented_lang_options} array
11028 in @file{gcc/toplev.c}, which uses this array to
11029 determine whether a particular option should be
11030 offered to the linked-in front end for processing
11031 by calling @code{lang_option_decode}, which, for
11032 @command{g77}, is in @file{@value{path-g77}/com.c} and just
11033 calls @code{ffe_decode_option}.
11035 If the linked-in front end ``rejects'' a
11036 particular option passed to it, @file{toplev.c}
11037 just ignores the option, because @emph{some}
11038 language's compiler is willing to accept it.
11040 This allows commands like @samp{gcc -fno-asm foo.c bar.f}
11041 to work, even though Fortran compilation does
11042 not currently support the @option{-fno-asm} option;
11043 even though the @code{f771} version of @code{lang_decode_option}
11044 rejects @option{-fno-asm}, @file{toplev.c} doesn't
11045 produce a diagnostic because some other language (C)
11046 does accept it.
11048 This also means that commands like
11049 @samp{g77 -fno-asm foo.f} yield no diagnostics,
11050 despite the fact that no phase of the command was
11051 able to recognize and process @option{-fno-asm}---perhaps
11052 a warning about this would be helpful if it were
11053 possible.
11055 Code that processes Fortran options is found in
11056 @file{@value{path-g77}/top.c}, function @code{ffe_decode_option}.
11057 This code needs to check positive and negative forms
11058 of each option.
11060 The defaults for Fortran options are set in their
11061 global definitions, also found in @file{@value{path-g77}/top.c}.
11062 Many of these defaults are actually macros defined
11063 in @file{@value{path-g77}/target.h}, since they might be
11064 machine-specific.
11065 However, since, in practice, GNU compilers
11066 should behave the same way on all configurations
11067 (especially when it comes to language constructs),
11068 the practice of setting defaults in @file{target.h}
11069 is likely to be deprecated and, ultimately, stopped
11070 in future versions of @command{g77}.
11072 Accessor macros for Fortran options, used by code
11073 in the @command{g77} FFE, are defined in @file{@value{path-g77}/top.h}.
11075 @emph{Compiler options} are listed in @file{gcc/toplev.c}
11076 in the array @code{f_options}.
11077 An option not listed in @code{lang_options} is
11078 looked up in @code{f_options} and handled from there.
11080 The defaults for compiler options are set in the
11081 global definitions for the corresponding variables,
11082 some of which are in @file{gcc/toplev.c}.
11084 You can set different defaults for @emph{Fortran-oriented}
11085 or @emph{Fortran-reticent} compiler options by changing
11086 the source code of @command{g77} and rebuilding.
11087 How to do this depends on the version of @command{g77}:
11089 @table @code
11090 @item G77 0.5.24 (EGCS 1.1)
11091 @itemx G77 0.5.25 (EGCS 1.2 - which became GCC 2.95)
11092 Change the @code{lang_init_options} routine in @file{gcc/gcc/f/com.c}.
11094 (Note that these versions of @command{g77}
11095 perform internal consistency checking automatically
11096 when the @option{-fversion} option is specified.)
11098 @item G77 0.5.23
11099 @itemx G77 0.5.24 (EGCS 1.0)
11100 Change the way @code{f771} handles the @option{-fset-g77-defaults}
11101 option, which is always provided as the first option when
11102 called by @command{g77} or @command{gcc}.
11104 This code is in @code{ffe_decode_options} in @file{@value{path-g77}/top.c}.
11105 Have it change just the variables that you want to default
11106 to a different setting for Fortran compiles compared to
11107 compiles of other languages.
11109 The @option{-fset-g77-defaults} option is passed to @code{f771}
11110 automatically because of the specification information
11111 kept in @file{@value{path-g77}/lang-specs.h}.
11112 This file tells the @command{gcc} command how to recognize,
11113 in this case, Fortran source files (those to be preprocessed,
11114 and those that are not), and further, how to invoke the
11115 appropriate programs (including @code{f771}) to process
11116 those source files.
11118 It is in @file{@value{path-g77}/lang-specs.h} that @option{-fset-g77-defaults},
11119 @option{-fversion}, and other options are passed, as appropriate,
11120 even when the user has not explicitly specified them.
11121 Other ``internal'' options such as @option{-quiet} also
11122 are passed via this mechanism.
11123 @end table
11125 @node Projects
11126 @chapter Projects
11127 @cindex projects
11129 If you want to contribute to @command{g77} by doing research,
11130 design, specification, documentation, coding, or testing,
11131 the following information should give you some ideas.
11132 More relevant information might be available from
11133 @uref{ftp://alpha.gnu.org/gnu/g77/projects/}.
11135 @menu
11136 * Efficiency::               Make @command{g77} itself compile code faster.
11137 * Better Optimization::      Teach @command{g77} to generate faster code.
11138 * Simplify Porting::         Make @command{g77} easier to configure, build,
11139                              and install.
11140 * More Extensions::          Features many users won't know to ask for.
11141 * Machine Model::            @command{g77} should better leverage @command{gcc}.
11142 * Internals Documentation::  Make maintenance easier.
11143 * Internals Improvements::   Make internals more robust.
11144 * Better Diagnostics::       Make using @command{g77} on new code easier.
11145 @end menu
11147 @node Efficiency
11148 @section Improve Efficiency
11149 @cindex efficiency
11151 Don't bother doing any performance analysis until most of the
11152 following items are taken care of, because there's no question
11153 they represent serious space/time problems, although some of
11154 them show up only given certain kinds of (popular) input.
11156 @itemize @bullet
11157 @item
11158 Improve @code{malloc} package and its uses to specify more info about
11159 memory pools and, where feasible, use obstacks to implement them.
11161 @item
11162 Skip over uninitialized portions of aggregate areas (arrays,
11163 @code{COMMON} areas, @code{EQUIVALENCE} areas) so zeros need not be output.
11164 This would reduce memory usage for large initialized aggregate
11165 areas, even ones with only one initialized element.
11167 As of version 0.5.18, a portion of this item has already been
11168 accomplished.
11170 @item
11171 Prescan the statement (in @file{sta.c}) so that the nature of the statement
11172 is determined as much as possible by looking entirely at its form,
11173 and not looking at any context (previous statements, including types
11174 of symbols).
11175 This would allow ripping out of the statement-confirmation,
11176 symbol retraction/confirmation, and diagnostic inhibition
11177 mechanisms.
11178 Plus, it would result in much-improved diagnostics.
11179 For example, @samp{CALL some-intrinsic(@dots{})}, where the intrinsic
11180 is not a subroutine intrinsic, would result actual error instead of the
11181 unimplemented-statement catch-all.
11183 @item
11184 Throughout @command{g77}, don't pass line/column pairs where
11185 a simple @code{ffewhere} type, which points to the error as much as is
11186 desired by the configuration, will do, and don't pass @code{ffelexToken} types
11187 where a simple @code{ffewhere} type will do.
11188 Then, allow new default
11189 configuration of @code{ffewhere} such that the source line text is not
11190 preserved, and leave it to things like Emacs' next-error function
11191 to point to them (now that @samp{next-error} supports column,
11192 or, perhaps, character-offset, numbers).
11193 The change in calling sequences should improve performance somewhat,
11194 as should not having to save source lines.
11195 (Whether this whole
11196 item will improve performance is questionable, but it should
11197 improve maintainability.)
11199 @item
11200 Handle @samp{DATA (A(I),I=1,1000000)/1000000*2/} more efficiently, especially
11201 as regards the assembly output.
11202 Some of this might require improving
11203 the back end, but lots of improvement in space/time required in @command{g77}
11204 itself can be fairly easily obtained without touching the back end.
11205 Maybe type-conversion, where necessary, can be speeded up as well in
11206 cases like the one shown (converting the @samp{2} into @samp{2.}).
11208 @item
11209 If analysis shows it to be worthwhile, optimize @file{lex.c}.
11211 @item
11212 Consider redesigning @file{lex.c} to not need any feedback
11213 during tokenization, by keeping track of enough parse state on its
11214 own.
11215 @end itemize
11217 @node Better Optimization
11218 @section Better Optimization
11219 @cindex optimization, better
11220 @cindex code generation, improving
11222 Much of this work should be put off until after @command{g77} has
11223 all the features necessary for its widespread acceptance as a
11224 useful F77 compiler.
11225 However, perhaps this work can be done in parallel during
11226 the feature-adding work.
11228 @itemize @bullet
11229 @item
11230 Do the equivalent of the trick of putting @samp{extern inline} in front
11231 of every function definition in @code{libg2c} and #include'ing the resulting
11232 file in @command{f2c}+@command{gcc}---that is, inline all run-time-library functions
11233 that are at all worth inlining.
11234 (Some of this has already been done, such as for integral exponentiation.)
11236 @item
11237 When doing @samp{CHAR_VAR = CHAR_FUNC(@dots{})},
11238 and it's clear that types line up
11239 and @samp{CHAR_VAR} is addressable or not a @code{VAR_DECL},
11240 make @samp{CHAR_VAR}, not a
11241 temporary, be the receiver for @samp{CHAR_FUNC}.
11242 (This is now done for @code{COMPLEX} variables.)
11244 @item
11245 Design and implement Fortran-specific optimizations that don't
11246 really belong in the back end, or where the front end needs to
11247 give the back end more info than it currently does.
11249 @item
11250 Design and implement a new run-time library interface, with the
11251 code going into @code{libgcc} so no special linking is required to
11252 link Fortran programs using standard language features.
11253 This library
11254 would speed up lots of things, from I/O (using precompiled formats,
11255 doing just one, or, at most, very few, calls for arrays or array sections,
11256 and so on) to general computing (array/section implementations of
11257 various intrinsics, implementation of commonly performed loops that
11258 aren't likely to be optimally compiled otherwise, etc.).
11260 Among the important things the library would do are:
11262 @itemize @bullet
11263 @item
11264 Be a one-stop-shop-type
11265 library, hence shareable and usable by all, in that what are now
11266 library-build-time options in @code{libg2c} would be moved at least to the
11267 @command{g77} compile phase, if not to finer grains (such as choosing how
11268 list-directed I/O formatting is done by default at @code{OPEN} time, for
11269 preconnected units via options or even statements in the main program
11270 unit, maybe even on a per-I/O basis with appropriate pragma-like
11271 devices).
11272 @end itemize
11274 @item
11275 Probably requiring the new library design, change interface to
11276 normally have @code{COMPLEX} functions return their values in the way
11277 @command{gcc} would if they were declared @code{__complex__ float},
11278 rather than using
11279 the mechanism currently used by @code{CHARACTER} functions (whereby the
11280 functions are compiled as returning void and their first arg is
11281 a pointer to where to store the result).
11282 (Don't append underscores to
11283 external names for @code{COMPLEX} functions in some cases once @command{g77} uses
11284 @command{gcc} rather than @command{f2c} calling conventions.)
11286 @item
11287 Do something useful with @code{doiter} references where possible.
11288 For example, @samp{CALL FOO(I)} cannot modify @samp{I} if within
11289 a @code{DO} loop that uses @samp{I} as the
11290 iteration variable, and the back end might find that info useful
11291 in determining whether it needs to read @samp{I} back into a register after
11292 the call.
11293 (It normally has to do that, unless it knows @samp{FOO} never
11294 modifies its passed-by-reference argument, which is rarely the case
11295 for Fortran-77 code.)
11296 @end itemize
11298 @node Simplify Porting
11299 @section Simplify Porting
11300 @cindex porting, simplify
11301 @cindex simplify porting
11303 Making @command{g77} easier to configure, port, build, and install, either
11304 as a single-system compiler or as a cross-compiler, would be
11305 very useful.
11307 @itemize @bullet
11308 @item
11309 A new library (replacing @code{libg2c}) should improve portability as well as
11310 produce more optimal code.
11311 Further, @command{g77} and the new library should
11312 conspire to simplify naming of externals, such as by removing unnecessarily
11313 added underscores, and to reduce/eliminate the possibility of naming
11314 conflicts, while making debugger more straightforward.
11316 Also, it should
11317 make multi-language applications more feasible, such as by providing
11318 Fortran intrinsics that get Fortran unit numbers given C @code{FILE *}
11319 descriptors.
11321 @item
11322 Possibly related to a new library, @command{g77} should produce the equivalent
11323 of a @command{gcc} @samp{main(argc, argv)} function when it compiles a
11324 main program unit, instead of compiling something that must be
11325 called by a library
11326 implementation of @code{main()}.
11328 This would do many useful things such as
11329 provide more flexibility in terms of setting up exception handling,
11330 not requiring programmers to start their debugging sessions with
11331 @kbd{breakpoint MAIN__} followed by @kbd{run}, and so on.
11333 @item
11334 The GBE needs to understand the difference between alignment
11335 requirements and desires.
11336 For example, on Intel x86 machines, @command{g77} currently imposes
11337 overly strict alignment requirements, due to the back end, but it
11338 would be useful for Fortran and C programmers to be able to override
11339 these @emph{recommendations} as long as they don't violate the actual
11340 processor @emph{requirements}.
11341 @end itemize
11343 @node More Extensions
11344 @section More Extensions
11345 @cindex extensions, more
11347 These extensions are not the sort of things users ask for ``by name'',
11348 but they might improve the usability of @command{g77}, and Fortran in
11349 general, in the long run.
11350 Some of these items really pertain to improving @command{g77} internals
11351 so that some popular extensions can be more easily supported.
11353 @itemize @bullet
11354 @item
11355 Look through all the documentation on the GNU Fortran language,
11356 dialects, compiler, missing features, bugs, and so on.
11357 Many mentions of incomplete or missing features are
11358 sprinkled throughout.
11359 It is not worth repeating them here.
11361 @item
11362 Consider adding a @code{NUMERIC} type to designate typeless numeric constants,
11363 named and unnamed.
11364 The idea is to provide a forward-looking, effective
11365 replacement for things like the old-style @code{PARAMETER} statement
11366 when people
11367 really need typelessness in a maintainable, portable, clearly documented
11368 way.
11369 Maybe @code{TYPELESS} would include @code{CHARACTER}, @code{POINTER},
11370 and whatever else might come along.
11371 (This is not really a call for polymorphism per se, just
11372 an ability to express limited, syntactic polymorphism.)
11374 @item
11375 Support @samp{OPEN(@dots{},KEY=(@dots{}),@dots{})}.
11377 @item
11378 Support arbitrary file unit numbers, instead of limiting them
11379 to 0 through @samp{MXUNIT-1}.
11380 (This is a @code{libg2c} issue.)
11382 @item
11383 @samp{OPEN(NOSPANBLOCKS,@dots{})} is treated as
11384 @samp{OPEN(UNIT=NOSPANBLOCKS,@dots{})}, so a
11385 later @code{UNIT=} in the first example is invalid.
11386 Make sure this is what users of this feature would expect.
11388 @item
11389 Currently @command{g77} disallows @samp{READ(1'10)} since
11390 it is an obnoxious syntax, but
11391 supporting it might be pretty easy if needed.
11392 More details are needed, such
11393 as whether general expressions separated by an apostrophe are supported,
11394 or maybe the record number can be a general expression, and so on.
11396 @item
11397 Support @code{STRUCTURE}, @code{UNION}, @code{MAP}, and @code{RECORD}
11398 fully.
11399 Currently there is no support at all
11400 for @code{%FILL} in @code{STRUCTURE} and related syntax,
11401 whereas the rest of the
11402 stuff has at least some parsing support.
11403 This requires either major
11404 changes to @code{libg2c} or its replacement.
11406 @item
11407 F90 and @command{g77} probably disagree about label scoping relative to
11408 @code{INTERFACE} and @code{END INTERFACE}, and their contained
11409 procedure interface bodies (blocks?).
11411 @item
11412 @code{ENTRY} doesn't support F90 @code{RESULT()} yet,
11413 since that was added after S8.112.
11415 @item
11416 Empty-statement handling (10 ;;CONTINUE;;) probably isn't consistent
11417 with the final form of the standard (it was vague at S8.112).
11419 @item
11420 It seems to be an ``open'' question whether a file, immediately after being
11421 @code{OPEN}ed,is positioned at the beginning, the end, or wherever---it
11422 might be nice to offer an option of opening to ``undefined'' status, requiring
11423 an explicit absolute-positioning operation to be performed before any
11424 other (besides @code{CLOSE}) to assist in making applications port to systems
11425 (some IBM?) that @code{OPEN} to the end of a file or some such thing.
11426 @end itemize
11428 @node Machine Model
11429 @section Machine Model
11431 This items pertain to generalizing @command{g77}'s view of
11432 the machine model to more fully accept whatever the GBE
11433 provides it via its configuration.
11435 @itemize @bullet
11436 @item
11437 Switch to using @code{REAL_VALUE_TYPE} to represent floating-point constants
11438 exclusively so the target float format need not be required.
11439 This
11440 means changing the way @command{g77} handles initialization of aggregate areas
11441 having more than one type, such as @code{REAL} and @code{INTEGER},
11442 because currently
11443 it initializes them as if they were arrays of @code{char} and uses the
11444 bit patterns of the constants of the various types in them to determine
11445 what to stuff in elements of the arrays.
11447 @item
11448 Rely more and more on back-end info and capabilities, especially in the
11449 area of constants (where having the @command{g77} front-end's IL just store
11450 the appropriate tree nodes containing constants might be best).
11452 @item
11453 Suite of C and Fortran programs that a user/administrator can run on a
11454 machine to help determine the configuration for @command{g77} before building
11455 and help determine if the compiler works (especially with whatever
11456 libraries are installed) after building.
11457 @end itemize
11459 @node Internals Documentation
11460 @section Internals Documentation
11462 Better info on how @command{g77} works and how to port it is needed.
11464 @xref{Front End}, which contains some information
11465 on @command{g77} internals.
11467 @node Internals Improvements
11468 @section Internals Improvements
11470 Some more items that would make @command{g77} more reliable
11471 and easier to maintain:
11473 @itemize @bullet
11474 @item
11475 Generally make expression handling focus
11476 more on critical syntax stuff, leaving semantics to callers.
11477 For example,
11478 anything a caller can check, semantically, let it do so, rather
11479 than having @file{expr.c} do it.
11480 (Exceptions might include things like
11481 diagnosing @samp{FOO(I--K:)=BAR} where @samp{FOO} is a @code{PARAMETER}---if
11482 it seems
11483 important to preserve the left-to-right-in-source order of production
11484 of diagnostics.)
11486 @item
11487 Come up with better naming conventions for @option{-D} to establish requirements
11488 to achieve desired implementation dialect via @file{proj.h}.
11490 @item
11491 Clean up used tokens and @code{ffewhere}s in @code{ffeglobal_terminate_1}.
11493 @item
11494 Replace @file{sta.c} @code{outpooldisp} mechanism with @code{malloc_pool_use}.
11496 @item
11497 Check for @code{opANY} in more places in @file{com.c}, @file{std.c},
11498 and @file{ste.c}, and get rid of the @samp{opCONVERT(opANY)} kludge
11499 (after determining if there is indeed no real need for it).
11501 @item
11502 Utility to read and check @file{bad.def} messages and their references in the
11503 code, to make sure calls are consistent with message templates.
11505 @item
11506 Search and fix @samp{&ffe@dots{}} and similar so that
11507 @samp{ffe@dots{}ptr@dots{}} macros are
11508 available instead (a good argument for wishing this could have written all
11509 this stuff in C++, perhaps).
11510 On the other hand, it's questionable whether this sort of
11511 improvement is really necessary, given the availability of
11512 tools such as Emacs and Perl, which make finding any
11513 address-taking of structure members easy enough?
11515 @item
11516 Some modules truly export the member names of their structures (and the
11517 structures themselves), maybe fix this, and fix other modules that just
11518 appear to as well (by appending @samp{_}, though it'd be ugly and probably
11519 not worth the time).
11521 @item
11522 Implement C macros @samp{RETURNS(value)} and @samp{SETS(something,value)}
11523 in @file{proj.h}
11524 and use them throughout @command{g77} source code (especially in the definitions
11525 of access macros in @samp{.h} files) so they can be tailored
11526 to catch code writing into a @samp{RETURNS()} or reading from a @samp{SETS()}.
11528 @item
11529 Decorate throughout with @code{const} and other such stuff.
11531 @item
11532 All F90 notational derivations in the source code are still based
11533 on the S8.112 version of the draft standard.
11534 Probably should update
11535 to the official standard, or put documentation of the rules as used
11536 in the code@dots{}uh@dots{}in the code.
11538 @item
11539 Some @code{ffebld_new} calls (those outside of @file{ffeexpr.c} or
11540 inside but invoked via paths not involving @code{ffeexpr_lhs} or
11541 @code{ffeexpr_rhs}) might be creating things
11542 in improper pools, leading to such things staying around too long or
11543 (doubtful, but possible and dangerous) not long enough.
11545 @item
11546 Some @code{ffebld_list_new} (or whatever) calls might not be matched by
11547 @code{ffebld_list_bottom} (or whatever) calls, which might someday matter.
11548 (It definitely is not a problem just yet.)
11550 @item
11551 Probably not doing clean things when we fail to @code{EQUIVALENCE} something
11552 due to alignment/mismatch or other problems---they end up without
11553 @code{ffestorag} objects, so maybe the backend (and other parts of the front
11554 end) can notice that and handle like an @code{opANY} (do what it wants, just
11555 don't complain or crash).
11556 Most of this seems to have been addressed
11557 by now, but a code review wouldn't hurt.
11558 @end itemize
11560 @node Better Diagnostics
11561 @section Better Diagnostics
11563 These are things users might not ask about, or that need to
11564 be looked into, before worrying about.
11565 Also here are items that involve reducing unnecessary diagnostic
11566 clutter.
11568 @itemize @bullet
11569 @item
11570 When @code{FUNCTION} and @code{ENTRY} point types disagree (@code{CHARACTER}
11571 lengths, type classes, and so on),
11572 @code{ANY}-ize the offending @code{ENTRY} point and any @emph{new} dummies
11573 it specifies.
11575 @item
11576 Speed up and improve error handling for data when repeat-count is
11577 specified.
11578 For example, don't output 20 unnecessary messages after the
11579 first necessary one for:
11581 @smallexample
11582 INTEGER X(20)
11583 CONTINUE
11584 DATA (X(I), J= 1, 20) /20*5/
11586 @end smallexample
11588 @noindent
11589 (The @code{CONTINUE} statement ensures the @code{DATA} statement
11590 is processed in the context of executable, not specification,
11591 statements.)
11592 @end itemize
11594 @include ffe.texi
11596 @end ifset
11598 @ifset USING
11599 @node Diagnostics
11600 @chapter Diagnostics
11601 @cindex diagnostics
11603 Some diagnostics produced by @command{g77} require sufficient explanation
11604 that the explanations are given below, and the diagnostics themselves
11605 identify the appropriate explanation.
11607 Identification uses the GNU Info format---specifically, the @command{info}
11608 command that displays the explanation is given within square
11609 brackets in the diagnostic.
11610 For example:
11612 @smallexample
11613 foo.f:5: Invalid statement [info -f g77 M FOOEY]
11614 @end smallexample
11616 More details about the above diagnostic is found in the @command{g77} Info
11617 documentation, menu item @samp{M}, submenu item @samp{FOOEY},
11618 which is displayed by typing the UNIX command
11619 @samp{info -f g77 M FOOEY}.
11621 Other Info readers, such as EMACS, may be just as easily used to display
11622 the pertinent node.
11623 In the above example, @samp{g77} is the Info document name,
11624 @samp{M} is the top-level menu item to select,
11625 and, in that node (named @samp{Diagnostics}, the name of
11626 this chapter, which is the very text you're reading now),
11627 @samp{FOOEY} is the menu item to select.
11629 @iftex
11630 In this printed version of the @command{g77} manual, the above example
11631 points to a section, below, entitled @samp{FOOEY}---though, of course,
11632 as the above is just a sample, no such section exists.
11633 @end iftex
11635 @menu
11636 * CMPAMBIG::    Ambiguous use of intrinsic.
11637 * EXPIMP::      Intrinsic used explicitly and implicitly.
11638 * INTGLOB::     Intrinsic also used as name of global.
11639 * LEX::         Various lexer messages
11640 * GLOBALS::     Disagreements about globals.
11641 * LINKFAIL::    When linking @code{f771} fails.
11642 * Y2KBAD::      Use of non-Y2K-compliant intrinsic.
11643 @end menu
11645 @node CMPAMBIG
11646 @section @code{CMPAMBIG}
11648 @noindent
11649 @smallexample
11650 Ambiguous use of intrinsic @var{intrinsic} @dots{}
11651 @end smallexample
11653 The type of the argument to the invocation of the @var{intrinsic}
11654 intrinsic is a @code{COMPLEX} type other than @code{COMPLEX(KIND=1)}.
11655 Typically, it is @code{COMPLEX(KIND=2)}, also known as
11656 @code{DOUBLE COMPLEX}.
11658 The interpretation of this invocation depends on the particular
11659 dialect of Fortran for which the code was written.
11660 Some dialects convert the real part of the argument to
11661 @code{REAL(KIND=1)}, thus losing precision; other dialects,
11662 and Fortran 90, do no such conversion.
11664 So, GNU Fortran rejects such invocations except under certain
11665 circumstances, to avoid making an incorrect assumption that results
11666 in generating the wrong code.
11668 To determine the dialect of the program unit, perhaps even whether
11669 that particular invocation is properly coded, determine how the
11670 result of the intrinsic is used.
11672 The result of @var{intrinsic} is expected (by the original programmer)
11673 to be @code{REAL(KIND=1)} (the non-Fortran-90 interpretation) if:
11675 @itemize @bullet
11676 @item
11677 It is passed as an argument to a procedure that explicitly or
11678 implicitly declares that argument @code{REAL(KIND=1)}.
11680 For example,
11681 a procedure with no @code{DOUBLE PRECISION} or @code{IMPLICIT DOUBLE PRECISION}
11682 statement specifying the dummy argument corresponding to an
11683 actual argument of @samp{REAL(Z)}, where @samp{Z} is declared
11684 @code{DOUBLE COMPLEX}, strongly suggests that the programmer
11685 expected @samp{REAL(Z)} to return @code{REAL(KIND=1)} instead
11686 of @code{REAL(KIND=2)}.
11688 @item
11689 It is used in a context that would otherwise not include
11690 any @code{REAL(KIND=2)} but where treating the @var{intrinsic}
11691 invocation as @code{REAL(KIND=2)} would result in unnecessary
11692 promotions and (typically) more expensive operations on the
11693 wider type.
11695 For example:
11697 @smallexample
11698 DOUBLE COMPLEX Z
11699 @dots{}
11700 R(1) = T * REAL(Z)
11701 @end smallexample
11703 The above example suggests the programmer expected the real part
11704 of @samp{Z} to be converted to @code{REAL(KIND=1)} before being
11705 multiplied by @samp{T} (presumed, along with @samp{R} above, to
11706 be type @code{REAL(KIND=1)}).
11708 Otherwise, the conversion would have to be delayed until after
11709 the multiplication, requiring not only an extra conversion
11710 (of @samp{T} to @code{REAL(KIND=2)}), but a (typically) more
11711 expensive multiplication (a double-precision multiplication instead
11712 of a single-precision one).
11713 @end itemize
11715 The result of @var{intrinsic} is expected (by the original programmer)
11716 to be @code{REAL(KIND=2)} (the Fortran 90 interpretation) if:
11718 @itemize @bullet
11719 @item
11720 It is passed as an argument to a procedure that explicitly or
11721 implicitly declares that argument @code{REAL(KIND=2)}.
11723 For example, a procedure specifying a @code{DOUBLE PRECISION}
11724 dummy argument corresponding to an
11725 actual argument of @samp{REAL(Z)}, where @samp{Z} is declared
11726 @code{DOUBLE COMPLEX}, strongly suggests that the programmer
11727 expected @samp{REAL(Z)} to return @code{REAL(KIND=2)} instead
11728 of @code{REAL(KIND=1)}.
11730 @item
11731 It is used in an expression context that includes
11732 other @code{REAL(KIND=2)} operands,
11733 or is assigned to a @code{REAL(KIND=2)} variable or array element.
11735 For example:
11737 @smallexample
11738 DOUBLE COMPLEX Z
11739 DOUBLE PRECISION R, T
11740 @dots{}
11741 R(1) = T * REAL(Z)
11742 @end smallexample
11744 The above example suggests the programmer expected the real part
11745 of @samp{Z} to @emph{not} be converted to @code{REAL(KIND=1)}
11746 by the @code{REAL()} intrinsic.
11748 Otherwise, the conversion would have to be immediately followed
11749 by a conversion back to @code{REAL(KIND=2)}, losing
11750 the original, full precision of the real part of @code{Z},
11751 before being multiplied by @samp{T}.
11752 @end itemize
11754 Once you have determined whether a particular invocation of @var{intrinsic}
11755 expects the Fortran 90 interpretation, you can:
11757 @itemize @bullet
11758 @item
11759 Change it to @samp{DBLE(@var{expr})} (if @var{intrinsic} is
11760 @code{REAL}) or @samp{DIMAG(@var{expr})} (if @var{intrinsic}
11761 is @code{AIMAG})
11762 if it expected the Fortran 90 interpretation.
11764 This assumes @var{expr} is @code{COMPLEX(KIND=2)}---if it is
11765 some other type, such as @code{COMPLEX*32}, you should use the
11766 appropriate intrinsic, such as the one to convert to @code{REAL*16}
11767 (perhaps @code{DBLEQ()} in place of @code{DBLE()}, and
11768 @code{QIMAG()} in place of @code{DIMAG()}).
11770 @item
11771 Change it to @samp{REAL(@var{intrinsic}(@var{expr}))},
11772 otherwise.
11773 This converts to @code{REAL(KIND=1)} in all working
11774 Fortran compilers.
11775 @end itemize
11777 If you don't want to change the code, and you are certain that all
11778 ambiguous invocations of @var{intrinsic} in the source file have
11779 the same expectation regarding interpretation, you can:
11781 @itemize @bullet
11782 @item
11783 Compile with the @command{g77} option @option{-ff90}, to enable the
11784 Fortran 90 interpretation.
11786 @item
11787 Compile with the @command{g77} options @samp{-fno-f90 -fugly-complex},
11788 to enable the non-Fortran-90 interpretations.
11789 @end itemize
11791 @xref{REAL() and AIMAG() of Complex}, for more information on this
11792 issue.
11794 Note: If the above suggestions don't produce enough evidence
11795 as to whether a particular program expects the Fortran 90
11796 interpretation of this ambiguous invocation of @var{intrinsic},
11797 there is one more thing you can try.
11799 If you have access to most or all the compilers used on the
11800 program to create successfully tested and deployed executables,
11801 read the documentation for, and @emph{also} test out, each compiler
11802 to determine how it treats the @var{intrinsic} intrinsic in
11803 this case.
11804 (If all the compilers don't agree on an interpretation, there
11805 might be lurking bugs in the deployed versions of the program.)
11807 The following sample program might help:
11809 @cindex JCB003 program
11810 @smallexample
11811       PROGRAM JCB003
11813 C Written by James Craig Burley 1997-02-23.
11815 C Determine how compilers handle non-standard REAL
11816 C and AIMAG on DOUBLE COMPLEX operands.
11818       DOUBLE COMPLEX Z
11819       REAL R
11820       Z = (3.3D0, 4.4D0)
11821       R = Z
11822       CALL DUMDUM(Z, R)
11823       R = REAL(Z) - R
11824       IF (R .NE. 0.) PRINT *, 'REAL() is Fortran 90'
11825       IF (R .EQ. 0.) PRINT *, 'REAL() is not Fortran 90'
11826       R = 4.4D0
11827       CALL DUMDUM(Z, R)
11828       R = AIMAG(Z) - R
11829       IF (R .NE. 0.) PRINT *, 'AIMAG() is Fortran 90'
11830       IF (R .EQ. 0.) PRINT *, 'AIMAG() is not Fortran 90'
11831       END
11833 C Just to make sure compiler doesn't use naive flow
11834 C analysis to optimize away careful work above,
11835 C which might invalidate results....
11837       SUBROUTINE DUMDUM(Z, R)
11838       DOUBLE COMPLEX Z
11839       REAL R
11840       END
11841 @end smallexample
11843 If the above program prints contradictory results on a
11844 particular compiler, run away!
11846 @node EXPIMP
11847 @section @code{EXPIMP}
11849 @noindent
11850 @smallexample
11851 Intrinsic @var{intrinsic} referenced @dots{}
11852 @end smallexample
11854 The @var{intrinsic} is explicitly declared in one program
11855 unit in the source file and implicitly used as an intrinsic
11856 in another program unit in the same source file.
11858 This diagnostic is designed to catch cases where a program
11859 might depend on using the name @var{intrinsic} as an intrinsic
11860 in one program unit and as a global name (such as the name
11861 of a subroutine or function) in another, but @command{g77} recognizes
11862 the name as an intrinsic in both cases.
11864 After verifying that the program unit making implicit use
11865 of the intrinsic is indeed written expecting the intrinsic,
11866 add an @samp{INTRINSIC @var{intrinsic}} statement to that
11867 program unit to prevent this warning.
11869 This and related warnings are disabled by using
11870 the @option{-Wno-globals} option when compiling.
11872 Note that this warning is not issued for standard intrinsics.
11873 Standard intrinsics include those described in the FORTRAN 77
11874 standard and, if @option{-ff90} is specified, those described
11875 in the Fortran 90 standard.
11876 Such intrinsics are not as likely to be confused with user
11877 procedures as intrinsics provided as extensions to the
11878 standard by @command{g77}.
11880 @node INTGLOB
11881 @section @code{INTGLOB}
11883 @noindent
11884 @smallexample
11885 Same name `@var{intrinsic}' given @dots{}
11886 @end smallexample
11888 The name @var{intrinsic} is used for a global entity (a common
11889 block or a program unit) in one program unit and implicitly
11890 used as an intrinsic in another program unit.
11892 This diagnostic is designed to catch cases where a program
11893 intends to use a name entirely as a global name, but @command{g77}
11894 recognizes the name as an intrinsic in the program unit that
11895 references the name, a situation that would likely produce
11896 incorrect code.
11898 For example:
11900 @smallexample
11901 INTEGER FUNCTION TIME()
11902 @dots{}
11904 @dots{}
11905 PROGRAM SAMP
11906 INTEGER TIME
11907 PRINT *, 'Time is ', TIME()
11909 @end smallexample
11911 The above example defines a program unit named @samp{TIME}, but
11912 the reference to @samp{TIME} in the main program unit @samp{SAMP}
11913 is normally treated by @command{g77} as a reference to the intrinsic
11914 @code{TIME()} (unless a command-line option that prevents such
11915 treatment has been specified).
11917 As a result, the program @samp{SAMP} will @emph{not}
11918 invoke the @samp{TIME} function in the same source file.
11920 Since @command{g77} recognizes @code{libU77} procedures as
11921 intrinsics, and since some existing code uses the same names
11922 for its own procedures as used by some @code{libU77}
11923 procedures, this situation is expected to arise often enough
11924 to make this sort of warning worth issuing.
11926 After verifying that the program unit making implicit use
11927 of the intrinsic is indeed written expecting the intrinsic,
11928 add an @samp{INTRINSIC @var{intrinsic}} statement to that
11929 program unit to prevent this warning.
11931 Or, if you believe the program unit is designed to invoke the
11932 program-defined procedure instead of the intrinsic (as
11933 recognized by @command{g77}), add an @samp{EXTERNAL @var{intrinsic}}
11934 statement to the program unit that references the name to
11935 prevent this warning.
11937 This and related warnings are disabled by using
11938 the @option{-Wno-globals} option when compiling.
11940 Note that this warning is not issued for standard intrinsics.
11941 Standard intrinsics include those described in the FORTRAN 77
11942 standard and, if @option{-ff90} is specified, those described
11943 in the Fortran 90 standard.
11944 Such intrinsics are not as likely to be confused with user
11945 procedures as intrinsics provided as extensions to the
11946 standard by @command{g77}.
11948 @node LEX
11949 @section @code{LEX}
11951 @noindent
11952 @smallexample
11953 Unrecognized character @dots{}
11954 Invalid first character @dots{}
11955 Line too long @dots{}
11956 Non-numeric character @dots{}
11957 Continuation indicator @dots{}
11958 Label at @dots{} invalid with continuation line indicator @dots{}
11959 Character constant @dots{}
11960 Continuation line @dots{}
11961 Statement at @dots{} begins with invalid token
11962 @end smallexample
11964 Although the diagnostics identify specific problems, they can
11965 be produced when general problems such as the following occur:
11967 @itemize @bullet
11968 @item
11969 The source file contains something other than Fortran code.
11971 If the code in the file does not look like many of the examples
11972 elsewhere in this document, it might not be Fortran code.
11973 (Note that Fortran code often is written in lower case letters,
11974 while the examples in this document use upper case letters,
11975 for stylistic reasons.)
11977 For example, if the file contains lots of strange-looking
11978 characters, it might be APL source code; if it contains lots
11979 of parentheses, it might be Lisp source code; if it
11980 contains lots of bugs, it might be C++ source code.
11982 @item
11983 The source file contains free-form Fortran code, but @option{-ffree-form}
11984 was not specified on the command line to compile it.
11986 Free form is a newer form for Fortran code.
11987 The older, classic form is called fixed form.
11989 @cindex continuation character
11990 @cindex characters, continuation
11991 Fixed-form code is visually fairly distinctive, because
11992 numerical labels and comments are all that appear in
11993 the first five columns of a line, the sixth column is
11994 reserved to denote continuation lines,
11995 and actual statements start at or beyond column 7.
11996 Spaces generally are not significant, so if you
11997 see statements such as @samp{REALX,Y} and @samp{DO10I=1,100},
11998 you are looking at fixed-form code.
11999 @cindex *
12000 @cindex asterisk
12001 Comment lines are indicated by the letter @samp{C} or the symbol
12002 @samp{*} in column 1.
12003 @cindex trailing comment
12004 @cindex comment
12005 @cindex characters, comment
12006 @cindex !
12007 @cindex exclamation point
12008 (Some code uses @samp{!} or @samp{/*} to begin in-line comments,
12009 which many compilers support.)
12011 Free-form code is distinguished from fixed-form source
12012 primarily by the fact that statements may start anywhere.
12013 (If lots of statements start in columns 1 through 6,
12014 that's a strong indicator of free-form source.)
12015 Consecutive keywords must be separated by spaces, so
12016 @samp{REALX,Y} is not valid, while @samp{REAL X,Y} is.
12017 There are no comment lines per se, but @samp{!} starts a
12018 comment anywhere in a line (other than within a character or
12019 Hollerith constant).
12021 @xref{Source Form}, for more information.
12023 @item
12024 The source file is in fixed form and has been edited without
12025 sensitivity to the column requirements.
12027 Statements in fixed-form code must be entirely contained within
12028 columns 7 through 72 on a given line.
12029 Starting them ``early'' is more likely to result in diagnostics
12030 than finishing them ``late'', though both kinds of errors are
12031 often caught at compile time.
12033 For example, if the following code fragment is edited by following
12034 the commented instructions literally, the result, shown afterward,
12035 would produce a diagnostic when compiled:
12037 @smallexample
12038 C On XYZZY systems, remove "C" on next line:
12039 C     CALL XYZZY_RESET
12040 @end smallexample
12042 The result of editing the above line might be:
12044 @smallexample
12045 C On XYZZY systems, remove "C" on next line:
12046      CALL XYZZY_RESET
12047 @end smallexample
12049 However, that leaves the first @samp{C} in the @code{CALL}
12050 statement in column 6, making it a comment line, which is
12051 not really what the author intended, and which is likely
12052 to result in one of the above-listed diagnostics.
12054 @emph{Replacing} the @samp{C} in column 1 with a space
12055 is the proper change to make, to ensure the @code{CALL}
12056 keyword starts in or after column 7.
12058 Another common mistake like this is to forget that fixed-form
12059 source lines are significant through only column 72, and that,
12060 normally, any text beyond column 72 is ignored or is diagnosed
12061 at compile time.
12063 @xref{Source Form}, for more information.
12065 @item
12066 The source file requires preprocessing, and the preprocessing
12067 is not being specified at compile time.
12069 A source file containing lines beginning with @code{#define},
12070 @code{#include}, @code{#if}, and so on is likely one that
12071 requires preprocessing.
12073 If the file's suffix is @samp{.f}, @samp{.for}, or @samp{.FOR},
12074 the file normally will be compiled @emph{without} preprocessing
12075 by @command{g77}.
12077 Change the file's suffix from @samp{.f} to @samp{.F}
12078 (or, on systems with case-insensitive file names,
12079 to @samp{.fpp} or @samp{.FPP}),
12080 from @samp{.for} to @samp{.fpp},
12081 or from @samp{.FOR} to @samp{.FPP}.
12082 @command{g77} compiles files with such names @emph{with}
12083 preprocessing.
12085 @pindex cpp
12086 @cindex preprocessor
12087 @cindex cpp program
12088 @cindex programs, cpp
12089 @cindex @option{-x f77-cpp-input} option
12090 @cindex options, @option{-x f77-cpp-input}
12091 Or, learn how to use @command{gcc}'s @option{-x} option to specify
12092 the language @samp{f77-cpp-input} for Fortran files that
12093 require preprocessing.
12094 @xref{Overall Options,,Options Controlling the Kind of
12095 Output,gcc,Using the GNU Compiler Collection (GCC)}.
12097 @item
12098 The source file is preprocessed, and the results of preprocessing
12099 result in syntactic errors that are not necessarily obvious to
12100 someone examining the source file itself.
12102 Examples of errors resulting from preprocessor macro expansion
12103 include exceeding the line-length limit, improperly starting,
12104 terminating, or incorporating the apostrophe or double-quote in
12105 a character constant, improperly forming a Hollerith constant,
12106 and so on.
12108 @xref{Overall Options,,Options Controlling the Kind of Output},
12109 for suggestions about how to use, and not use, preprocessing
12110 for Fortran code.
12111 @end itemize
12113 @node GLOBALS
12114 @section @code{GLOBALS}
12116 @noindent
12117 @smallexample
12118 Global name @var{name} defined at @dots{} already defined@dots{}
12119 Global name @var{name} at @dots{} has different type@dots{}
12120 Too many arguments passed to @var{name} at @dots{}
12121 Too few arguments passed to @var{name} at @dots{}
12122 Argument #@var{n} of @var{name} is @dots{}
12123 @end smallexample
12125 These messages all identify disagreements about the
12126 global procedure named @var{name} among different program units
12127 (usually including @var{name} itself).
12129 Whether a particular disagreement is reported
12130 as a warning or an error
12131 can depend on the relative order
12132 of the disagreeing portions of the source file.
12134 Disagreements between a procedure invocation
12135 and the @emph{subsequent} procedure itself
12136 are, usually, diagnosed as errors
12137 when the procedure itself @emph{precedes} the invocation.
12138 Other disagreements are diagnosed via warnings.
12140 @cindex forward references
12141 @cindex in-line code
12142 @cindex compilation, in-line
12143 This distinction, between warnings and errors,
12144 is due primarily to the present tendency of the @command{gcc} back end
12145 to inline only those procedure invocations that are
12146 @emph{preceded} by the corresponding procedure definitions.
12147 If the @command{gcc} back end is changed
12148 to inline ``forward references'',
12149 in which invocations precede definitions,
12150 the @command{g77} front end will be changed
12151 to treat both orderings as errors, accordingly.
12153 The sorts of disagreements that are diagnosed by @command{g77} include
12154 whether a procedure is a subroutine or function;
12155 if it is a function, the type of the return value of the procedure;
12156 the number of arguments the procedure accepts;
12157 and the type of each argument.
12159 Disagreements regarding global names among program units
12160 in a Fortran program @emph{should} be fixed in the code itself.
12161 However, if that is not immediately practical,
12162 and the code has been working for some time,
12163 it is possible it will work
12164 when compiled with the @option{-fno-globals} option.
12166 The @option{-fno-globals} option
12167 causes these diagnostics to all be warnings
12168 and disables all inlining of references to global procedures
12169 (to avoid subsequent compiler crashes and bad-code generation).
12170 Use of the @option{-Wno-globals} option as well as @option{-fno-globals}
12171 suppresses all of these diagnostics.
12172 (@option{-Wno-globals} by itself disables only the warnings,
12173 not the errors.)
12175 After using @option{-fno-globals} to work around these problems,
12176 it is wise to stop using that option and address them by fixing
12177 the Fortran code, because such problems, while they might not
12178 actually result in bugs on some systems, indicate that the code
12179 is not as portable as it could be.
12180 In particular, the code might appear to work on a particular
12181 system, but have bugs that affect the reliability of the data
12182 without exhibiting any other outward manifestations of the bugs.
12184 @node LINKFAIL
12185 @section @code{LINKFAIL}
12187 @noindent
12188 On AIX 4.1, @command{g77} might not build with the native (non-GNU) tools
12189 due to a linker bug in coping with the @option{-bbigtoc} option which
12190 leads to a @samp{Relocation overflow} error.  The GNU linker is not
12191 recommended on current AIX versions, though; it was developed under a
12192 now-unsupported version.  This bug is said to be fixed by `update PTF
12193 U455193 for APAR IX75823'.
12195 Compiling with @option{-mminimal-toc}
12196 might solve this problem, e.g.@: by adding
12197 @smallexample
12198 BOOT_CFLAGS='-mminimal-toc -O2 -g'
12199 @end smallexample
12200 to the @code{make bootstrap} command line.
12202 @node Y2KBAD
12203 @section @code{Y2KBAD}
12204 @cindex Y2K compliance
12205 @cindex Year 2000 compliance
12207 @noindent
12208 @smallexample
12209 Intrinsic `@var{name}', invoked at (^), known to be non-Y2K-compliant@dots{}
12210 @end smallexample
12212 This diagnostic indicates that
12213 the specific intrinsic invoked by the name @var{name}
12214 is known to have an interface
12215 that is not Year-2000 (Y2K) compliant.
12217 @xref{Year 2000 (Y2K) Problems}.
12219 @end ifset
12221 @node Keyword Index
12222 @unnumbered Keyword Index
12224 @printindex cp
12225 @bye