home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / g77doc.zip / g77.info (.txt) < prev    next >
GNU Info File  |  1998-04-01  |  991KB  |  19,219 lines

  1. This is Info file g77.info, produced by Makeinfo version 1.68 from the
  2. input file g77.tex.
  3.    This file explains how to use the GNU Fortran system.
  4.    Published by the Free Software Foundation 59 Temple Place - Suite 330
  5. Boston, MA 02111-1307 USA
  6.    Copyright (C) 1995-1997 Free Software Foundation, Inc.
  7.    Permission is granted to make and distribute verbatim copies of this
  8. manual provided the copyright notice and this permission notice are
  9. preserved on all copies.
  10.    Permission is granted to copy and distribute modified versions of
  11. this manual under the conditions for verbatim copying, provided also
  12. that the sections entitled "GNU General Public License," "Funding for
  13. Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
  14. included exactly as in the original, and provided that the entire
  15. resulting derived work is distributed under the terms of a permission
  16. notice identical to this one.
  17.    Permission is granted to copy and distribute translations of this
  18. manual into another language, under the above conditions for modified
  19. versions, except that the sections entitled "GNU General Public
  20. License," "Funding for Free Software," and "Protect Your Freedom--Fight
  21. `Look And Feel'", and this permission notice, may be included in
  22. translations approved by the Free Software Foundation instead of in the
  23. original English.
  24.    Contributed by James Craig Burley (<burley@gnu.org>).  Inspired by a
  25. first pass at translating `g77-0.5.16/f/DOC' that was contributed to
  26. Craig by David Ronis (<ronis@onsager.chem.mcgill.ca>).
  27. INFO-DIR-SECTION Fortran Programming
  28. START-INFO-DIR-ENTRY
  29. * g77: (g77).               The GNU Fortran compilation system.
  30. END-INFO-DIR-ENTRY
  31. File: g77.info,  Node: Top,  Next: Copying,  Up: (DIR)
  32. Introduction
  33. ************
  34.    This manual documents how to run, install and port the GNU Fortran
  35. compiler, as well as its new features and incompatibilities, and how to
  36. report bugs.  It corresponds to GNU Fortran version 0.5.21.
  37. * Menu:
  38. * Copying::         GNU General Public License says
  39.                     how you can copy and share GNU Fortran.
  40. * Contributors::    People who have contributed to GNU Fortran.
  41. * Funding::         How to help assure continued work for free software.
  42. * Funding GNU Fortran::  How to help assure continued work on GNU Fortran.
  43. * Look and Feel::   Protect your freedom--fight "look and feel".
  44. * Getting Started:: Finding your way around this manual.
  45. * What is GNU Fortran?::  How `g77' fits into the universe.
  46. * G77 and GCC::     You can compile Fortran, C, or other programs.
  47. * Invoking G77::    Command options supported by `g77'.
  48. * News::            News about recent releases of `g77'.
  49. * Changes::         User-visible changes to recent releases of `g77'.
  50. * Language::        The GNU Fortran language.
  51. * Compiler::        The GNU Fortran compiler.
  52. * Other Dialects::  Dialects of Fortran supported by `g77'.
  53. * Other Compilers:: Fortran compilers other than `g77'.
  54. * Other Languages:: Languages other than Fortran.
  55. * Installation::    How to configure, compile and install GNU Fortran.
  56. * Debugging and Interfacing::  How `g77' generates code.
  57. * Collected Fortran Wisdom::  How to avoid Trouble.
  58. * Trouble::         If you have trouble with GNU Fortran.
  59. * Open Questions::  Things we'd like to know.
  60. * Bugs::            How, why, and where to report bugs.
  61. * Service::         How to find suppliers of support for GNU Fortran.
  62. * Adding Options::  Guidance on teaching `g77' about new options.
  63. * Projects::        Projects for `g77' internals hackers.
  64. * M: Diagnostics.   Diagnostics produced by `g77'.
  65. * Index::           Index of concepts and symbol names.
  66. File: g77.info,  Node: Copying,  Next: Contributors,  Prev: Top,  Up: Top
  67. GNU GENERAL PUBLIC LICENSE
  68. **************************
  69.                          Version 2, June 1991
  70.      Copyright (C) 1989, 1991 Free Software Foundation, Inc.
  71.      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
  72.      
  73.      Everyone is permitted to copy and distribute verbatim copies
  74.      of this license document, but changing it is not allowed.
  75. Preamble
  76. ========
  77.    The licenses for most software are designed to take away your
  78. freedom to share and change it.  By contrast, the GNU General Public
  79. License is intended to guarantee your freedom to share and change free
  80. software--to make sure the software is free for all its users.  This
  81. General Public License applies to most of the Free Software
  82. Foundation's software and to any other program whose authors commit to
  83. using it.  (Some other Free Software Foundation software is covered by
  84. the GNU Library General Public License instead.)  You can apply it to
  85. your programs, too.
  86.    When we speak of free software, we are referring to freedom, not
  87. price.  Our General Public Licenses are designed to make sure that you
  88. have the freedom to distribute copies of free software (and charge for
  89. this service if you wish), that you receive source code or can get it
  90. if you want it, that you can change the software or use pieces of it in
  91. new free programs; and that you know you can do these things.
  92.    To protect your rights, we need to make restrictions that forbid
  93. anyone to deny you these rights or to ask you to surrender the rights.
  94. These restrictions translate to certain responsibilities for you if you
  95. distribute copies of the software, or if you modify it.
  96.    For example, if you distribute copies of such a program, whether
  97. gratis or for a fee, you must give the recipients all the rights that
  98. you have.  You must make sure that they, too, receive or can get the
  99. source code.  And you must show them these terms so they know their
  100. rights.
  101.    We protect your rights with two steps: (1) copyright the software,
  102. and (2) offer you this license which gives you legal permission to copy,
  103. distribute and/or modify the software.
  104.    Also, for each author's protection and ours, we want to make certain
  105. that everyone understands that there is no warranty for this free
  106. software.  If the software is modified by someone else and passed on, we
  107. want its recipients to know that what they have is not the original, so
  108. that any problems introduced by others will not reflect on the original
  109. authors' reputations.
  110.    Finally, any free program is threatened constantly by software
  111. patents.  We wish to avoid the danger that redistributors of a free
  112. program will individually obtain patent licenses, in effect making the
  113. program proprietary.  To prevent this, we have made it clear that any
  114. patent must be licensed for everyone's free use or not licensed at all.
  115.    The precise terms and conditions for copying, distribution and
  116. modification follow.
  117.     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  118.   0. This License applies to any program or other work which contains a
  119.      notice placed by the copyright holder saying it may be distributed
  120.      under the terms of this General Public License.  The "Program",
  121.      below, refers to any such program or work, and a "work based on
  122.      the Program" means either the Program or any derivative work under
  123.      copyright law: that is to say, a work containing the Program or a
  124.      portion of it, either verbatim or with modifications and/or
  125.      translated into another language.  (Hereinafter, translation is
  126.      included without limitation in the term "modification".)  Each
  127.      licensee is addressed as "you".
  128.      Activities other than copying, distribution and modification are
  129.      not covered by this License; they are outside its scope.  The act
  130.      of running the Program is not restricted, and the output from the
  131.      Program is covered only if its contents constitute a work based on
  132.      the Program (independent of having been made by running the
  133.      Program).  Whether that is true depends on what the Program does.
  134.   1. You may copy and distribute verbatim copies of the Program's
  135.      source code as you receive it, in any medium, provided that you
  136.      conspicuously and appropriately publish on each copy an appropriate
  137.      copyright notice and disclaimer of warranty; keep intact all the
  138.      notices that refer to this License and to the absence of any
  139.      warranty; and give any other recipients of the Program a copy of
  140.      this License along with the Program.
  141.      You may charge a fee for the physical act of transferring a copy,
  142.      and you may at your option offer warranty protection in exchange
  143.      for a fee.
  144.   2. You may modify your copy or copies of the Program or any portion
  145.      of it, thus forming a work based on the Program, and copy and
  146.      distribute such modifications or work under the terms of Section 1
  147.      above, provided that you also meet all of these conditions:
  148.        a. You must cause the modified files to carry prominent notices
  149.           stating that you changed the files and the date of any change.
  150.        b. You must cause any work that you distribute or publish, that
  151.           in whole or in part contains or is derived from the Program
  152.           or any part thereof, to be licensed as a whole at no charge
  153.           to all third parties under the terms of this License.
  154.        c. If the modified program normally reads commands interactively
  155.           when run, you must cause it, when started running for such
  156.           interactive use in the most ordinary way, to print or display
  157.           an announcement including an appropriate copyright notice and
  158.           a notice that there is no warranty (or else, saying that you
  159.           provide a warranty) and that users may redistribute the
  160.           program under these conditions, and telling the user how to
  161.           view a copy of this License.  (Exception: if the Program
  162.           itself is interactive but does not normally print such an
  163.           announcement, your work based on the Program is not required
  164.           to print an announcement.)
  165.      These requirements apply to the modified work as a whole.  If
  166.      identifiable sections of that work are not derived from the
  167.      Program, and can be reasonably considered independent and separate
  168.      works in themselves, then this License, and its terms, do not
  169.      apply to those sections when you distribute them as separate
  170.      works.  But when you distribute the same sections as part of a
  171.      whole which is a work based on the Program, the distribution of
  172.      the whole must be on the terms of this License, whose permissions
  173.      for other licensees extend to the entire whole, and thus to each
  174.      and every part regardless of who wrote it.
  175.      Thus, it is not the intent of this section to claim rights or
  176.      contest your rights to work written entirely by you; rather, the
  177.      intent is to exercise the right to control the distribution of
  178.      derivative or collective works based on the Program.
  179.      In addition, mere aggregation of another work not based on the
  180.      Program with the Program (or with a work based on the Program) on
  181.      a volume of a storage or distribution medium does not bring the
  182.      other work under the scope of this License.
  183.   3. You may copy and distribute the Program (or a work based on it,
  184.      under Section 2) in object code or executable form under the terms
  185.      of Sections 1 and 2 above provided that you also do one of the
  186.      following:
  187.        a. Accompany it with the complete corresponding machine-readable
  188.           source code, which must be distributed under the terms of
  189.           Sections 1 and 2 above on a medium customarily used for
  190.           software interchange; or,
  191.        b. Accompany it with a written offer, valid for at least three
  192.           years, to give any third party, for a charge no more than your
  193.           cost of physically performing source distribution, a complete
  194.           machine-readable copy of the corresponding source code, to be
  195.           distributed under the terms of Sections 1 and 2 above on a
  196.           medium customarily used for software interchange; or,
  197.        c. Accompany it with the information you received as to the offer
  198.           to distribute corresponding source code.  (This alternative is
  199.           allowed only for noncommercial distribution and only if you
  200.           received the program in object code or executable form with
  201.           such an offer, in accord with Subsection b above.)
  202.      The source code for a work means the preferred form of the work for
  203.      making modifications to it.  For an executable work, complete
  204.      source code means all the source code for all modules it contains,
  205.      plus any associated interface definition files, plus the scripts
  206.      used to control compilation and installation of the executable.
  207.      However, as a special exception, the source code distributed need
  208.      not include anything that is normally distributed (in either
  209.      source or binary form) with the major components (compiler,
  210.      kernel, and so on) of the operating system on which the executable
  211.      runs, unless that component itself accompanies the executable.
  212.      If distribution of executable or object code is made by offering
  213.      access to copy from a designated place, then offering equivalent
  214.      access to copy the source code from the same place counts as
  215.      distribution of the source code, even though third parties are not
  216.      compelled to copy the source along with the object code.
  217.   4. You may not copy, modify, sublicense, or distribute the Program
  218.      except as expressly provided under this License.  Any attempt
  219.      otherwise to copy, modify, sublicense or distribute the Program is
  220.      void, and will automatically terminate your rights under this
  221.      License.  However, parties who have received copies, or rights,
  222.      from you under this License will not have their licenses
  223.      terminated so long as such parties remain in full compliance.
  224.   5. You are not required to accept this License, since you have not
  225.      signed it.  However, nothing else grants you permission to modify
  226.      or distribute the Program or its derivative works.  These actions
  227.      are prohibited by law if you do not accept this License.
  228.      Therefore, by modifying or distributing the Program (or any work
  229.      based on the Program), you indicate your acceptance of this
  230.      License to do so, and all its terms and conditions for copying,
  231.      distributing or modifying the Program or works based on it.
  232.   6. Each time you redistribute the Program (or any work based on the
  233.      Program), the recipient automatically receives a license from the
  234.      original licensor to copy, distribute or modify the Program
  235.      subject to these terms and conditions.  You may not impose any
  236.      further restrictions on the recipients' exercise of the rights
  237.      granted herein.  You are not responsible for enforcing compliance
  238.      by third parties to this License.
  239.   7. If, as a consequence of a court judgment or allegation of patent
  240.      infringement or for any other reason (not limited to patent
  241.      issues), conditions are imposed on you (whether by court order,
  242.      agreement or otherwise) that contradict the conditions of this
  243.      License, they do not excuse you from the conditions of this
  244.      License.  If you cannot distribute so as to satisfy simultaneously
  245.      your obligations under this License and any other pertinent
  246.      obligations, then as a consequence you may not distribute the
  247.      Program at all.  For example, if a patent license would not permit
  248.      royalty-free redistribution of the Program by all those who
  249.      receive copies directly or indirectly through you, then the only
  250.      way you could satisfy both it and this License would be to refrain
  251.      entirely from distribution of the Program.
  252.      If any portion of this section is held invalid or unenforceable
  253.      under any particular circumstance, the balance of the section is
  254.      intended to apply and the section as a whole is intended to apply
  255.      in other circumstances.
  256.      It is not the purpose of this section to induce you to infringe any
  257.      patents or other property right claims or to contest validity of
  258.      any such claims; this section has the sole purpose of protecting
  259.      the integrity of the free software distribution system, which is
  260.      implemented by public license practices.  Many people have made
  261.      generous contributions to the wide range of software distributed
  262.      through that system in reliance on consistent application of that
  263.      system; it is up to the author/donor to decide if he or she is
  264.      willing to distribute software through any other system and a
  265.      licensee cannot impose that choice.
  266.      This section is intended to make thoroughly clear what is believed
  267.      to be a consequence of the rest of this License.
  268.   8. If the distribution and/or use of the Program is restricted in
  269.      certain countries either by patents or by copyrighted interfaces,
  270.      the original copyright holder who places the Program under this
  271.      License may add an explicit geographical distribution limitation
  272.      excluding those countries, so that distribution is permitted only
  273.      in or among countries not thus excluded.  In such case, this
  274.      License incorporates the limitation as if written in the body of
  275.      this License.
  276.   9. The Free Software Foundation may publish revised and/or new
  277.      versions of the General Public License from time to time.  Such
  278.      new versions will be similar in spirit to the present version, but
  279.      may differ in detail to address new problems or concerns.
  280.      Each version is given a distinguishing version number.  If the
  281.      Program specifies a version number of this License which applies
  282.      to it and "any later version", you have the option of following
  283.      the terms and conditions either of that version or of any later
  284.      version published by the Free Software Foundation.  If the Program
  285.      does not specify a version number of this License, you may choose
  286.      any version ever published by the Free Software Foundation.
  287.  10. If you wish to incorporate parts of the Program into other free
  288.      programs whose distribution conditions are different, write to the
  289.      author to ask for permission.  For software which is copyrighted
  290.      by the Free Software Foundation, write to the Free Software
  291.      Foundation; we sometimes make exceptions for this.  Our decision
  292.      will be guided by the two goals of preserving the free status of
  293.      all derivatives of our free software and of promoting the sharing
  294.      and reuse of software generally.
  295.                                 NO WARRANTY
  296.  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
  297.      WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
  298.      LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
  299.      HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
  300.      WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
  301.      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  302.      FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
  303.      QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  304.      PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
  305.      SERVICING, REPAIR OR CORRECTION.
  306.  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
  307.      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
  308.      MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
  309.      LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
  310.      INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
  311.      INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
  312.      DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
  313.      OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
  314.      OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
  315.      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  316.                       END OF TERMS AND CONDITIONS
  317. How to Apply These Terms to Your New Programs
  318. =============================================
  319.    If you develop a new program, and you want it to be of the greatest
  320. possible use to the public, the best way to achieve this is to make it
  321. free software which everyone can redistribute and change under these
  322. terms.
  323.    To do so, attach the following notices to the program.  It is safest
  324. to attach them to the start of each source file to most effectively
  325. convey the exclusion of warranty; and each file should have at least
  326. the "copyright" line and a pointer to where the full notice is found.
  327.      ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
  328.      Copyright (C) 19YY  NAME OF AUTHOR
  329.      
  330.      This program is free software; you can redistribute it and/or modify
  331.      it under the terms of the GNU General Public License as published by
  332.      the Free Software Foundation; either version 2 of the License, or
  333.      (at your option) any later version.
  334.      
  335.      This program is distributed in the hope that it will be useful,
  336.      but WITHOUT ANY WARRANTY; without even the implied warranty of
  337.      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  338.      GNU General Public License for more details.
  339.      
  340.      You should have received a copy of the GNU General Public License
  341.      along with this program; if not, write to the Free Software
  342.      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  343.    Also add information on how to contact you by electronic and paper
  344. mail.
  345.    If the program is interactive, make it output a short notice like
  346. this when it starts in an interactive mode:
  347.      Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
  348.      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
  349.      type `show w'.
  350.      This is free software, and you are welcome to redistribute it
  351.      under certain conditions; type `show c' for details.
  352.    The hypothetical commands `show w' and `show c' should show the
  353. appropriate parts of the General Public License.  Of course, the
  354. commands you use may be called something other than `show w' and `show
  355. c'; they could even be mouse-clicks or menu items--whatever suits your
  356. program.
  357.    You should also get your employer (if you work as a programmer) or
  358. your school, if any, to sign a "copyright disclaimer" for the program,
  359. if necessary.  Here is a sample; alter the names:
  360.      Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  361.      `Gnomovision' (which makes passes at compilers) written by James Hacker.
  362.      
  363.      SIGNATURE OF TY COON, 1 April 1989
  364.      Ty Coon, President of Vice
  365.    This General Public License does not permit incorporating your
  366. program into proprietary programs.  If your program is a subroutine
  367. library, you may consider it more useful to permit linking proprietary
  368. applications with the library.  If this is what you want to do, use the
  369. GNU Library General Public License instead of this License.
  370. File: g77.info,  Node: Contributors,  Next: Funding,  Prev: Copying,  Up: Top
  371. Contributors to GNU Fortran
  372. ***************************
  373.    In addition to James Craig Burley, who wrote the front end, many
  374. people have helped create and improve GNU Fortran.
  375.    * The packaging and compiler portions of GNU Fortran are based
  376.      largely on the GNU CC compiler.  *Note Contributors to GNU CC:
  377.      (gcc)Contributors, for more information.
  378.    * The run-time library used by GNU Fortran is a repackaged version
  379.      of the `libf2c' library (combined from the `libF77' and `libI77'
  380.      libraries) provided as part of `f2c', available for free from
  381.      `netlib' sites on the Internet.
  382.    * Cygnus Support and The Free Software Foundation contributed
  383.      significant money and/or equipment to Craig's efforts.
  384.    * The following individuals served as alpha testers prior to `g77''s
  385.      public release.  This work consisted of testing, researching,
  386.      sometimes debugging, and occasionally providing small amounts of
  387.      code and fixes for `g77', plus offering plenty of helpful advice
  388.      to Craig:
  389.           Jonathan Corbet
  390.           Dr. Mark Fernyhough
  391.           Takafumi Hayashi (The University of
  392.           AIzu)--<takafumi@u-aizu.ac.jp>
  393.           Kate Hedstrom
  394.           Michel Kern (INRIA and Rice
  395.           University)--<Michel.Kern@inria.fr>
  396.           Dr. A. O. V. Le Blanc
  397.           Dave Love
  398.           Rick Lutowski
  399.           Toon Moene
  400.           Rick Niles
  401.           Derk Reefman
  402.           Wayne K. Schroll
  403.           Bill Thorson
  404.           Pedro A. M. Vazquez
  405.           Ian Watson
  406.    * Scott Snyder (<snyder@d0sgif.fnal.gov>) provided the patch to add
  407.      rudimentary support for `INTEGER*1', `INTEGER*2', and `LOGICAL*1'.
  408.      This inspired Craig to add further support, even though the
  409.      resulting support would still be incomplete, because version 0.6
  410.      is still a ways off.
  411.    * David Ronis (<ronis@onsager.chem.mcgill.ca>) inspired and
  412.      encouraged Craig to rewrite the documentation in texinfo format by
  413.      contributing a first pass at a translation of the old
  414.      `g77-0.5.16/f/DOC' file.
  415.    * Toon Moene (<toon@moene.indiv.nluug.nl>) performed some analysis
  416.      of generated code as part of an overall project to improve `g77'
  417.      code generation to at least be as good as `f2c' used in
  418.      conjunction with `gcc'.  So far, this has resulted in the three,
  419.      somewhat experimental, options added by `g77' to the `gcc'
  420.      compiler and its back end.
  421.    * John Carr (<jfc@mit.edu>) wrote the alias analysis improvements.
  422.    * Thanks to Mary Cortani and the staff at Craftwork Solutions
  423.      (<support@craftwork.com>) for all of their support.
  424.    * Many other individuals have helped debug, test, and improve `g77'
  425.      over the past several years, and undoubtedly more people will be
  426.      doing so in the future.  If you have done so, and would like to
  427.      see your name listed in the above list, please ask!  The default
  428.      is that people wish to remain anonymous.
  429. File: g77.info,  Node: Funding,  Next: Funding GNU Fortran,  Prev: Contributors,  Up: Top
  430. Funding Free Software
  431. *********************
  432.    If you want to have more free software a few years from now, it makes
  433. sense for you to help encourage people to contribute funds for its
  434. development.  The most effective approach known is to encourage
  435. commercial redistributors to donate.
  436.    Users of free software systems can boost the pace of development by
  437. encouraging for-a-fee distributors to donate part of their selling price
  438. to free software developers--the Free Software Foundation, and others.
  439.    The way to convince distributors to do this is to demand it and
  440. expect it from them.  So when you compare distributors, judge them
  441. partly by how much they give to free software development.  Show
  442. distributors they must compete to be the one who gives the most.
  443.    To make this approach work, you must insist on numbers that you can
  444. compare, such as, "We will donate ten dollars to the Frobnitz project
  445. for each disk sold."  Don't be satisfied with a vague promise, such as
  446. "A portion of the profits are donated," since it doesn't give a basis
  447. for comparison.
  448.    Even a precise fraction "of the profits from this disk" is not very
  449. meaningful, since creative accounting and unrelated business decisions
  450. can greatly alter what fraction of the sales price counts as profit.
  451. If the price you pay is $50, ten percent of the profit is probably less
  452. than a dollar; it might be a few cents, or nothing at all.
  453.    Some redistributors do development work themselves.  This is useful
  454. too; but to keep everyone honest, you need to inquire how much they do,
  455. and what kind.  Some kinds of development make much more long-term
  456. difference than others.  For example, maintaining a separate version of
  457. a program contributes very little; maintaining the standard version of a
  458. program for the whole community contributes much.  Easy new ports
  459. contribute little, since someone else would surely do them; difficult
  460. ports such as adding a new CPU to the GNU C compiler contribute more;
  461. major new features or packages contribute the most.
  462.    By establishing the idea that supporting further development is "the
  463. proper thing to do" when distributing free software for a fee, we can
  464. assure a steady flow of resources into making more free software.
  465.      Copyright (C) 1994 Free Software Foundation, Inc.
  466.      Verbatim copying and redistribution of this section is permitted
  467.      without royalty; alteration is not permitted.
  468. File: g77.info,  Node: Funding GNU Fortran,  Next: Look and Feel,  Prev: Funding,  Up: Top
  469. Funding GNU Fortran
  470. *******************
  471.    Work on GNU Fortran is still being done mostly by its author, James
  472. Craig Burley (<burley@gnu.org>), who is a volunteer for, not an
  473. employee of, the Free Software Foundation (FSF).  As with other GNU
  474. software, funding is important because it can pay for needed equipment,
  475. personnel, and so on.
  476.    The FSF provides information on the best way to fund ongoing
  477. development of GNU software (such as GNU Fortran) in documents such as
  478. the "GNUS Bulletin".  Email <gnu@prep.ai.mit.edu> for information on
  479. funding the FSF.
  480.    To fund specific GNU Fortran work in particular, the FSF might
  481. provide a means for that, but the FSF does not provide direct funding
  482. to the author of GNU Fortran to continue his work.  The FSF has
  483. employee salary restrictions that can be incompatible with the
  484. financial needs of some volunteers, who therefore choose to remain
  485. volunteers and thus be able to be free to do contract work and
  486. otherwise make their own schedules for doing GNU work.
  487.    Still, funding the FSF at least indirectly benefits work on specific
  488. projects like GNU Fortran because it ensures the continuing operation
  489. of the FSF offices, their workstations, their network connections, and
  490. so on, which are invaluable to volunteers.  (Similarly, hiring Cygnus
  491. Support can help a project like GNU Fortran--Cygnus has been a
  492. long-time donor of equipment usage to the author of GNU Fortran, and
  493. this too has been invaluable--*Note Contributors::.)
  494.    Currently, the only way to directly fund the author of GNU Fortran
  495. in his work on that project is to hire him for the work you want him to
  496. do, or donate money to him.  Several people have done this already,
  497. with the result that he has not needed to immediately find contract
  498. work on a few occasions.  If more people did this, he would be able to
  499. plan on not doing contract work for many months and could thus devote
  500. that time to work on projects (such as the planned changes for 0.6)
  501. that require longer timeframes to complete.  For the latest information
  502. on the status of the author, do `finger -l burley@gnu.org' on a UNIX
  503. system (or any system with a command like UNIX `finger').
  504.    Another important way to support work on GNU Fortran is to volunteer
  505. to help out.  Work is needed on documentation, testing, porting to
  506. various machines, and in some cases, coding (although major changes
  507. planned for version 0.6 make it difficult to add manpower to this area).
  508. Email <fortran@gnu.org> to volunteer for this work.
  509.    *Note Funding Free Software: Funding, for more information.
  510. File: g77.info,  Node: Look and Feel,  Next: Getting Started,  Prev: Funding GNU Fortran,  Up: Top
  511. Protect Your Freedom--Fight "Look And Feel"
  512. *******************************************
  513.    To preserve the ability to write free software, including
  514. replacements for proprietary software, authors must be free to
  515. replicate the user interface to which users of existing software have
  516. become accustomed.
  517.    *Note Protect Your Freedom--Fight "Look And Feel": (gcc)Look and
  518. Feel, for more information.
  519. File: g77.info,  Node: Getting Started,  Next: What is GNU Fortran?,  Prev: Look and Feel,  Up: Top
  520. Getting Started
  521. ***************
  522.    If you don't need help getting started reading the portions of this
  523. manual that are most important to you, you should skip this portion of
  524. the manual.
  525.    If you are new to compilers, especially Fortran compilers, or new to
  526. how compilers are structured under UNIX and UNIX-like systems, you'll
  527. want to see *Note What is GNU Fortran?::.
  528.    If you are new to GNU compilers, or have used only one GNU compiler
  529. in the past and not had to delve into how it lets you manage various
  530. versions and configurations of `gcc', you should see *Note G77 and
  531. GCC::.
  532.    Everyone except experienced `g77' users should see *Note Invoking
  533. G77::.
  534.    If you're acquainted with previous versions of `g77', you should see
  535. *Note News::.  Further, if you've actually used previous versions of
  536. `g77', especially if you've written or modified Fortran code to be
  537. compiled by previous versions of `g77', you should see *Note Changes::.
  538.    If you intend to write or otherwise compile code that is not already
  539. strictly conforming ANSI FORTRAN 77--and this is probably everyone--you
  540. should see *Note Language::.
  541.    If you don't already have `g77' installed on your system, you must
  542. see *Note Installation::.
  543.    If you run into trouble getting Fortran code to compile, link, run,
  544. or work properly, you might find answers if you see *Note Debugging and
  545. Interfacing::, see *Note Collected Fortran Wisdom::, and see *Note
  546. Trouble::.  You might also find that the problems you are encountering
  547. are bugs in `g77'--see *Note Bugs::, for information on reporting them,
  548. after reading the other material.
  549.    If you need further help with `g77', or with freely redistributable
  550. software in general, see *Note Service::.
  551.    If you would like to help the `g77' project, see *Note Funding GNU
  552. Fortran::, for information on helping financially, and see *Note
  553. Projects::, for information on helping in other ways.
  554.    If you're generally curious about the future of `g77', see *Note
  555. Projects::.  If you're curious about its past, see *Note Contributors::,
  556. and see *Note Funding GNU Fortran::.
  557.    To see a few of the questions maintainers of `g77' have, and that
  558. you might be able to answer, see *Note Open Questions::.
  559. File: g77.info,  Node: What is GNU Fortran?,  Next: G77 and GCC,  Prev: Getting Started,  Up: Top
  560. What is GNU Fortran?
  561. ********************
  562.    GNU Fortran, or `g77', is designed initially as a free replacement
  563. for, or alternative to, the UNIX `f77' command.  (Similarly, `gcc' is
  564. designed as a replacement for the UNIX `cc' command.)
  565.    `g77' also is designed to fit in well with the other fine GNU
  566. compilers and tools.
  567.    Sometimes these design goals conflict--in such cases, resolution
  568. often is made in favor of fitting in well with Project GNU.  These
  569. cases are usually identified in the appropriate sections of this manual.
  570.    As compilers, `g77', `gcc', and `f77' share the following
  571. characteristics:
  572.    * They read a user's program, stored in a file and containing
  573.      instructions written in the appropriate language (Fortran, C, and
  574.      so on).  This file contains "source code".
  575.    * They translate the user's program into instructions a computer can
  576.      carry out more quickly than it takes to translate the instructions
  577.      in the first place.  These instructions are called "machine
  578.      code"--code designed to be efficiently translated and processed by
  579.      a machine such as a computer.  Humans usually aren't as good
  580.      writing machine code as they are at writing Fortran or C, because
  581.      it is easy to make tiny mistakes writing machine code.  When
  582.      writing Fortran or C, it is easy to make big mistakes.
  583.    * They provide information in the generated machine code that can
  584.      make it easier to find bugs in the program (using a debugging
  585.      tool, called a "debugger", such as `gdb').
  586.    * They locate and gather machine code already generated to perform
  587.      actions requested by statements in the user's program.  This
  588.      machine code is organized into "libraries" and is located and
  589.      gathered during the "link" phase of the compilation process.
  590.      (Linking often is thought of as a separate step, because it can be
  591.      directly invoked via the `ld' command.  However, the `g77' and
  592.      `gcc' commands, as with most compiler commands, automatically
  593.      perform the linking step by calling on `ld' directly, unless asked
  594.      to not do so by the user.)
  595.    * They attempt to diagnose cases where the user's program contains
  596.      incorrect usages of the language.  The "diagnostics" produced by
  597.      the compiler indicate the problem and the location in the user's
  598.      source file where the problem was first noticed.  The user can use
  599.      this information to locate and fix the problem.  (Sometimes an
  600.      incorrect usage of the language leads to a situation where the
  601.      compiler can no longer make any sense of what follows--while a
  602.      human might be able to--and thus ends up complaining about many
  603.      "problems" it encounters that, in fact, stem from just one
  604.      problem, usually the first one reported.)
  605.    * They attempt to diagnose cases where the user's program contains a
  606.      correct usage of the language, but instructs the computer to do
  607.      something questionable.  These diagnostics often are in the form
  608.      of "warnings", instead of the "errors" that indicate incorrect
  609.      usage of the language.
  610.    How these actions are performed is generally under the control of
  611. the user.  Using command-line options, the user can specify how
  612. persnickety the compiler is to be regarding the program (whether to
  613. diagnose questionable usage of the language), how much time to spend
  614. making the generated machine code run faster, and so on.
  615.    `g77' consists of several components:
  616.    * A modified version of the `gcc' command, which also might be
  617.      installed as the system's `cc' command.  (In many cases, `cc'
  618.      refers to the system's "native" C compiler, which might be a
  619.      non-GNU compiler, or an older version of `gcc' considered more
  620.      stable or that is used to build the operating system kernel.)
  621.    * The `g77' command itself, which also might be installed as the
  622.      system's `f77' command.
  623.    * The `libf2c' run-time library.  This library contains the machine
  624.      code needed to support capabilities of the Fortran language that
  625.      are not directly provided by the machine code generated by the
  626.      `g77' compilation phase.
  627.    * The compiler itself, internally named `f771'.
  628.      Note that `f771' does not generate machine code directly--it
  629.      generates "assembly code" that is a more readable form of machine
  630.      code, leaving the conversion to actual machine code to an
  631.      "assembler", usually named `as'.
  632.    `gcc' is often thought of as "the C compiler" only, but it does more
  633. than that.  Based on command-line options and the names given for files
  634. on the command line, `gcc' determines which actions to perform,
  635. including preprocessing, compiling (in a variety of possible
  636. languages), assembling, and linking.
  637.    For example, the command `gcc foo.c' "drives" the file `foo.c'
  638. through the preprocessor `cpp', then the C compiler (internally named
  639. `cc1'), then the assembler (usually `as'), then the linker (`ld'),
  640. producing an executable program named `a.out' (on UNIX systems).
  641.    As another example, the command `gcc foo.cc' would do much the same
  642. as `gcc foo.c', but instead of using the C compiler named `cc1', `gcc'
  643. would use the C++ compiler (named `cc1plus').
  644.    In a GNU Fortran installation, `gcc' recognizes Fortran source files
  645. by name just like it does C and C++ source files.  It knows to use the
  646. Fortran compiler named `f771', instead of `cc1' or `cc1plus', to
  647. compile Fortran files.
  648.    Non-Fortran-related operation of `gcc' is generally unaffected by
  649. installing the GNU Fortran version of `gcc'.  However, without the
  650. installed version of `gcc' being the GNU Fortran version, `gcc' will
  651. not be able to compile and link Fortran programs--and since `g77' uses
  652. `gcc' to do most of the actual work, neither will `g77'!
  653.    The `g77' command is essentially just a front-end for the `gcc'
  654. command.  Fortran users will normally use `g77' instead of `gcc',
  655. because `g77' knows how to specify the libraries needed to link with
  656. Fortran programs (`libf2c' and `lm').  `g77' can still compile and link
  657. programs and source files written in other languages, just like `gcc'.
  658.    The command `g77 -v' is a quick way to display lots of version
  659. information for the various programs used to compile a typical
  660. preprocessed Fortran source file--this produces much more output than
  661. `gcc -v' currently does.  (If it produces an error message near the end
  662. of the output--diagnostics from the linker, usually `ld'--you might
  663. have an out-of-date `libf2c' that improperly handles complex
  664. arithmetic.)  In the output of this command, the line beginning `GNU
  665. Fortran Front End' identifies the version number of GNU Fortran;
  666. immediately preceding that line is a line identifying the version of
  667. `gcc' with which that version of `g77' was built.
  668.    The `libf2c' library is distributed with GNU Fortran for the
  669. convenience of its users, but is not part of GNU Fortran.  It contains
  670. the procedures needed by Fortran programs while they are running.
  671.    For example, while code generated by `g77' is likely to do
  672. additions, subtractions, and multiplications "in line"--in the actual
  673. compiled code--it is not likely to do trigonometric functions this way.
  674.    Instead, operations like trigonometric functions are compiled by the
  675. `f771' compiler (invoked by `g77' when compiling Fortran code) into
  676. machine code that, when run, calls on functions in `libf2c', so
  677. `libf2c' must be linked with almost every useful program having any
  678. component compiled by GNU Fortran.  (As mentioned above, the `g77'
  679. command takes care of all this for you.)
  680.    The `f771' program represents most of what is unique to GNU Fortran.
  681. While much of the `libf2c' component is really part of `f2c', a free
  682. Fortran-to-C converter distributed by Bellcore (AT&T), plus `libU77',
  683. provided by Dave Love, and the `g77' command is just a small front-end
  684. to `gcc', `f771' is a combination of two rather large chunks of code.
  685.    One chunk is the so-called "GNU Back End", or GBE, which knows how
  686. to generate fast code for a wide variety of processors.  The same GBE
  687. is used by the C, C++, and Fortran compiler programs `cc1', `cc1plus',
  688. and `f771', plus others.  Often the GBE is referred to as the "gcc back
  689. end" or even just "gcc"--in this manual, the term GBE is used whenever
  690. the distinction is important.
  691.    The other chunk of `f771' is the majority of what is unique about
  692. GNU Fortran--the code that knows how to interpret Fortran programs to
  693. determine what they are intending to do, and then communicate that
  694. knowledge to the GBE for actual compilation of those programs.  This
  695. chunk is called the "Fortran Front End" (FFE).  The `cc1' and `cc1plus'
  696. programs have their own front ends, for the C and C++ languages,
  697. respectively.  These fronts ends are responsible for diagnosing
  698. incorrect usage of their respective languages by the programs the
  699. process, and are responsible for most of the warnings about
  700. questionable constructs as well.  (The GBE handles producing some
  701. warnings, like those concerning possible references to undefined
  702. variables.)
  703.    Because so much is shared among the compilers for various languages,
  704. much of the behavior and many of the user-selectable options for these
  705. compilers are similar.  For example, diagnostics (error messages and
  706. warnings) are similar in appearance; command-line options like `-Wall'
  707. have generally similar effects; and the quality of generated code (in
  708. terms of speed and size) is roughly similar (since that work is done by
  709. the shared GBE).
  710. File: g77.info,  Node: G77 and GCC,  Next: Invoking G77,  Prev: What is GNU Fortran?,  Up: Top
  711. Compile Fortran, C, or Other Programs
  712. *************************************
  713.    A GNU Fortran installation includes a modified version of the `gcc'
  714. command.
  715.    In a non-Fortran installation, `gcc' recognizes C, C++, and
  716. Objective-C source files.
  717.    In a GNU Fortran installation, `gcc' also recognizes Fortran source
  718. files and accepts Fortran-specific command-line options, plus some
  719. command-line options that are designed to cater to Fortran users but
  720. apply to other languages as well.
  721.    *Note Compile C; C++; or Objective-C: (gcc)G++ and GCC, for
  722. information on the way different languages are handled by the GNU CC
  723. compiler (`gcc').
  724.    Also provided as part of GNU Fortran is the `g77' command.  The
  725. `g77' command is designed to make compiling and linking Fortran
  726. programs somewhat easier than when using the `gcc' command for these
  727. tasks.  It does this by analyzing the command line somewhat and
  728. changing it appropriately before submitting it to the `gcc' command.
  729.    Use the `-v' option with `g77' to see what is going on--the first
  730. line of output is the invocation of the `gcc' command.  Use
  731. `--driver=true' to disable actual invocation of `gcc' (this works
  732. because `true' is the name of a UNIX command that simply returns
  733. success status).
  734. File: g77.info,  Node: Invoking G77,  Next: News,  Prev: G77 and GCC,  Up: Top
  735. GNU Fortran Command Options
  736. ***************************
  737.    The `g77' command supports all the options supported by the `gcc'
  738. command.  *Note GNU CC Command Options: (gcc)Invoking GCC, for
  739. information on the non-Fortran-specific aspects of the `gcc' command
  740. (and, therefore, the `g77' command).
  741.    The `g77' command supports one option not supported by the `gcc'
  742. command:
  743. `--driver=COMMAND'
  744.      Specifies that COMMAND, rather than `gcc', is to be invoked by
  745.      `g77' to do its job.  For example, within the `gcc' build
  746.      directory after building GNU Fortran (but without having to
  747.      install it), `./g77 --driver=./xgcc foo.f -B./'.
  748.    All other options are supported both by `g77' and by `gcc' as
  749. modified (and reinstalled) by the `g77' distribution.  In some cases,
  750. options have positive and negative forms; the negative form of `-ffoo'
  751. would be `-fno-foo'.  This manual documents only one of these two
  752. forms, whichever one is not the default.
  753. * Menu:
  754. * Option Summary::      Brief list of all `g77' options,
  755.                         without explanations.
  756. * Overall Options::     Controlling the kind of output:
  757.                         an executable, object files, assembler files,
  758.                         or preprocessed source.
  759. * Shorthand Options::   Options that are shorthand for other options.
  760. * Fortran Dialect Options::  Controlling the variant of Fortran language
  761.                              compiled.
  762. * Warning Options::     How picky should the compiler be?
  763. * Debugging Options::   Symbol tables, measurements, and debugging dumps.
  764. * Optimize Options::    How much optimization?
  765. * Preprocessor Options:: Controlling header files and macro definitions.
  766.                          Also, getting dependency information for Make.
  767. * Directory Options::   Where to find header files and libraries.
  768.                         Where to find the compiler executable files.
  769. * Code Gen Options::    Specifying conventions for function calls, data layout
  770.                         and register usage.
  771. * Environment Variables:: Env vars that affect GNU Fortran.
  772. File: g77.info,  Node: Option Summary,  Next: Overall Options,  Up: Invoking G77
  773. Option Summary
  774. ==============
  775.    Here is a summary of all the options specific to GNU Fortran, grouped
  776. by type.  Explanations are in the following sections.
  777. *Overall Options*
  778.      *Note Options Controlling the Kind of Output: Overall Options.
  779.           --driver  -fversion  -fset-g77-defaults  -fno-silent
  780. *Shorthand Options*
  781.      *Note Shorthand Options::.
  782.           -ff66  -fno-f66  -ff77  -fno-f77  -fugly  -fno-ugly
  783. *Fortran Language Options*
  784.      *Note Options Controlling Fortran Dialect: Fortran Dialect Options.
  785.           -ffree-form  -fno-fixed-form  -ff90
  786.           -fvxt  -fdollar-ok  -fno-backslash
  787.           -fno-ugly-args  -fno-ugly-assign  -fno-ugly-assumed
  788.           -fugly-comma  -fugly-complex  -fugly-init  -fugly-logint
  789.           -fonetrip  -ftypeless-boz
  790.           -fintrin-case-initcap  -fintrin-case-upper
  791.           -fintrin-case-lower  -fintrin-case-any
  792.           -fmatch-case-initcap  -fmatch-case-upper
  793.           -fmatch-case-lower  -fmatch-case-any
  794.           -fsource-case-upper -fsource-case-lower  -fsource-case-preserve
  795.           -fsymbol-case-initcap  -fsymbol-case-upper
  796.           -fsymbol-case-lower  -fsymbol-case-any
  797.           -fcase-strict-upper  -fcase-strict-lower
  798.           -fcase-initcap  -fcase-upper  -fcase-lower  -fcase-preserve
  799.           -ff2c-intrinsics-delete  -ff2c-intrinsics-hide
  800.           -ff2c-intrinsics-disable  -ff2c-intrinsics-enable
  801.           -fbadu77-intrinsics-delete  -fbadu77-intrinsics-hide
  802.           -fbadu77-intrinsics-disable  -fbadu77-intrinsics-enable
  803.           -ff90-intrinsics-delete  -ff90-intrinsics-hide
  804.           -ff90-intrinsics-disable  -ff90-intrinsics-enable
  805.           -fgnu-intrinsics-delete  -fgnu-intrinsics-hide
  806.           -fgnu-intrinsics-disable  -fgnu-intrinsics-enable
  807.           -fmil-intrinsics-delete  -fmil-intrinsics-hide
  808.           -fmil-intrinsics-disable  -fmil-intrinsics-enable
  809.           -funix-intrinsics-delete  -funix-intrinsics-hide
  810.           -funix-intrinsics-disable  -funix-intrinsics-enable
  811.           -fvxt-intrinsics-delete  -fvxt-intrinsics-hide
  812.           -fvxt-intrinsics-disable  -fvxt-intrinsics-enable
  813.           -ffixed-line-length-N  -ffixed-line-length-none
  814. *Warning Options*
  815.      *Note Options to Request or Suppress Warnings: Warning Options.
  816.           -fsyntax-only  -pedantic  -pedantic-errors  -fpedantic
  817.           -w  -Wno-globals  -Wimplicit -Wunused  -Wuninitialized
  818.           -Wall  -Wsurprising
  819.           -Werror  -W
  820. *Debugging Options*
  821.      *Note Options for Debugging Your Program or GCC: Debugging Options.
  822.           -g
  823. *Optimization Options*
  824.      *Note Options that Control Optimization: Optimize Options.
  825.           -malign-double
  826.           -ffloat-store  -fforce-mem  -fforce-addr  -fno-inline
  827.           -ffast-math  -fstrength-reduce  -frerun-cse-after-loop
  828.           -fexpensive-optimizations  -fdelayed-branch
  829.           -fschedule-insns  -fschedule-insn2  -fcaller-saves
  830.           -funroll-loops  -funroll-all-loops
  831.           -fno-move-all-movables  -fno-reduce-all-givs
  832.           -fno-rerun-loop-opt
  833. *Directory Options*
  834.      *Note Options for Directory Search: Directory Options.
  835.           -IDIR  -I-
  836. *Code Generation Options*
  837.      *Note Options for Code Generation Conventions: Code Gen Options.
  838.           -fno-automatic  -finit-local-zero  -fno-f2c
  839.           -ff2c-library  -fno-underscoring  -fno-ident
  840.           -fpcc-struct-return  -freg-struct-return
  841.           -fshort-double  -fno-common  -fpack-struct
  842.           -fzeros  -fno-second-underscore
  843.           -fdebug-kludge  -fno-emulate-complex
  844.           -falias-check  -fargument-alias
  845.           -fargument-noalias  -fno-argument-noalias-global
  846.           -fno-globals
  847. * Menu:
  848. * Overall Options::     Controlling the kind of output:
  849.                         an executable, object files, assembler files,
  850.                         or preprocessed source.
  851. * Shorthand Options::   Options that are shorthand for other options.
  852. * Fortran Dialect Options::  Controlling the variant of Fortran language
  853.                              compiled.
  854. * Warning Options::     How picky should the compiler be?
  855. * Debugging Options::   Symbol tables, measurements, and debugging dumps.
  856. * Optimize Options::    How much optimization?
  857. * Preprocessor Options:: Controlling header files and macro definitions.
  858.                          Also, getting dependency information for Make.
  859. * Directory Options::   Where to find header files and libraries.
  860.                         Where to find the compiler executable files.
  861. * Code Gen Options::    Specifying conventions for function calls, data layout
  862.                         and register usage.
  863. File: g77.info,  Node: Overall Options,  Next: Shorthand Options,  Prev: Option Summary,  Up: Invoking G77
  864. Options Controlling the Kind of Output
  865. ======================================
  866.    Compilation can involve as many as four stages: preprocessing, code
  867. generation (often what is really meant by the term "compilation"),
  868. assembly, and linking, always in that order.  The first three stages
  869. apply to an individual source file, and end by producing an object
  870. file; linking combines all the object files (those newly compiled, and
  871. those specified as input) into an executable file.
  872.    For any given input file, the file name suffix determines what kind
  873. of program is contained in the file--that is, the language in which the
  874. program is written is generally indicated by the suffix.  Suffixes
  875. specific to GNU Fortran are listed below.  *Note gcc: (Using and
  876. Porting GNU CC)Overall Options, for information on suffixes recognized
  877. by GNU CC.
  878. `FILE.f'
  879. `FILE.for'
  880.      Fortran source code that should not be preprocessed.
  881.      Such source code cannot contain any preprocessor directives, such
  882.      as `#include', `#define', `#if', and so on.
  883. `FILE.F'
  884. `FILE.fpp'
  885.      Fortran source code that must be preprocessed (by the C
  886.      preprocessor `cpp', which is part of GNU CC).
  887.      Note that preprocessing is not extended to the contents of files
  888.      included by the `INCLUDE' directive--the `#include' preprocessor
  889.      directive must be used instead.
  890. `FILE.r'
  891.      Ratfor source code, which must be preprocessed by the `ratfor'
  892.      command, which is available separately (as it is not yet part of
  893.      the GNU Fortran distribution).
  894.    UNIX users typically use the `FILE.f' and `FILE.F' nomenclature.
  895. Users of other operating systems, especially those that cannot
  896. distinguish upper-case letters from lower-case letters in their file
  897. names, typically use the `FILE.for' and `FILE.fpp' nomenclature.
  898.    Use of the preprocessor `cpp' allows use of C-like constructs such
  899. as `#define' and `#include', but can lead to unexpected, even mistaken,
  900. results due to Fortran's source file format.  It is recommended that
  901. use of the C preprocessor be limited to `#include' and, in conjunction
  902. with `#define', only `#if' and related directives, thus avoiding
  903. in-line macro expansion entirely.  This recommendation applies
  904. especially when using the traditional fixed source form.  With free
  905. source form, fewer unexpected transformations are likely to happen, but
  906. use of constructs such as Hollerith and character constants can
  907. nevertheless present problems, especially when these are continued
  908. across multiple source lines.  These problems result, primarily, from
  909. differences between the way such constants are interpreted by the C
  910. preprocessor and by a Fortran compiler.
  911.    Another example of a problem that results from using the C
  912. preprocessor is that a Fortran comment line that happens to contain any
  913. characters "interesting" to the C preprocessor, such as a backslash at
  914. the end of the line, is not recognized by the preprocessor as a comment
  915. line, so instead of being passed through "raw", the line is edited
  916. according to the rules for the preprocessor.  For example, the
  917. backslash at the end of the line is removed, along with the subsequent
  918. newline, resulting in the next line being effectively commented
  919. out--unfortunate if that line is a non-comment line of important code!
  920.    *Note:* The `-traditional' and `-undef' flags are supplied to `cpp'
  921. by default, to avoid unpleasant surprises.  *Note Options Controlling
  922. the Preprocessor: (gcc)Preprocessor Options.  This means that ANSI C
  923. preprocessor features (such as the `#' operator) aren't available, and
  924. only variables in the C reserved namespace (generally, names with a
  925. leading underscore) are liable to substitution by C predefines.  Thus,
  926. if you want to do system-specific tests, use, for example, `#ifdef
  927. __linux__' rather than `#ifdef linux'.  Use the `-v' option to see
  928. exactly how the preprocessor is invoked.
  929.    The following options that affect overall processing are recognized
  930. by the `g77' and `gcc' commands in a GNU Fortran installation:
  931. `--driver=COMMAND'
  932.      This works when invoking only the `g77' command, not when invoking
  933.      the `gcc' command.  *Note GNU Fortran Command Options: Invoking
  934.      G77, for information on this option.
  935. `-fversion'
  936.      Ensure that the `g77'-specific version of the compiler phase is
  937.      reported, if run.  (This is supplied automatically when `-v' or
  938.      `--verbose' is specified as a command-line option for `g77' or
  939.      `gcc' and when the resulting commands compile Fortran source
  940.      files.)
  941. `-fset-g77-defaults'
  942.      Set up whatever `gcc' options are to apply to Fortran
  943.      compilations, and avoid running internal consistency checks that
  944.      might take some time.
  945.      As of version 0.5.20, this is equivalent to `-fmove-all-movables
  946.      -freduce-all-givs -frerun-loop-opt -fargument-noalias-global'.
  947.      This option is supplied automatically when compiling Fortran code
  948.      via the `g77' or `gcc' command.  The description of this option is
  949.      provided so that users seeing it in the output of, say, `g77 -v'
  950.      understand why it is there.
  951.      Also, developers who run `f771' directly might want to specify it
  952.      by hand to get the same defaults as they would running `f771' via
  953.      `g77' or `gcc'.  However, such developers should, after linking a
  954.      new `f771' executable, invoke it without this option once, e.g.
  955.      via `./f771 -quiet < /dev/null', to ensure that they have not
  956.      introduced any internal inconsistencies (such as in the table of
  957.      intrinsics) before proceeding--`g77' will crash with a diagnostic
  958.      if it detects an inconsistency.
  959. `-fno-silent'
  960.      Print (to `stderr') the names of the program units as they are
  961.      compiled, in a form similar to that used by popular UNIX `f77'
  962.      implementations and `f2c'.
  963.    *Note Options Controlling the Kind of Output: (gcc)Overall Options,
  964. for information on more options that control the overall operation of
  965. the `gcc' command (and, by extension, the `g77' command).
  966. File: g77.info,  Node: Shorthand Options,  Next: Fortran Dialect Options,  Prev: Overall Options,  Up: Invoking G77
  967. Shorthand Options
  968. =================
  969.    The following options serve as "shorthand" for other options
  970. accepted by the compiler:
  971. `-fugly'
  972.      Specify that certain "ugly" constructs are to be quietly accepted.
  973.      Same as:
  974.           -fugly-args -fugly-assign -fugly-assumed
  975.           -fugly-comma -fugly-complex -fugly-init
  976.           -fugly-logint
  977.      These constructs are considered inappropriate to use in new or
  978.      well-maintained portable Fortran code, but widely used in old code.
  979.      *Note Distensions::, for more information.
  980.      *Note:* The `-fugly' option is likely to be removed in a future
  981.      version.  Implicitly enabling all the `-fugly-*' options is
  982.      unlikely to be feasible, or sensible, in the future, so users
  983.      should learn to specify only those `-fugly-*' options they really
  984.      need for a particular source file.
  985. `-fno-ugly'
  986.      Specify that all "ugly" constructs are to be noisily rejected.
  987.      Same as:
  988.           -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
  989.           -fno-ugly-comma -fno-ugly-complex -fno-ugly-init
  990.           -fno-ugly-logint
  991.      *Note Distensions::, for more information.
  992. `-ff66'
  993.      Specify that the program is written in idiomatic FORTRAN 66.  Same
  994.      as `-fonetrip -fugly-assumed'.
  995.      The `-fno-f66' option is the inverse of `-ff66'.  As such, it is
  996.      the same as `-fno-onetrip -fno-ugly-assumed'.
  997.      The meaning of this option is likely to be refined as future
  998.      versions of `g77' provide more compatibility with other existing
  999.      and obsolete Fortran implementations.
  1000. `-ff77'
  1001.      Specify that the program is written in idiomatic UNIX FORTRAN 77
  1002.      and/or the dialect accepted by the `f2c' product.  Same as
  1003.      `-fbackslash -fno-typeless-boz'.
  1004.      The meaning of this option is likely to be refined as future
  1005.      versions of `g77' provide more compatibility with other existing
  1006.      and obsolete Fortran implementations.
  1007. `-fno-f77'
  1008.      The `-fno-f77' option is *not* the inverse of `-ff77'.  It
  1009.      specifies that the program is not written in idiomatic UNIX
  1010.      FORTRAN 77 or `f2c', but in a more widely portable dialect.
  1011.      `-fno-f77' is the same as `-fno-backslash'.
  1012.      The meaning of this option is likely to be refined as future
  1013.      versions of `g77' provide more compatibility with other existing
  1014.      and obsolete Fortran implementations.
  1015. File: g77.info,  Node: Fortran Dialect Options,  Next: Warning Options,  Prev: Shorthand Options,  Up: Invoking G77
  1016. Options Controlling Fortran Dialect
  1017. ===================================
  1018.    The following options control the dialect of Fortran that the
  1019. compiler accepts:
  1020. `-ffree-form'
  1021. `-fno-fixed-form'
  1022.      Specify that the source file is written in free form (introduced
  1023.      in Fortran 90) instead of the more-traditional fixed form.
  1024. `-ff90'
  1025.      Allow certain Fortran-90 constructs.
  1026.      This option controls whether certain Fortran 90 constructs are
  1027.      recognized.  (Other Fortran 90 constructs might or might not be
  1028.      recognized depending on other options such as `-fvxt',
  1029.      `-ff90-intrinsics-enable', and the current level of support for
  1030.      Fortran 90.)
  1031.      *Note Fortran 90::, for more information.
  1032. `-fvxt'
  1033.      Specify the treatment of certain constructs that have different
  1034.      meanings depending on whether the code is written in GNU Fortran
  1035.      (based on FORTRAN 77 and akin to Fortran 90) or VXT Fortran (more
  1036.      like VAX FORTRAN).
  1037.      The default is `-fno-vxt'.  `-fvxt' specifies that the VXT Fortran
  1038.      interpretations for those constructs are to be chosen.
  1039.      *Note VXT Fortran::, for more information.
  1040. `-fdollar-ok'
  1041.      Allow `$' as a valid character in a symbol name.
  1042. `-fno-backslash'
  1043.      Specify that `\' is not to be specially interpreted in character
  1044.      and Hollerith constants a la C and many UNIX Fortran compilers.
  1045.      For example, with `-fbackslash' in effect, `A\nB' specifies three
  1046.      characters, with the second one being newline.  With
  1047.      `-fno-backslash', it specifies four characters, `A', `\', `n', and
  1048.      `B'.
  1049.      Note that `g77' implements a fairly general form of backslash
  1050.      processing that is incompatible with the narrower forms supported
  1051.      by some other compilers.  For example, `'A\003B'' is a
  1052.      three-character string in `g77', whereas other compilers that
  1053.      support backslash might not support the three-octal-digit form,
  1054.      and thus treat that string as longer than three characters.
  1055.      *Note Backslash in Constants::, for information on why
  1056.      `-fbackslash' is the default instead of `-fno-backslash'.
  1057. `-fno-ugly-args'
  1058.      Disallow passing Hollerith and typeless constants as actual
  1059.      arguments (for example, `CALL FOO(4HABCD)').
  1060.      *Note Ugly Implicit Argument Conversion::, for more information.
  1061. `-fugly-assign'
  1062.      Use the same storage for a given variable regardless of whether it
  1063.      is used to hold an assigned-statement label (as in `ASSIGN 10 TO
  1064.      I') or used to hold numeric data (as in `I = 3').
  1065.      *Note Ugly Assigned Labels::, for more information.
  1066. `-fugly-assumed'
  1067.      Assume any dummy array with a final dimension specified as `1' is
  1068.      really an assumed-size array, as if `*' had been specified for the
  1069.      final dimension instead of `1'.
  1070.      For example, `DIMENSION X(1)' is treated as if it had read
  1071.      `DIMENSION X(*)'.
  1072.      *Note Ugly Assumed-Size Arrays::, for more information.
  1073. `-fugly-comma'
  1074.      In an external-procedure invocation, treat a trailing comma in the
  1075.      argument list as specification of a trailing null argument, and
  1076.      treat an empty argument list as specification of a single null
  1077.      argument.
  1078.      For example, `CALL FOO(,)' is treated as `CALL FOO(%VAL(0),
  1079.      %VAL(0))'.  That is, *two* null arguments are specified by the
  1080.      procedure call when `-fugly-comma' is in force.  And `F = FUNC()'
  1081.      is treated as `F = FUNC(%VAL(0))'.
  1082.      The default behavior, `-fno-ugly-comma', is to ignore a single
  1083.      trailing comma in an argument list.  So, by default, `CALL
  1084.      FOO(X,)' is treated exactly the same as `CALL FOO(X)'.
  1085.      *Note Ugly Null Arguments::, for more information.
  1086. `-fugly-complex'
  1087.      Do not complain about `REAL(EXPR)' or `AIMAG(EXPR)' when EXPR is a
  1088.      `COMPLEX' type other than `COMPLEX(KIND=1)'--usually this is used
  1089.      to permit `COMPLEX(KIND=2)' (`DOUBLE COMPLEX') operands.
  1090.      The `-ff90' option controls the interpretation of this construct.
  1091.      *Note Ugly Complex Part Extraction::, for more information.
  1092. `-fno-ugly-init'
  1093.      Disallow use of Hollerith and typeless constants as initial values
  1094.      (in `PARAMETER' and `DATA' statements), and use of character
  1095.      constants to initialize numeric types and vice versa.
  1096.      For example, `DATA I/'F'/, CHRVAR/65/, J/4HABCD/' is disallowed by
  1097.      `-fno-ugly-init'.
  1098.      *Note Ugly Conversion of Initializers::, for more information.
  1099. `-fugly-logint'
  1100.      Treat `INTEGER' and `LOGICAL' variables and expressions as
  1101.      potential stand-ins for each other.
  1102.      For example, automatic conversion between `INTEGER' and `LOGICAL'
  1103.      is enabled, for many contexts, via this option.
  1104.      *Note Ugly Integer Conversions::, for more information.
  1105. `-fonetrip'
  1106.      Imperative executable `DO' loops are to be executed at least once
  1107.      each time they are reached.
  1108.      ANSI FORTRAN 77 and more recent versions of the Fortran standard
  1109.      specify that the body of an imperative `DO' loop is not executed
  1110.      if the number of iterations calculated from the parameters of the
  1111.      loop is less than 1.  (For example, `DO 10 I = 1, 0'.)  Such a
  1112.      loop is called a "zero-trip loop".
  1113.      Prior to ANSI FORTRAN 77, many compilers implemented `DO' loops
  1114.      such that the body of a loop would be executed at least once, even
  1115.      if the iteration count was zero.  Fortran code written assuming
  1116.      this behavior is said to require "one-trip loops".  For example,
  1117.      some code written to the FORTRAN 66 standard expects this behavior
  1118.      from its `DO' loops, although that standard did not specify this
  1119.      behavior.
  1120.      The `-fonetrip' option specifies that the source file(s) being
  1121.      compiled require one-trip loops.
  1122.      This option affects only those loops specified by the (imperative)
  1123.      `DO' statement and by implied-`DO' lists in I/O statements.  Loops
  1124.      specified by implied-`DO' lists in `DATA' and specification
  1125.      (non-executable) statements are not affected.
  1126. `-ftypeless-boz'
  1127.      Specifies that prefix-radix non-decimal constants, such as
  1128.      `Z'ABCD'', are typeless instead of `INTEGER(KIND=1)'.
  1129.      You can test for yourself whether a particular compiler treats the
  1130.      prefix form as `INTEGER(KIND=1)' or typeless by running the
  1131.      following program:
  1132.           EQUIVALENCE (I, R)
  1133.           R = Z'ABCD1234'
  1134.           J = Z'ABCD1234'
  1135.           IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
  1136.           IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
  1137.           END
  1138.      Reports indicate that many compilers process this form as
  1139.      `INTEGER(KIND=1)', though a few as typeless, and at least one
  1140.      based on a command-line option specifying some kind of
  1141.      compatibility.
  1142. `-fintrin-case-initcap'
  1143. `-fintrin-case-upper'
  1144. `-fintrin-case-lower'
  1145. `-fintrin-case-any'
  1146.      Specify expected case for intrinsic names.  `-fintrin-case-lower'
  1147.      is the default.
  1148. `-fmatch-case-initcap'
  1149. `-fmatch-case-upper'
  1150. `-fmatch-case-lower'
  1151. `-fmatch-case-any'
  1152.      Specify expected case for keywords.  `-fmatch-case-lower' is the
  1153.      default.
  1154. `-fsource-case-upper'
  1155. `-fsource-case-lower'
  1156. `-fsource-case-preserve'
  1157.      Specify whether source text other than character and Hollerith
  1158.      constants is to be translated to uppercase, to lowercase, or
  1159.      preserved as is.  `-fsource-case-lower' is the default.
  1160. `-fsymbol-case-initcap'
  1161. `-fsymbol-case-upper'
  1162. `-fsymbol-case-lower'
  1163. `-fsymbol-case-any'
  1164.      Specify valid cases for user-defined symbol names.
  1165.      `-fsymbol-case-any' is the default.
  1166. `-fcase-strict-upper'
  1167.      Same as `-fintrin-case-upper -fmatch-case-upper
  1168.      -fsource-case-preserve -fsymbol-case-upper'.  (Requires all
  1169.      pertinent source to be in uppercase.)
  1170. `-fcase-strict-lower'
  1171.      Same as `-fintrin-case-lower -fmatch-case-lower
  1172.      -fsource-case-preserve -fsymbol-case-lower'.  (Requires all
  1173.      pertinent source to be in lowercase.)
  1174. `-fcase-initcap'
  1175.      Same as `-fintrin-case-initcap -fmatch-case-initcap
  1176.      -fsource-case-preserve -fsymbol-case-initcap'.  (Requires all
  1177.      pertinent source to be in initial capitals, as in `Print
  1178.      *,SqRt(Value)'.)
  1179. `-fcase-upper'
  1180.      Same as `-fintrin-case-any -fmatch-case-any -fsource-case-upper
  1181.      -fsymbol-case-any'.  (Maps all pertinent source to uppercase.)
  1182. `-fcase-lower'
  1183.      Same as `-fintrin-case-any -fmatch-case-any -fsource-case-lower
  1184.      -fsymbol-case-any'.  (Maps all pertinent source to lowercase.)
  1185. `-fcase-preserve'
  1186.      Same as `-fintrin-case-any -fmatch-case-any -fsource-case-preserve
  1187.      -fsymbol-case-any'.  (Preserves all case in user-defined symbols,
  1188.      while allowing any-case matching of intrinsics and keywords.  For
  1189.      example, `call Foo(i,I)' would pass two *different* variables
  1190.      named `i' and `I' to a procedure named `Foo'.)
  1191. `-fbadu77-intrinsics-delete'
  1192. `-fbadu77-intrinsics-hide'
  1193. `-fbadu77-intrinsics-disable'
  1194. `-fbadu77-intrinsics-enable'
  1195.      Specify status of UNIX intrinsics having inappropriate forms.
  1196.      `-fbadu77-intrinsics-enable' is the default.  *Note Intrinsic
  1197.      Groups::.
  1198. `-ff2c-intrinsics-delete'
  1199. `-ff2c-intrinsics-hide'
  1200. `-ff2c-intrinsics-disable'
  1201. `-ff2c-intrinsics-enable'
  1202.      Specify status of f2c-specific intrinsics.
  1203.      `-ff2c-intrinsics-enable' is the default.  *Note Intrinsic
  1204.      Groups::.
  1205. `-ff90-intrinsics-delete'
  1206. `-ff90-intrinsics-hide'
  1207. `-ff90-intrinsics-disable'
  1208. `-ff90-intrinsics-enable'
  1209.      Specify status of F90-specific intrinsics.
  1210.      `-ff90-intrinsics-enable' is the default.  *Note Intrinsic
  1211.      Groups::.
  1212. `-fgnu-intrinsics-delete'
  1213. `-fgnu-intrinsics-hide'
  1214. `-fgnu-intrinsics-disable'
  1215. `-fgnu-intrinsics-enable'
  1216.      Specify status of Digital's COMPLEX-related intrinsics.
  1217.      `-fgnu-intrinsics-enable' is the default.  *Note Intrinsic
  1218.      Groups::.
  1219. `-fmil-intrinsics-delete'
  1220. `-fmil-intrinsics-hide'
  1221. `-fmil-intrinsics-disable'
  1222. `-fmil-intrinsics-enable'
  1223.      Specify status of MIL-STD-1753-specific intrinsics.
  1224.      `-fmil-intrinsics-enable' is the default.  *Note Intrinsic
  1225.      Groups::.
  1226. `-funix-intrinsics-delete'
  1227. `-funix-intrinsics-hide'
  1228. `-funix-intrinsics-disable'
  1229. `-funix-intrinsics-enable'
  1230.      Specify status of UNIX intrinsics.  `-funix-intrinsics-enable' is
  1231.      the default.  *Note Intrinsic Groups::.
  1232. `-fvxt-intrinsics-delete'
  1233. `-fvxt-intrinsics-hide'
  1234. `-fvxt-intrinsics-disable'
  1235. `-fvxt-intrinsics-enable'
  1236.      Specify status of VXT intrinsics.  `-fvxt-intrinsics-enable' is
  1237.      the default.  *Note Intrinsic Groups::.
  1238. `-ffixed-line-length-N'
  1239.      Set column after which characters are ignored in typical fixed-form
  1240.      lines in the source file, and through which spaces are assumed (as
  1241.      if padded to that length) after the ends of short fixed-form lines.
  1242.      Popular values for N include 72 (the standard and the default), 80
  1243.      (card image), and 132 (corresponds to "extended-source" options in
  1244.      some popular compilers).  N may be `none', meaning that the entire
  1245.      line is meaningful and that continued character constants never
  1246.      have implicit spaces appended to them to fill out the line.
  1247.      `-ffixed-line-length-0' means the same thing as
  1248.      `-ffixed-line-length-none'.
  1249.      *Note Source Form::, for more information.
  1250. File: g77.info,  Node: Warning Options,  Next: Debugging Options,  Prev: Fortran Dialect Options,  Up: Invoking G77
  1251. Options to Request or Suppress Warnings
  1252. =======================================
  1253.    Warnings are diagnostic messages that report constructions which are
  1254. not inherently erroneous but which are risky or suggest there might
  1255. have been an error.
  1256.    You can request many specific warnings with options beginning `-W',
  1257. for example `-Wimplicit' to request warnings on implicit declarations.
  1258. Each of these specific warning options also has a negative form
  1259. beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
  1260. This manual lists only one of the two forms, whichever is not the
  1261. default.
  1262.    These options control the amount and kinds of warnings produced by
  1263. GNU Fortran:
  1264. `-fsyntax-only'
  1265.      Check the code for syntax errors, but don't do anything beyond
  1266.      that.
  1267. `-pedantic'
  1268.      Issue warnings for uses of extensions to ANSI FORTRAN 77.
  1269.      `-pedantic' also applies to C-language constructs where they occur
  1270.      in GNU Fortran source files, such as use of `\e' in a character
  1271.      constant within a directive like `#include'.
  1272.      Valid ANSI FORTRAN 77 programs should compile properly with or
  1273.      without this option.  However, without this option, certain GNU
  1274.      extensions and traditional Fortran features are supported as well.
  1275.      With this option, many of them are rejected.
  1276.      Some users try to use `-pedantic' to check programs for strict ANSI
  1277.      conformance.  They soon find that it does not do quite what they
  1278.      want--it finds some non-ANSI practices, but not all.  However,
  1279.      improvements to `g77' in this area are welcome.
  1280. `-pedantic-errors'
  1281.      Like `-pedantic', except that errors are produced rather than
  1282.      warnings.
  1283. `-fpedantic'
  1284.      Like `-pedantic', but applies only to Fortran constructs.
  1285.      Inhibit all warning messages.
  1286. `-Wno-globals'
  1287.      Inhibit warnings about use of a name as both a global name (a
  1288.      subroutine, function, or block data program unit, or a common
  1289.      block) and implicitly as the name of an intrinsic in a source file.
  1290.      Also inhibit warnings about inconsistent invocations and/or
  1291.      definitions of global procedures (function and subroutines).  Such
  1292.      inconsistencies include different numbers of arguments and
  1293.      different types of arguments.
  1294. `-Wimplicit'
  1295.      Warn whenever a variable, array, or function is implicitly
  1296.      declared.  Has an effect similar to using the `IMPLICIT NONE'
  1297.      statement in every program unit.  (Some Fortran compilers provide
  1298.      this feature by an option named `-u' or `/WARNINGS=DECLARATIONS'.)
  1299. `-Wunused'
  1300.      Warn whenever a variable is unused aside from its declaration.
  1301. `-Wuninitialized'
  1302.      Warn whenever an automatic variable is used without first being
  1303.      initialized.
  1304.      These warnings are possible only in optimizing compilation,
  1305.      because they require data-flow information that is computed only
  1306.      when optimizing.  If you don't specify `-O', you simply won't get
  1307.      these warnings.
  1308.      These warnings occur only for variables that are candidates for
  1309.      register allocation.  Therefore, they do not occur for a variable
  1310.      whose address is taken, or whose size is other than 1, 2, 4 or 8
  1311.      bytes.  Also, they do not occur for arrays, even when they are in
  1312.      registers.
  1313.      Note that there might be no warning about a variable that is used
  1314.      only to compute a value that itself is never used, because such
  1315.      computations may be deleted by data-flow analysis before the
  1316.      warnings are printed.
  1317.      These warnings are made optional because GNU Fortran is not smart
  1318.      enough to see all the reasons why the code might be correct
  1319.      despite appearing to have an error.  Here is one example of how
  1320.      this can happen:
  1321.           SUBROUTINE DISPAT(J)
  1322.           IF (J.EQ.1) I=1
  1323.           IF (J.EQ.2) I=4
  1324.           IF (J.EQ.3) I=5
  1325.           CALL FOO(I)
  1326.           END
  1327.      If the value of `J' is always 1, 2 or 3, then `I' is always
  1328.      initialized, but GNU Fortran doesn't know this.  Here is another
  1329.      common case:
  1330.           SUBROUTINE MAYBE(FLAG)
  1331.           LOGICAL FLAG
  1332.           IF (FLAG) VALUE = 9.4
  1333.           ...
  1334.           IF (FLAG) PRINT *, VALUE
  1335.           END
  1336.      This has no bug because `VALUE' is used only if it is set.
  1337. `-Wall'
  1338.      The `-Wunused' and `-Wuninitialized' options combined.  These are
  1339.      all the options which pertain to usage that we recommend avoiding
  1340.      and that we believe is easy to avoid.  (As more warnings are added
  1341.      to `g77', some might be added to the list enabled by `-Wall'.)
  1342.    The remaining `-W...' options are not implied by `-Wall' because
  1343. they warn about constructions that we consider reasonable to use, on
  1344. occasion, in clean programs.
  1345. `-Wsurprising'
  1346.      Warn about "suspicious" constructs that are interpreted by the
  1347.      compiler in a way that might well be surprising to someone reading
  1348.      the code.  These differences can result in subtle,
  1349.      compiler-dependent (even machine-dependent) behavioral differences.
  1350.      The constructs warned about include:
  1351.         * Expressions having two arithmetic operators in a row, such as
  1352.           `X*-Y'.  Such a construct is nonstandard, and can produce
  1353.           unexpected results in more complicated situations such as
  1354.           `X**-Y*Z'.  `g77', along with many other compilers, interprets
  1355.           this example differently than many programmers, and a few
  1356.           other compilers.  Specifically, `g77' interprets `X**-Y*Z' as
  1357.           `(X**(-Y))*Z', while others might think it should be
  1358.           interpreted as `X**(-(Y*Z))'.
  1359.           A revealing example is the constant expression `2**-2*1.',
  1360.           which `g77' evaluates to .25, while others might evaluate it
  1361.           to 0., the difference resulting from the way precedence
  1362.           affects type promotion.
  1363.           (The `-fpedantic' option also warns about expressions having
  1364.           two arithmetic operators in a row.)
  1365.         * Expressions with a unary minus followed by an operand and then
  1366.           a binary operator other than plus or minus.  For example,
  1367.           `-2**2' produces a warning, because the precedence is
  1368.           `-(2**2)', yielding -4, not `(-2)**2', which yields 4, and
  1369.           which might represent what a programmer expects.
  1370.           An example of an expression producing different results in a
  1371.           surprising way is `-I*S', where I holds the value
  1372.           `-2147483648' and S holds `0.5'.  On many systems, negating I
  1373.           results in the same value, not a positive number, because it
  1374.           is already the lower bound of what an `INTEGER(KIND=1)'
  1375.           variable can hold.  So, the expression evaluates to a
  1376.           positive number, while the "expected" interpretation,
  1377.           `(-I)*S', would evaluate to a negative number.
  1378.           Even cases such as `-I*J' produce warnings, even though, in
  1379.           most configurations and situations, there is no computational
  1380.           difference between the results of the two
  1381.           interpretations--the purpose of this warning is to warn about
  1382.           differing interpretations and encourage a better style of
  1383.           coding, not to identify only those places where bugs might
  1384.           exist in the user's code.
  1385.         * `DO' loops with `DO' variables that are not of integral
  1386.           type--that is, using `REAL' variables as loop control
  1387.           variables.  Although such loops can be written to work in the
  1388.           "obvious" way, the way `g77' is required by the Fortran
  1389.           standard to interpret such code is likely to be quite
  1390.           different from the way many programmers expect.  (This is
  1391.           true of all `DO' loops, but the differences are pronounced
  1392.           for non-integral loop control variables.)
  1393.           *Note Loops::, for more information.
  1394. `-Werror'
  1395.      Make all warnings into errors.
  1396.      Turns on "extra warnings" and, if optimization is specified via
  1397.      `-O', the `-Wuninitialized' option.  (This might change in future
  1398.      versions of `g77'.)
  1399.      "Extra warnings" are issued for:
  1400.         * Unused parameters to a procedure (when `-Wunused' also is
  1401.           specified).
  1402.         * Overflows involving floating-point constants (not available
  1403.           for certain configurations).
  1404.    *Note Options to Request or Suppress Warnings: (gcc)Warning Options,
  1405. for information on more options offered by the GBE shared by `g77',
  1406. `gcc', and other GNU compilers.
  1407.    Some of these have no effect when compiling programs written in
  1408. Fortran:
  1409. `-Wcomment'
  1410. `-Wformat'
  1411. `-Wparentheses'
  1412. `-Wswitch'
  1413. `-Wtraditional'
  1414. `-Wshadow'
  1415. `-Wid-clash-LEN'
  1416. `-Wlarger-than-LEN'
  1417. `-Wconversion'
  1418. `-Waggregate-return'
  1419. `-Wredundant-decls'
  1420.      These options all could have some relevant meaning for GNU Fortran
  1421.      programs, but are not yet supported.
  1422. File: g77.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking G77
  1423. Options for Debugging Your Program or GNU Fortran
  1424. =================================================
  1425.    GNU Fortran has various special options that are used for debugging
  1426. either your program or `g77'.
  1427.      Produce debugging information in the operating system's native
  1428.      format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
  1429.      debugging information.
  1430.      Support for this option in Fortran programs is incomplete.  In
  1431.      particular, names of variables and arrays in common blocks or that
  1432.      are storage-associated via `EQUIVALENCE' are unavailable to the
  1433.      debugger.
  1434.      However, version 0.5.19 of `g77' does provide this information in
  1435.      a rudimentary way, as controlled by the `-fdebug-kludge' option.
  1436.      *Note Options for Code Generation Conventions: Code Gen Options,
  1437.      for more information.
  1438.    *Note Options for Debugging Your Program or GNU CC: (gcc)Debugging
  1439. Options, for more information on debugging options.
  1440. File: g77.info,  Node: Optimize Options,  Next: Preprocessor Options,  Prev: Debugging Options,  Up: Invoking G77
  1441. Options That Control Optimization
  1442. =================================
  1443.    Most Fortran users will want to use no optimization when developing
  1444. and testing programs, and use `-O' or `-O2' when compiling programs for
  1445. late-cycle testing and for production use.
  1446.    The following flags have particular applicability when compiling
  1447. Fortran programs:
  1448. `-malign-double'
  1449.      (Intel 386 architecture only.)
  1450.      Noticeably improves performance of `g77' programs making heavy use
  1451.      of `REAL(KIND=2)' (`DOUBLE PRECISION') data on some systems.  In
  1452.      particular, systems using Pentium, Pentium Pro, 586, and 686
  1453.      implementations of the i386 architecture execute programs faster
  1454.      when `REAL(KIND=2)' (`DOUBLE PRECISION') data are aligned on
  1455.      64-bit boundaries in memory.
  1456.      This option can, at least, make benchmark results more consistent
  1457.      across various system configurations, versions of the program, and
  1458.      data sets.
  1459.      *Note:* The warning in the `gcc' documentation about this option
  1460.      does not apply, generally speaking, to Fortran code compiled by
  1461.      `g77'.
  1462.      *Also note:* `g77' fixes a `gcc' backend bug to allow
  1463.      `-malign-double' to work generally, not just with
  1464.      statically-allocated data.
  1465.      *Also also note:* The negative form of `-malign-double' is
  1466.      `-mno-align-double', not `-benign-double'.
  1467. `-ffloat-store'
  1468.      Might help a Fortran program that depends on exact IEEE conformance
  1469.      on some machines, but might slow down a program that doesn't.
  1470. `-fforce-mem'
  1471. `-fforce-addr'
  1472.      Might improve optimization of loops.
  1473. `-fno-inline'
  1474.      Don't compile statement functions inline.  Might reduce the size
  1475.      of a program unit--which might be at expense of some speed (though
  1476.      it should compile faster).  Note that if you are not optimizing,
  1477.      no functions can be expanded inline.
  1478. `-ffast-math'
  1479.      Might allow some programs designed to not be too dependent on IEEE
  1480.      behavior for floating-point to run faster, or die trying.
  1481. `-fstrength-reduce'
  1482.      Might make some loops run faster.
  1483. `-frerun-cse-after-loop'
  1484. `-fexpensive-optimizations'
  1485. `-fdelayed-branch'
  1486. `-fschedule-insns'
  1487. `-fschedule-insns2'
  1488. `-fcaller-saves'
  1489.      Might improve performance on some code.
  1490. `-funroll-loops'
  1491.      Definitely improves performance on some code.
  1492. `-funroll-all-loops'
  1493.      Definitely improves performance on some code.
  1494. `-fno-move-all-movables'
  1495. `-fno-reduce-all-givs'
  1496. `-fno-rerun-loop-opt'
  1497.      Each of these might improve performance on some code.
  1498.      Analysis of Fortran code optimization and the resulting
  1499.      optimizations triggered by the above options were contributed by
  1500.      Toon Moene (<toon@moene.indiv.nluug.nl>).
  1501.      These three options are intended to be removed someday, once they
  1502.      have helped determine the efficacy of various approaches to
  1503.      improving the performance of Fortran code.
  1504.      Please let us know how use of these options affects the
  1505.      performance of your production code.  We're particularly
  1506.      interested in code that runs faster when these options are
  1507.      *disabled*, and in non-Fortran code that benefits when they are
  1508.      *enabled* via the above `gcc' command-line options.
  1509.    *Note Options That Control Optimization: (gcc)Optimize Options, for
  1510. more information on options to optimize the generated machine code.
  1511. File: g77.info,  Node: Preprocessor Options,  Next: Directory Options,  Prev: Optimize Options,  Up: Invoking G77
  1512. Options Controlling the Preprocessor
  1513. ====================================
  1514.    These options control the C preprocessor, which is run on each C
  1515. source file before actual compilation.
  1516.    *Note Options Controlling the Preprocessor: (gcc)Preprocessor
  1517. Options, for information on C preprocessor options.
  1518.    Some of these options also affect how `g77' processes the `INCLUDE'
  1519. directive.  Since this directive is processed even when preprocessing
  1520. is not requested, it is not described in this section.  *Note Options
  1521. for Directory Search: Directory Options, for information on how `g77'
  1522. processes the `INCLUDE' directive.
  1523.    However, the `INCLUDE' directive does not apply preprocessing to the
  1524. contents of the included file itself.
  1525.    Therefore, any file that contains preprocessor directives (such as
  1526. `#include', `#define', and `#if') must be included via the `#include'
  1527. directive, not via the `INCLUDE' directive.  Therefore, any file
  1528. containing preprocessor directives, if included, is necessarily
  1529. included by a file that itself contains preprocessor directives.
  1530. File: g77.info,  Node: Directory Options,  Next: Code Gen Options,  Prev: Preprocessor Options,  Up: Invoking G77
  1531. Options for Directory Search
  1532. ============================
  1533.    These options affect how the `cpp' preprocessor searches for files
  1534. specified via the `#include' directive.  Therefore, when compiling
  1535. Fortran programs, they are meaningful when the preproecssor is used.
  1536.    Some of these options also affect how `g77' searches for files
  1537. specified via the `INCLUDE' directive, although files included by that
  1538. directive are not, themselves, preprocessed.  These options are:
  1539. `-I-'
  1540. `-IDIR'
  1541.      These affect interpretation of the `INCLUDE' directive (as well as
  1542.      of the `#include' directive of the `cpp' preprocessor).
  1543.      Note that `-IDIR' must be specified *without* any spaces between
  1544.      `-I' and the directory name--that is, `-Ifoo/bar' is valid, but
  1545.      `-I foo/bar' is rejected by the `g77' compiler (though the
  1546.      preprocessor supports the latter form).  Also note that the
  1547.      general behavior of `-I' and `INCLUDE' is pretty much the same as
  1548.      of `-I' with `#include' in the `cpp' preprocessor, with regard to
  1549.      looking for `header.gcc' files and other such things.
  1550.      *Note Options for Directory Search: (gcc)Directory Options, for
  1551.      information on the `-I' option.
  1552. File: g77.info,  Node: Code Gen Options,  Next: Environment Variables,  Prev: Directory Options,  Up: Invoking G77
  1553. Options for Code Generation Conventions
  1554. =======================================
  1555.    These machine-independent options control the interface conventions
  1556. used in code generation.
  1557.    Most of them have both positive and negative forms; the negative form
  1558. of `-ffoo' would be `-fno-foo'.  In the table below, only one of the
  1559. forms is listed--the one which is not the default.  You can figure out
  1560. the other form by either removing `no-' or adding it.
  1561. `-fno-automatic'
  1562.      Treat each program unit as if the `SAVE' statement was specified
  1563.      for every local variable and array referenced in it.  Does not
  1564.      affect common blocks.  (Some Fortran compilers provide this option
  1565.      under the name `-static'.)
  1566. `-finit-local-zero'
  1567.      Specify that variables and arrays that are local to a program unit
  1568.      (not in a common block and not passed as an argument) are to be
  1569.      initialized to binary zeros.
  1570.      Since there is a run-time penalty for initialization of variables
  1571.      that are not given the `SAVE' attribute, it might be a good idea
  1572.      to also use `-fno-automatic' with `-finit-local-zero'.
  1573. `-fno-f2c'
  1574.      Do not generate code designed to be compatible with code generated
  1575.      by `f2c'; use the GNU calling conventions instead.
  1576.      The `f2c' calling conventions require functions that return type
  1577.      `REAL(KIND=1)' to actually return the C type `double', and
  1578.      functions that return type `COMPLEX' to return the values via an
  1579.      extra argument in the calling sequence that points to where to
  1580.      store the return value.  Under the GNU calling conventions, such
  1581.      functions simply return their results as they would in GNU
  1582.      C--`REAL(KIND=1)' functions return the C type `float', and
  1583.      `COMPLEX' functions return the GNU C type `complex' (or its
  1584.      `struct' equivalent).
  1585.      This does not affect the generation of code that interfaces with
  1586.      the `libf2c' library.
  1587.      However, because the `libf2c' library uses `f2c' calling
  1588.      conventions, `g77' rejects attempts to pass intrinsics implemented
  1589.      by routines in this library as actual arguments when `-fno-f2c' is
  1590.      used, to avoid bugs when they are actually called by code
  1591.      expecting the GNU calling conventions to work.
  1592.      For example, `INTRINSIC ABS;CALL FOO(ABS)' is rejected when
  1593.      `-fno-f2c' is in force.  (Future versions of the `g77' run-time
  1594.      library might offer routines that provide GNU-callable versions of
  1595.      the routines that implement the `f2c'-callable intrinsics that may
  1596.      be passed as actual arguments, so that valid programs need not be
  1597.      rejected when `-fno-f2c' is used.)
  1598.      *Caution:* If `-fno-f2c' is used when compiling any source file
  1599.      used in a program, it must be used when compiling *all* Fortran
  1600.      source files used in that program.
  1601. `-ff2c-library'
  1602.      Specify that use of `libf2c' is required.  This is the default for
  1603.      the current version of `g77'.
  1604.      Currently it is not valid to specify `-fno-f2c-library'.  This
  1605.      option is provided so users can specify it in shell scripts that
  1606.      build programs and libraries that require the `libf2c' library,
  1607.      even when being compiled by future versions of `g77' that might
  1608.      otherwise default to generating code for an incompatible library.
  1609. `-fno-underscoring'
  1610.      Do not transform names of entities specified in the Fortran source
  1611.      file by appending underscores to them.
  1612.      With `-funderscoring' in effect, `g77' appends two underscores to
  1613.      names with underscores and one underscore to external names with
  1614.      no underscores.  (`g77' also appends two underscores to internal
  1615.      names with underscores to avoid naming collisions with external
  1616.      names.  The `-fno-second-underscore' option disables appending of
  1617.      the second underscore in all cases.)
  1618.      This is done to ensure compatibility with code produced by many
  1619.      UNIX Fortran compilers, including `f2c', which perform the same
  1620.      transformations.
  1621.      Use of `-fno-underscoring' is not recommended unless you are
  1622.      experimenting with issues such as integration of (GNU) Fortran into
  1623.      existing system environments (vis-a-vis existing libraries, tools,
  1624.      and so on).
  1625.      For example, with `-funderscoring', and assuming other defaults
  1626.      like `-fcase-lower' and that `j()' and `max_count()' are external
  1627.      functions while `my_var' and `lvar' are local variables, a
  1628.      statement like
  1629.           I = J() + MAX_COUNT (MY_VAR, LVAR)
  1630.      is implemented as something akin to:
  1631.           i = j_() + max_count__(&my_var__, &lvar);
  1632.      With `-fno-underscoring', the same statement is implemented as:
  1633.           i = j() + max_count(&my_var, &lvar);
  1634.      Use of `-fno-underscoring' allows direct specification of
  1635.      user-defined names while debugging and when interfacing
  1636.      `g77'-compiled code with other languages.
  1637.      Note that just because the names match does *not* mean that the
  1638.      interface implemented by `g77' for an external name matches the
  1639.      interface implemented by some other language for that same name.
  1640.      That is, getting code produced by `g77' to link to code produced
  1641.      by some other compiler using this or any other method can be only a
  1642.      small part of the overall solution--getting the code generated by
  1643.      both compilers to agree on issues other than naming can require
  1644.      significant effort, and, unlike naming disagreements, linkers
  1645.      normally cannot detect disagreements in these other areas.
  1646.      Also, note that with `-fno-underscoring', the lack of appended
  1647.      underscores introduces the very real possibility that a
  1648.      user-defined external name will conflict with a name in a system
  1649.      library, which could make finding unresolved-reference bugs quite
  1650.      difficult in some cases--they might occur at program run time, and
  1651.      show up only as buggy behavior at run time.
  1652.      In future versions of `g77', we hope to improve naming and linking
  1653.      issues so that debugging always involves using the names as they
  1654.      appear in the source, even if the names as seen by the linker are
  1655.      mangled to prevent accidental linking between procedures with
  1656.      incompatible interfaces.
  1657. `-fno-second-underscore'
  1658.      Do not append a second underscore to names of entities specified
  1659.      in the Fortran source file.
  1660.      This option has no effect if `-fno-underscoring' is in effect.
  1661.      Otherwise, with this option, an external name such as `MAX_COUNT'
  1662.      is implemented as a reference to the link-time external symbol
  1663.      `max_count_', instead of `max_count__'.
  1664. `-fno-ident'
  1665.      Ignore the `#ident' directive.
  1666. `-fzeros'
  1667.      Treat initial values of zero as if they were any other value.
  1668.      As of version 0.5.18, `g77' normally treats `DATA' and other
  1669.      statements that are used to specify initial values of zero for
  1670.      variables and arrays as if no values were actually specified, in
  1671.      the sense that no diagnostics regarding multiple initializations
  1672.      are produced.
  1673.      This is done to speed up compiling of programs that initialize
  1674.      large arrays to zeros.
  1675.      Use `-fzeros' to revert to the simpler, slower behavior that can
  1676.      catch multiple initializations by keeping track of all
  1677.      initializations, zero or otherwise.
  1678.      *Caution:* Future versions of `g77' might disregard this option
  1679.      (and its negative form, the default) or interpret it somewhat
  1680.      differently.  The interpretation changes will affect only
  1681.      non-standard programs; standard-conforming programs should not be
  1682.      affected.
  1683. `-fdebug-kludge'
  1684.      Emit information on `COMMON' and `EQUIVALENCE' members that might
  1685.      help users of debuggers work around lack of proper debugging
  1686.      information on such members.
  1687.      As of version 0.5.19, `g77' offers this option to emit information
  1688.      on members of aggregate areas to help users while debugging.  This
  1689.      information consists of establishing the type and contents of each
  1690.      such member so that, when a debugger is asked to print the
  1691.      contents, the printed information provides rudimentary debugging
  1692.      information.  This information identifies the name of the
  1693.      aggregate area (either the `COMMON' block name, or the
  1694.      `g77'-assigned name for the `EQUIVALENCE' name) and the offset, in
  1695.      bytes, of the member from the beginning of the area.
  1696.      Using `gdb', this information is not coherently displayed in the
  1697.      Fortran language mode, so temporarily switching to the C language
  1698.      mode to display the information is suggested.  Use `set language
  1699.      c' and `set language fortran' to accomplish this.
  1700.      For example:
  1701.                 COMMON /X/A,B
  1702.                 EQUIVALENCE (C,D)
  1703.                 CHARACTER XX*50
  1704.                 EQUIVALENCE (I,XX(20:20))
  1705.                 END
  1706.           
  1707.           GDB is free software and you are welcome to distribute copies of it
  1708.            under certain conditions; type "show copying" to see the conditions.
  1709.           There is absolutely no warranty for GDB; type "show warranty" for details.
  1710.           GDB 4.16 (lm-gnits-dwim), Copyright 1996 Free Software Foundation, Inc...
  1711.           (gdb) b MAIN__
  1712.           Breakpoint 1 at 0t1200000201120112: file cd.f, line 5.
  1713.           (gdb) r
  1714.           Starting program: /home/user/a.out
  1715.           
  1716.           Breakpoint 1, MAIN__ () at cd.f:5
  1717.           Current language:  auto; currently fortran
  1718.           (gdb) set language c
  1719.           Warning: the current language does not match this frame.
  1720.           (gdb) p a
  1721.           $2 = "At (COMMON) `x_' plus 0 bytes"
  1722.           (gdb) p b
  1723.           $3 = "At (COMMON) `x_' plus 4 bytes"
  1724.           (gdb) p c
  1725.           $4 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
  1726.           (gdb) p d
  1727.           $5 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
  1728.           (gdb) p i
  1729.           $6 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 20 bytes"
  1730.           (gdb) p xx
  1731.           $7 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 1 bytes"
  1732.           (gdb) set language fortran
  1733.           (gdb)
  1734.      Use `-fdebug-kludge' to generate this information, which might
  1735.      make some programs noticeably larger.
  1736.      *Caution:* Future versions of `g77' might disregard this option
  1737.      (and its negative form).  Current plans call for this to happen
  1738.      when published versions of `g77' and `gdb' exist that provide
  1739.      proper access to debugging information on `COMMON' and
  1740.      `EQUIVALENCE' members.
  1741. `-fno-emulate-complex'
  1742.      Implement `COMPLEX' arithmetic using the facilities in the `gcc'
  1743.      back end that provide direct support of `complex' arithmetic,
  1744.      instead of emulating the arithmetic.
  1745.      `gcc' has some known problems in its back-end support for
  1746.      `complex' arithmetic, due primarily to the support not being
  1747.      completed as of version 2.7.2.2.  Other front ends for the `gcc'
  1748.      back end avoid this problem by emulating `complex' arithmetic at a
  1749.      higher level, so the back end sees arithmetic on the real and
  1750.      imaginary components.  To make `g77' more portable to systems
  1751.      where `complex' support in the `gcc' back end is particularly
  1752.      troublesome, `g77' now defaults to performing the same kinds of
  1753.      emulations done by these other front ends.
  1754.      Use `-fno-emulate-complex' to try the `complex' support in the
  1755.      `gcc' back end, in case it works and produces faster programs.  So
  1756.      far, all the known bugs seem to involve compile-time crashes,
  1757.      rather than the generation of incorrect code.
  1758.      Use of this option should not affect how Fortran code compiled by
  1759.      `g77' works in terms of its interfaces to other code, e.g. that
  1760.      compiled by `f2c'.
  1761.      *Caution:* Future versions of `g77' are likely to change the
  1762.      default for this option to `-fno-emulate-complex', and perhaps
  1763.      someday ignore both forms of this option.
  1764.      Also, it is possible that use of the `-fno-emulate-complex' option
  1765.      could result in incorrect code being silently produced by `g77'.
  1766.      But, this is generally true of compilers anyway, so, as usual, test
  1767.      the programs you compile before assuming they are working.
  1768. `-falias-check'
  1769. `-fargument-alias'
  1770. `-fargument-noalias'
  1771. `-fno-argument-noalias-global'
  1772.      These options specify to what degree aliasing (overlap) is
  1773.      permitted between arguments (passed as pointers) and `COMMON'
  1774.      (external, or public) storage.
  1775.      The default for Fortran code, as mandated by the FORTRAN 77 and
  1776.      Fortran 90 standards, is `-fargument-noalias-global'.  The default
  1777.      for code written in the C language family is `-fargument-alias'.
  1778.      Note that, on some systems, compiling with `-fforce-addr' in
  1779.      effect can produce more optimal code when the default aliasing
  1780.      options are in effect (and when optimization is enabled).
  1781.      *Note Aliasing Assumed To Work::, for detailed information on the
  1782.      implications of compiling Fortran code that depends on the ability
  1783.      to alias dummy arguments.
  1784. `-fno-globals'
  1785.      Disable diagnostics about inter-procedural analysis problems, such
  1786.      as disagreements about the type of a function or a procedure's
  1787.      argument, that might cause a compiler crash when attempting to
  1788.      inline a reference to a procedure within a program unit.  (The
  1789.      diagnostics themselves are still produced, but as warnings, unless
  1790.      `-Wno-globals' is specified, in which case no relevant diagnostics
  1791.      are produced.)
  1792.      Further, this option disables such inlining, to avoid compiler
  1793.      crashes resulting from incorrect code that would otherwise be
  1794.      diagnosed.
  1795.      As such, this option might be quite useful when compiling
  1796.      existing, "working" code that happens to have a few bugs that do
  1797.      not generally show themselves, but `g77' exposes via a diagnostic.
  1798.      Use of this option therefore has the effect of instructing `g77'
  1799.      to behave more like it did up through version 0.5.19.1, when it
  1800.      paid little or no attention to disagreements between program units
  1801.      about a procedure's type and argument information, and when it
  1802.      performed no inlining of procedures (except statement functions).
  1803.      Without this option, `g77' defaults to performing the potentially
  1804.      inlining procedures as it started doing in version 0.5.20, but as
  1805.      of version 0.5.21, it also diagnoses disagreements that might
  1806.      cause such inlining to crash the compiler.
  1807.    *Note Options for Code Generation Conventions: (gcc)Code Gen
  1808. Options, for information on more options offered by the GBE shared by
  1809. `g77', `gcc', and other GNU compilers.
  1810.    Some of these do *not* work when compiling programs written in
  1811. Fortran:
  1812. `-fpcc-struct-return'
  1813. `-freg-struct-return'
  1814.      You should not use these except strictly the same way as you used
  1815.      them to build the version of `libf2c' with which you will be
  1816.      linking all code compiled by `g77' with the same option.
  1817. `-fshort-double'
  1818.      This probably either has no effect on Fortran programs, or makes
  1819.      them act loopy.
  1820. `-fno-common'
  1821.      Do not use this when compiling Fortran programs, or there will be
  1822.      Trouble.
  1823. `-fpack-struct'
  1824.      This probably will break any calls to the `libf2c' library, at the
  1825.      very least, even if it is built with the same option.
  1826. File: g77.info,  Node: Environment Variables,  Prev: Code Gen Options,  Up: Invoking G77
  1827. Environment Variables Affecting GNU Fortran
  1828. ===========================================
  1829.    GNU Fortran currently does not make use of any environment variables
  1830. to control its operation above and beyond those that affect the
  1831. operation of `gcc'.
  1832.    *Note Environment Variables Affecting GNU CC: (gcc)Environment
  1833. Variables, for information on environment variables.
  1834. File: g77.info,  Node: News,  Next: Changes,  Prev: Invoking G77,  Up: Top
  1835. News About GNU Fortran
  1836. **********************
  1837.    Changes made to recent versions of GNU Fortran are listed below,
  1838. with the most recent version first.
  1839.    The changes are generally listed in order:
  1840.   1. Code-generation and run-time-library bugs
  1841.   2. Compiler and run-time-library crashes involving valid code
  1842.   3. New features
  1843.   4. Fixes and enhancements to existing features
  1844.   5. New diagnostics
  1845.   6. Internal improvements
  1846.   7. Miscellany
  1847.    This order is not strict--for example, some items involve a
  1848. combination of these elements.
  1849. In 0.5.22:
  1850. ==========
  1851.    * Fix code generation for iterative `DO' loops that have one or more
  1852.      references to the iteration variable, or to aliases of it, in
  1853.      their control expressions.  For example, `DO 10 J=2,J' now is
  1854.      compiled correctly.
  1855.    * Fix a code-generation bug that afflicted Intel x86 targets when
  1856.      `-O2' was specified compiling, for example, an old version of the
  1857.      `DNRM2' routine.
  1858.      The x87 coprocessor stack was being mismanaged in cases involving
  1859.      assigned `GOTO' and `ASSIGN'.
  1860.    * Fix `DTime' intrinsic so as not to truncate results to integer
  1861.      values (on some systems).
  1862.    * Fix `SIGNAL' intrinsic so it offers portable support for 64-bit
  1863.      systems (such as Digital Alphas running GNU/Linux).
  1864.    * Fix run-time crash involving `NAMELIST' on 64-bit machines such as
  1865.      Alphas.
  1866.    * Fix `g77' version of `libf2c' so it no longer produces a spurious
  1867.      `I/O recursion' diagnostic at run time when an I/O operation (such
  1868.      as `READ *,I') is interrupted in a manner that causes the program
  1869.      to be terminated via the `f_exit' routine (such as via `C-c').
  1870.    * Fix `g77' crash triggered by `CASE' statement with an omitted
  1871.      lower or upper bound.
  1872.    * Fix `g77' crash compiling references to `CPU_Time' intrinsic.
  1873.    * Fix `g77' crash (or apparently infinite run-time) when compiling
  1874.      certain complicated expressions involving `COMPLEX' arithmetic
  1875.      (especially multiplication).
  1876.    * Fix `g77' crash on statements such as `PRINT *,
  1877.      (REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'.
  1878.    * Fix a `g++' crash.
  1879.    * Support `FORMAT(I<EXPR>)' when EXPR is a compile-time constant
  1880.      `INTEGER' expression.
  1881.    * Fix `g77' `-g' option so procedures that use `ENTRY' can be
  1882.      stepped through, line by line, in `gdb'.
  1883.    * Fix a profiling-related bug in `gcc' back end for Intel x86
  1884.      architecture.
  1885.    * Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'.
  1886.    * Allow any numeric argument to intrinsics `Int2' and `Int8'.
  1887.    * Use `tempnam', if available, to open scratch files (as in
  1888.      `OPEN(STATUS='SCRATCH')' so that the `TMPDIR' environment variable,
  1889.      if present, is used.
  1890.    * Rename the `gcc' keyword `restrict' to `__restrict__', to avoid
  1891.      rejecting valid, existing, C programs.  Support for `restrict' is
  1892.      now more like support for `complex'.
  1893.    * Fix `-fpedantic' to not reject procedure invocations such as
  1894.      `I=J()' and `CALL FOO()'.
  1895.    * Fix `-fugly-comma' to affect invocations of only external
  1896.      procedures.  Restore rejection of gratuitous trailing omitted
  1897.      arguments to intrinsics, as in `I=MAX(3,4,,)'.
  1898.    * Fix compiler so it accepts `-fgnu-intrinsics-*' and
  1899.      `-fbadu77-intrinsics-*' options.
  1900.    * Improve diagnostic messages from `libf2c' so it is more likely
  1901.      that the printing of the active format string is limited to the
  1902.      string, with no trailing garbage being printed.
  1903.      (Unlike `f2c', `g77' did not append a null byte to its compiled
  1904.      form of every format string specified via a `FORMAT' statement.
  1905.      However, `f2c' would exhibit the problem anyway for a statement
  1906.      like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the
  1907.      format string.)
  1908.    * Improve compilation of FORMAT expressions so that a null byte is
  1909.      appended to the last operand if it is a constant.  This provides a
  1910.      cleaner run-time diagnostic as provided by `libf2c' for statements
  1911.      like `PRINT '(I1', 42'.
  1912.    * Fix various crashes involving code with diagnosed errors.
  1913.    * Fix cross-compilation bug when configuring `libf2c'.
  1914.    * Improve diagnostics.
  1915.    * Improve documentation and indexing.
  1916.    * Upgrade to `libf2c' as of 1997-09-23.  This fixes a formatted-I/O
  1917.      bug that afflicted 64-bit systems with 32-bit integers (such as
  1918.      Digital Alpha running GNU/Linux).
  1919. In 0.5.21:
  1920. ==========
  1921.    * Fix a code-generation bug introduced by 0.5.20 caused by loop
  1922.      unrolling (by specifying `-funroll-loops' or similar).  This bug
  1923.      afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C,
  1924.      C++, Fortran, and so on).
  1925.    * Fix a code-generation bug manifested when combining local
  1926.      `EQUIVALENCE' with a `DATA' statement that follows the first
  1927.      executable statement (or is treated as an executable-context
  1928.      statement as a result of using the `-fpedantic' option).
  1929.    * Fix a compiler crash that occured when an integer division by a
  1930.      constant zero is detected.  Instead, when the `-W' option is
  1931.      specified, the `gcc' back end issues a warning about such a case.
  1932.      This bug afflicted all code compiled by version 2.7.2.2.f.2 of
  1933.      `gcc' (C, C++, Fortran, and so on).
  1934.    * Fix a compiler crash that occurred in some cases of procedure
  1935.      inlining.  (Such cases became more frequent in 0.5.20.)
  1936.    * Fix a compiler crash resulting from using `DATA' or similar to
  1937.      initialize a `COMPLEX' variable or array to zero.
  1938.    * Fix compiler crashes involving use of `AND', `OR', or `XOR'
  1939.      intrinsics.
  1940.    * Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE'
  1941.      variable as the target of an `ASSIGN' or assigned-`GOTO' statement.
  1942.    * Fix compiler crashes due to using the name of a some non-standard
  1943.      intrinsics (such as `FTELL' or `FPUTC') as such and as the name of
  1944.      a procedure or common block.  Such dual use of a name in a program
  1945.      is allowed by the standard.
  1946.    * Place automatic arrays on the stack, even if `SAVE' or the
  1947.      `-fno-automatic' option is in effect.  This avoids a compiler
  1948.      crash in some cases.
  1949.    * The `-malign-double' option now reliably aligns `DOUBLE PRECISION'
  1950.      optimally on Pentium and Pentium Pro architectures (586 and 686 in
  1951.      `gcc').
  1952.    * New option `-Wno-globals' disables warnings about "suspicious" use
  1953.      of a name both as a global name and as the implicit name of an
  1954.      intrinsic, and warnings about disagreements over the number or
  1955.      natures of arguments passed to global procedures, or the natures
  1956.      of the procedures themselves.
  1957.      The default is to issue such warnings, which are new as of this
  1958.      version of `g77'.
  1959.    * New option `-fno-globals' disables diagnostics about potentially
  1960.      fatal disagreements analysis problems, such as disagreements over
  1961.      the number or natures of arguments passed to global procedures, or
  1962.      the natures of those procedures themselves.
  1963.      The default is to issue such diagnostics and flag the compilation
  1964.      as unsuccessful.  With this option, the diagnostics are issued as
  1965.      warnings, or, if `-Wno-globals' is specified, are not issued at
  1966.      all.
  1967.      This option also disables inlining of global procedures, to avoid
  1968.      compiler crashes resulting from coding errors that these
  1969.      diagnostics normally would identify.
  1970.    * Diagnose cases where a reference to a procedure disagrees with the
  1971.      type of that procedure, or where disagreements about the number or
  1972.      nature of arguments exist.  This avoids a compiler crash.
  1973.    * Fix parsing bug whereby `g77' rejected a second initialization
  1974.      specification immediately following the first's closing `/' without
  1975.      an intervening comma in a `DATA' statement, and the second
  1976.      specification was an implied-DO list.
  1977.    * Improve performance of the `gcc' back end so certain complicated
  1978.      expressions involving `COMPLEX' arithmetic (especially
  1979.      multiplication) don't appear to take forever to compile.
  1980.    * Fix a couple of profiling-related bugs in `gcc' back end.
  1981.    * Integrate GNU Ada's (GNAT's) changes to the back end, which
  1982.      consist almost entirely of bug fixes.  These fixes are circa
  1983.      version 3.10p of GNAT.
  1984.    * Include some other `gcc' fixes that seem useful in `g77''s version
  1985.      of `gcc'.  (See `gcc/ChangeLog' for details--compare it to that
  1986.      file in the vanilla `gcc-2.7.2.3.tar.gz' distribution.)
  1987.    * Fix `libU77' routines that accept file and other names to strip
  1988.      trailing blanks from them, for consistency with other
  1989.      implementations.  Blanks may be forcibly appended to such names by
  1990.      appending a single null character (`CHAR(0)') to the significant
  1991.      trailing blanks.
  1992.    * Fix `CHMOD' intrinsic to work with file names that have embedded
  1993.      blanks, commas, and so on.
  1994.    * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
  1995.      argument.
  1996.    * Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts
  1997.      arguments in the correct order.  Documentation fixed accordingly,
  1998.      and for `GMTIME()' and `LTIME()' as well.
  1999.    * Make many changes to `libU77' intrinsics to support existing code
  2000.      more directly.
  2001.      Such changes include allowing both subroutine and function forms
  2002.      of many routines, changing `MCLOCK()' and `TIME()' to return
  2003.      `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
  2004.      return `INTEGER(KIND=2)' values, and placing functions that are
  2005.      intended to perform side effects in a new intrinsic group,
  2006.      `badu77'.
  2007.    * Improve `libU77' so it is more portable.
  2008.    * Add options `-fbadu77-intrinsics-delete',
  2009.      `-fbadu77-intrinsics-hide', and so on.
  2010.    * Fix crashes involving diagnosed or invalid code.
  2011.    * `g77' and `gcc' now do a somewhat better job detecting and
  2012.      diagnosing arrays that are too large to handle before these cause
  2013.      diagnostics during the assembler or linker phase, a compiler
  2014.      crash, or generation of incorrect code.
  2015.    * Make some fixes to alias analysis code.
  2016.    * Add support for `restrict' keyword in `gcc' front end.
  2017.    * Support `gcc' version 2.7.2.3 (modified by `g77' into version
  2018.      2.7.2.3.f.1), and remove support for prior versions of `gcc'.
  2019.    * Incorporate GNAT's patches to the `gcc' back end into `g77''s, so
  2020.      GNAT users do not need to apply GNAT's patches to build both GNAT
  2021.      and `g77' from the same source tree.
  2022.    * Modify `make' rules and related code so that generation of Info
  2023.      documentation doesn't require compilation using `gcc'.  Now, any
  2024.      ANSI C compiler should be adequate to produce the `g77'
  2025.      documentation (in particular, the tables of intrinsics) from
  2026.      scratch.
  2027.    * Add `INT2' and `INT8' intrinsics.
  2028.    * Add `CPU_TIME' intrinsic.
  2029.    * Add `ALARM' intrinsic.
  2030.    * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
  2031.      `INTEGER(KIND=2)'.
  2032.    * Warn when explicit type declaration disagrees with the type of an
  2033.      intrinsic invocation.
  2034.    * Support `*f771' entry in `gcc' `specs' file.
  2035.    * Fix typo in `make' rule `g77-cross', used only for cross-compiling.
  2036.    * Fix `libf2c' build procedure to re-archive library if previous
  2037.      attempt to archive was interrupted.
  2038.    * Change `gcc' to unroll loops only during the last invocation (of
  2039.      as many as two invocations) of loop optimization.
  2040.    * Improve handling of `-fno-f2c' so that code that attempts to pass
  2041.      an intrinsic as an actual argument, such as `CALL FOO(ABS)', is
  2042.      rejected due to the fact that the run-time-library routine is,
  2043.      effectively, compiled with `-ff2c' in effect.
  2044.    * Fix `g77' driver to recognize `-fsyntax-only' as an option that
  2045.      inhibits linking, just like `-c' or `-S', and to recognize and
  2046.      properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs',
  2047.      and `-Xlinker' options.
  2048.    * Upgrade to `libf2c' as of 1997-08-16.
  2049.    * Modify `libf2c' to consistently and clearly diagnose recursive I/O
  2050.      (at run time).
  2051.    * `g77' driver now prints version information (such as produced by
  2052.      `g77 -v') to `stderr' instead of `stdout'.
  2053.    * The `.r' suffix now designates a Ratfor source file, to be
  2054.      preprocessed via the `ratfor' command, available separately.
  2055.    * Fix some aspects of how `gcc' determines what kind of system is
  2056.      being configured and what kinds are supported.  For example, GNU
  2057.      Linux/Alpha ELF systems now are directly supported.
  2058.    * Improve diagnostics.
  2059.    * Improve documentation and indexing.
  2060.    * Include all pertinent files for `libf2c' that come from
  2061.      `netlib.bell-labs.com'; give any such files that aren't quite
  2062.      accurate in `g77''s version of `libf2c' the suffix `.netlib'.
  2063.    * Reserve `INTEGER(KIND=0)' for future use.
  2064. In 0.5.20:
  2065. ==========
  2066.    * The `-fno-typeless-boz' option is now the default.
  2067.      This option specifies that non-decimal-radix constants using the
  2068.      prefixed-radix form (such as `Z'1234'') are to be interpreted as
  2069.      `INTEGER' constants.  Specify `-ftypeless-boz' to cause such
  2070.      constants to be interpreted as typeless.
  2071.      (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
  2072.    * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
  2073.      now are the defaults.
  2074.      Some programs might use names that clash with intrinsic names
  2075.      defined (and now enabled) by these options or by the new `libU77'
  2076.      intrinsics.  Users of such programs might need to compile them
  2077.      differently (using, for example, `-ff90-intrinsics-disable') or,
  2078.      better yet, insert appropriate `EXTERNAL' statements specifying
  2079.      that these names are not intended to be names of intrinsics.
  2080.    * The `ALWAYS_FLUSH' macro is no longer defined when building
  2081.      `libf2c', which should result in improved I/O performance,
  2082.      especially over NFS.
  2083.      *Note:* If you have code that depends on the behavior of `libf2c'
  2084.      when built with `ALWAYS_FLUSH' defined, you will have to modify
  2085.      `libf2c' accordingly before building it from this and future
  2086.      versions of `g77'.
  2087.    * Dave Love's implementation of `libU77' has been added to the
  2088.      version of `libf2c' distributed with and built as part of `g77'.
  2089.      `g77' now knows about the routines in this library as intrinsics.
  2090.    * New option `-fvxt' specifies that the source file is written in
  2091.      VXT Fortran, instead of GNU Fortran.
  2092.    * The `-fvxt-not-f90' option has been deleted, along with its
  2093.      inverse, `-ff90-not-vxt'.
  2094.      If you used one of these deleted options, you should re-read the
  2095.      pertinent documentation to determine which options, if any, are
  2096.      appropriate for compiling your code with this version of `g77'.
  2097.    * The `-fugly' option now issues a warning, as it likely will be
  2098.      removed in a future version.
  2099.      (Enabling all the `-fugly-*' options is unlikely to be feasible,
  2100.      or sensible, in the future, so users should learn to specify only
  2101.      those `-fugly-*' options they really need for a particular source
  2102.      file.)
  2103.    * The `-fugly-assumed' option, introduced in version 0.5.19, has
  2104.      been changed to better accommodate old and new code.
  2105.    * Make a number of fixes to the `g77' front end and the `gcc' back
  2106.      end to better support Alpha (AXP) machines.  This includes
  2107.      providing at least one bug-fix to the `gcc' back end for Alphas.
  2108.    * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
  2109.      and `%LOC()' construct now return values of integer type that is
  2110.      the same width (holds the same number of bits) as the pointer type
  2111.      on the machine.
  2112.      On most machines, this won't make a difference, whereas on Alphas,
  2113.      the type these constructs return is `INTEGER*8' instead of the
  2114.      more common `INTEGER*4'.
  2115.    * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
  2116.      in `complex' support in the `gcc' back end.  New option
  2117.      `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
  2118.    * Fix bug whereby `REAL A(1)', for example, caused a compiler crash
  2119.      if `-fugly-assumed' was in effect and A was a local (automatic)
  2120.      array.  That case is no longer affected by the new handling of
  2121.      `-fugly-assumed'.
  2122.    * Fix `g77' command driver so that `g77 -o foo.f' no longer deletes
  2123.      `foo.f' before issuing other diagnostics, and so the `-x' option
  2124.      is properly handled.
  2125.    * Enable inlining of subroutines and functions by the `gcc' back end.
  2126.      This works as it does for `gcc' itself--program units may be
  2127.      inlined for invocations that follow them in the same program unit,
  2128.      as long as the appropriate compile-time options are specified.
  2129.    * Dummy arguments are no longer assumed to potentially alias
  2130.      (overlap) other dummy arguments or `COMMON' areas when any of
  2131.      these are defined (assigned to) by Fortran code.
  2132.      This can result in faster and/or smaller programs when compiling
  2133.      with optimization enabled, though on some systems this effect is
  2134.      observed only when `-fforce-addr' also is specified.
  2135.      New options `-falias-check', `-fargument-alias',
  2136.      `-fargument-noalias', and `-fno-argument-noalias-global' control
  2137.      the way `g77' handles potential aliasing.
  2138.    * The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line.
  2139.    * The bug-fix for 0.5.19.1 has been re-done.  The `g77' compiler has
  2140.      been changed back to assume `libf2c' has no aliasing problems in
  2141.      its implementations of the `COMPLEX' (and `DOUBLE COMPLEX')
  2142.      intrinsics.  The `libf2c' has been changed to have no such
  2143.      problems.
  2144.      As a result, 0.5.20 is expected to offer improved performance over
  2145.      0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to
  2146.      this change alone.
  2147.      *Note:* This change requires version 0.5.20 of `libf2c', at least,
  2148.      when linking code produced by any versions of `g77' other than
  2149.      0.5.19.1.  Use `g77 -v' to determine the version numbers of the
  2150.      `libF77', `libI77', and `libU77' components of the `libf2c'
  2151.      library.  (If these version numbers are not printed--in
  2152.      particular, if the linker complains about unresolved references to
  2153.      names like `g77__fvers__'--that strongly suggests your
  2154.      installation has an obsolete version of `libf2c'.)
  2155.    * New option `-fugly-assign' specifies that the same memory
  2156.      locations are to be used to hold the values assigned by both
  2157.      statements `I = 3' and `ASSIGN 10 TO I', for example.  (Normally,
  2158.      `g77' uses a separate memory location to hold assigned statement
  2159.      labels.)
  2160.    * `FORMAT' and `ENTRY' statements now are allowed to precede
  2161.      `IMPLICIT NONE' statements.
  2162.    * Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER'
  2163.      type, instead of crashing, at compile time.
  2164.    * Fix crashes involving diagnosed or invalid code.
  2165.    * Change approach to building `libf2c' archive (`libf2c.a') so that
  2166.      members are added to it only when truly necessary, so the user
  2167.      that installs an already-built `g77' doesn't need to have write
  2168.      access to the build tree (whereas the user doing the build might
  2169.      not have access to install new software on the system).
  2170.    * Support `gcc' version 2.7.2.2 (modified by `g77' into version
  2171.      2.7.2.2.f.2), and remove support for prior versions of `gcc'.
  2172.    * Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build
  2173.      procedures.
  2174.    * Improve general build procedures for `g77', fixing minor bugs
  2175.      (such as deletion of any file named `f771' in the parent directory
  2176.      of `gcc/').
  2177.    * Enable full support of `INTEGER*8' available in `libf2c' and
  2178.      `f2c.h' so that `f2c' users may make full use of its features via
  2179.      the `g77' version of `f2c.h' and the `INTEGER*8' support routines
  2180.      in the `g77' version of `libf2c'.
  2181.    * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
  2182.      information on the library.
  2183.    * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
  2184.      instead of synonyms for the generic intrinsic `REAL'.
  2185.    * New intrinsics have been added.  These are `REALPART', `IMAGPART',
  2186.      `COMPLEX', `LONG', and `SHORT'.
  2187.    * A new group of intrinsics, `gnu', has been added to contain the
  2188.      new `REALPART', `IMAGPART', and `COMPLEX' intrinsics.  An old
  2189.      group, `dcp', has been removed.
  2190.    * Complain about industry-wide ambiguous references `REAL(EXPR)' and
  2191.      `AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type
  2192.      other than `COMPLEX'), unless `-ff90' option specifies Fortran 90
  2193.      interpretation or new `-fugly-complex' option, in conjunction with
  2194.      `-fnot-f90', specifies `f2c' interpretation.
  2195.    * Make improvements to diagnostics.
  2196.    * Speed up compiler a bit.
  2197.    * Improvements to documentation and indexing, including a new
  2198.      chapter containing information on one, later more, diagnostics
  2199.      that users are directed to pull up automatically via a message in
  2200.      the diagnostic itself.
  2201.      (Hence the menu item `M' for the node `Diagnostics' in the
  2202.      top-level menu of the Info documentation.)
  2203. In 0.5.19.1:
  2204. ============
  2205.    * Code-generation bugs afflicting operations on complex data have
  2206.      been fixed.
  2207.      These bugs occurred when assigning the result of an operation to a
  2208.      complex variable (or array element) that also served as an input
  2209.      to that operation.
  2210.      The operations affected by this bug were: `CONJG()', `DCONJG()',
  2211.      `CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()',
  2212.      `CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE
  2213.      COMPLEX' operand to an `INTEGER' power.  (The related generic and
  2214.      `Z'-prefixed intrinsics, such as `ZSIN()', also were affected.)
  2215.      For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C'
  2216.      is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed.
  2217. In 0.5.19:
  2218. ==========
  2219.    * Fix `FORMAT' statement parsing so negative values for specifiers
  2220.      such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as
  2221.      negative.
  2222.    * Fix `SIGNAL' intrinsic so it once again accepts a procedure as its
  2223.      second argument.
  2224.    * A temporary kludge option provides bare-bones information on
  2225.      `COMMON' and `EQUIVALENCE' members at debug time.
  2226.    * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
  2227.      loops.
  2228.    * New `-fno-silent' option causes names of program units to be
  2229.      printed as they are compiled, in a fashion similar to UNIX `f77'
  2230.      and `f2c'.
  2231.    * New `-fugly-assumed' option specifies that arrays dimensioned via
  2232.      `DIMENSION X(1)', for example, are to be treated as assumed-size.
  2233.    * New `-fno-typeless-boz' option specifies that non-decimal-radix
  2234.      constants using the prefixed-radix form (such as `Z'1234'') are to
  2235.      be interpreted as `INTEGER' constants.
  2236.    * New `-ff66' option is a "shorthand" option that specifies
  2237.      behaviors considered appropriate for FORTRAN 66 programs.
  2238.    * New `-ff77' option is a "shorthand" option that specifies
  2239.      behaviors considered appropriate for UNIX `f77' programs.
  2240.    * New `-fugly-comma' and `-fugly-logint' options provided to perform
  2241.      some of what `-fugly' used to do.  `-fugly' and `-fno-ugly' are
  2242.      now "shorthand" options, in that they do nothing more than enable
  2243.      (or disable) other `-fugly-*' options.
  2244.    * Fix parsing of assignment statements involving targets that are
  2245.      substrings of elements of `CHARACTER' arrays having names such as
  2246.      `READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'.
  2247.    * Fix crashes involving diagnosed code.
  2248.    * Fix handling of local `EQUIVALENCE' areas so certain cases of
  2249.      valid Fortran programs are not misdiagnosed as improperly
  2250.      extending the area backwards.
  2251.    * Support `gcc' version 2.7.2.1.
  2252.    * Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build
  2253.      procedures.
  2254.    * Change code generation for list-directed I/O so it allows for new
  2255.      versions of `libf2c' that might return non-zero status codes for
  2256.      some operations previously assumed to always return zero.
  2257.      This change not only affects how `IOSTAT=' variables are set by
  2258.      list-directed I/O, it also affects whether `END=' and `ERR='
  2259.      labels are reached by these operations.
  2260.    * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
  2261.      `libf2c'.
  2262.    * Modify `fseek_()' in `libf2c' to be more portable (though, in
  2263.      practice, there might be no systems where this matters) and to
  2264.      catch invalid `whence' arguments.
  2265.    * Some useless warnings from the `-Wunused' option have been
  2266.      eliminated.
  2267.    * Fix a problem building the `f771' executable on AIX systems by
  2268.      linking with the `-bbigtoc' option.
  2269.    * Abort configuration if `gcc' has not been patched using the patch
  2270.      file provided in the `gcc/f/gbe/' subdirectory.
  2271.    * Add options `--help' and `--version' to the `g77' command, to
  2272.      conform to GNU coding guidelines.  Also add printing of `g77'
  2273.      version number when the `--verbose' (`-v') option is used.
  2274.    * Change internally generated name for local `EQUIVALENCE' areas to
  2275.      one based on the alphabetically sorted first name in the list of
  2276.      names for entities placed at the beginning of the areas.
  2277.    * Improvements to documentation and indexing.
  2278. In 0.5.18:
  2279. ==========
  2280.    * Add some rudimentary support for `INTEGER*1', `INTEGER*2',
  2281.      `INTEGER*8', and their `LOGICAL' equivalents.  (This support works
  2282.      on most, maybe all, `gcc' targets.)
  2283.      Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
  2284.      the patch for this!
  2285.      Among the missing elements from the support for these features are
  2286.      full intrinsic support and constants.
  2287.    * Add some rudimentary support for the `BYTE' and `WORD'
  2288.      type-declaration statements.  `BYTE' corresponds to `INTEGER*1',
  2289.      while `WORD' corresponds to `INTEGER*2'.
  2290.      Thanks to Scott Snyder (<snyder@d0sgif.fnal.gov>) for providing
  2291.      the patch for this!
  2292.    * The compiler code handling intrinsics has been largely rewritten
  2293.      to accommodate the new types.  No new intrinsics or arguments for
  2294.      existing intrinsics have been added, so there is, at this point,
  2295.      no intrinsic to convert to `INTEGER*8', for example.
  2296.    * Support automatic arrays in procedures.
  2297.    * Reduce space/time requirements for handling large *sparsely*
  2298.      initialized aggregate arrays.  This improvement applies to only a
  2299.      subset of the general problem to be addressed in 0.6.
  2300.    * Treat initial values of zero as if they weren't specified (in DATA
  2301.      and type-declaration statements).  The initial values will be set
  2302.      to zero anyway, but the amount of compile time processing them
  2303.      will be reduced, in some cases significantly (though, again, this
  2304.      is only a subset of the general problem to be addressed in 0.6).
  2305.      A new option, `-fzeros', is introduced to enable the traditional
  2306.      treatment of zeros as any other value.
  2307.    * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as
  2308.      returning a `REAL' result, instead of as a `DOUBLE PRECISION'
  2309.      result.  (Here, `Z' is `DOUBLE COMPLEX'.)
  2310.      With `-fno-f90' in force, the interpretation remains unchanged,
  2311.      since this appears to be how at least some F77 code using the
  2312.      `DOUBLE COMPLEX' extension expected it to work.
  2313.      Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in
  2314.      extended F77, it appears to be the same as `REAL(REAL(Z))'.
  2315.    * An expression involving exponentiation, where both operands were
  2316.      type `INTEGER' and the right-hand operand was negative, was
  2317.      erroneously evaluated.
  2318.    * Fix bugs involving `DATA' implied-`DO' constructs (these involved
  2319.      an errant diagnostic and a crash, both on good code, one involving
  2320.      subsequent statement-function definition).
  2321.    * Close `INCLUDE' files after processing them, so compiling source
  2322.      files with lots of `INCLUDE' statements does not result in being
  2323.      unable to open `INCLUDE' files after all the available file
  2324.      descriptors are used up.
  2325.    * Speed up compiling, especially of larger programs, and perhaps
  2326.      slightly reduce memory utilization while compiling (this is *not*
  2327.      the improvement planned for 0.6 involving large aggregate
  2328.      areas)--these improvements result from simply turning off some
  2329.      low-level code to do self-checking that hasn't been triggered in a
  2330.      long time.
  2331.    * Introduce three new options that implement optimizations in the
  2332.      `gcc' back end (GBE).  These options are `-fmove-all-movables',
  2333.      `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by
  2334.      default, for Fortran compilations.  These optimizations are
  2335.      intended to help toon Fortran programs.
  2336.    * Patch the GBE to do a better job optimizing certain kinds of
  2337.      references to array elements.
  2338.    * Due to patches to the GBE, the version number of `gcc' also is
  2339.      patched to make it easier to manage installations, especially
  2340.      useful if it turns out a `g77' change to the GBE has a bug.
  2341.      The `g77'-modified version number is the `gcc' version number with
  2342.      the string `.f.N' appended, where `f' identifies the version as
  2343.      enhanced for Fortran, and N is `1' for the first Fortran patch for
  2344.      that version of `gcc', `2' for the second, and so on.
  2345.      So, this introduces version 2.7.2.f.1 of `gcc'.
  2346.    * Make several improvements and fixes to diagnostics, including the
  2347.      removal of two that were inappropriate or inadequate.
  2348.    * Warning about two successive arithmetic operators, produced by
  2349.      `-Wsurprising', now produced *only* when both operators are,
  2350.      indeed, arithmetic (not relational/boolean).
  2351.    * `-Wsurprising' now warns about the remaining cases of using
  2352.      non-integral variables for implied-`DO' loops, instead of these
  2353.      being rejected unless `-fpedantic' or `-fugly' specified.
  2354.    * Allow `SAVE' of a local variable or array, even after it has been
  2355.      given an initial value via `DATA', for example.
  2356.    * Introduce an Info version of `g77' documentation, which supercedes
  2357.      `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'.  These files
  2358.      will be removed in a future release.  The files `gcc/f/BUGS',
  2359.      `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from
  2360.      the texinfo source when distributions are made.
  2361.      This effort was inspired by a first pass at translating
  2362.      `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis
  2363.      (<ronis@onsager.chem.mcgill.ca>).
  2364.    * New `-fno-second-underscore' option to specify that, when
  2365.      `-funderscoring' is in effect, a second underscore is not to be
  2366.      appended to Fortran names already containing an underscore.
  2367.    * Change the way iterative `DO' loops work to follow the F90
  2368.      standard.  In particular, calculation of the iteration count is
  2369.      still done by converting the start, end, and increment parameters
  2370.      to the type of the `DO' variable, but the result of the
  2371.      calculation is always converted to the default `INTEGER' type.
  2372.      (This should have no effect on existing code compiled by `g77',
  2373.      but code written to assume that use of a *wider* type for the `DO'
  2374.      variable will result in an iteration count being fully calculated
  2375.      using that wider type (wider than default `INTEGER') must be
  2376.      rewritten.)
  2377.    * Support `gcc' version 2.7.2.
  2378.    * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build
  2379.      procedures.
  2380.      Note that the email addresses related to `f2c' have changed--the
  2381.      distribution site now is named `netlib.bell-labs.com', and the
  2382.      maintainer's new address is <dmg@bell-labs.com>.
  2383. In 0.5.17:
  2384. ==========
  2385.    * *Fix serious bug* in `g77 -v' command that can cause removal of a
  2386.      system's `/dev/null' special file if run by user `root'.
  2387.      *All users* of version 0.5.16 should ensure that they have not
  2388.      removed `/dev/null' or replaced it with an ordinary file (e.g. by
  2389.      comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'.
  2390.      If the output isn't basically the same, contact your system
  2391.      administrator about restoring `/dev/null' to its proper status).
  2392.      This bug is particularly insidious because removing `/dev/null' as
  2393.      a special file can go undetected for quite a while, aside from
  2394.      various applications and programs exhibiting sudden, strange
  2395.      behaviors.
  2396.      I sincerely apologize for not realizing the implications of the
  2397.      fact that when `g77 -v' runs the `ld' command with `-o /dev/null'
  2398.      that `ld' tries to *remove* the executable it is supposed to build
  2399.      (especially if it reports unresolved references, which it should
  2400.      in this case)!
  2401.    * Fix crash on `CHARACTER*(*) FOO' in a main or block data program
  2402.      unit.
  2403.    * Fix crash that can occur when diagnostics given outside of any
  2404.      program unit (such as when input file contains `@foo').
  2405.    * Fix crashes, infinite loops (hangs), and such involving diagnosed
  2406.      code.
  2407.    * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy
  2408.      arguments, and issue clearer error message in cases where target
  2409.      of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which
  2410.      should never happen).
  2411.    * Make `libf2c' build procedures work on more systems again by
  2412.      eliminating unnecessary invocations of `ld -r -x' and `mv'.
  2413.    * Fix omission of `-funix-intrinsics-...' options in list of
  2414.      permitted options to compiler.
  2415.    * Fix failure to always diagnose missing type declaration for
  2416.      `IMPLICIT NONE'.
  2417.    * Fix compile-time performance problem (which could sometimes crash
  2418.      the compiler, cause a hang, or whatever, due to a bug in the back
  2419.      end) involving exponentiation with a large `INTEGER' constant for
  2420.      the right-hand operator (e.g. `I**32767').
  2421.    * Fix build procedures so cross-compiling `g77' (the `fini' utility
  2422.      in particular) is properly built using the host compiler.
  2423.    * Add new `-Wsurprising' option to warn about constructs that are
  2424.      interpreted by the Fortran standard (and `g77') in ways that are
  2425.      surprising to many programmers.
  2426.    * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing
  2427.      `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics.
  2428.      *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where
  2429.      you might use these as generic intrinsics, to improve likelihood
  2430.      of diagnostics (instead of subtle run-time bugs) when using a
  2431.      compiler that doesn't support these as intrinsics (e.g. `f2c').
  2432.    * Remove from `-fno-pedantic' the diagnostic about `DO' with
  2433.      non-`INTEGER' index variable; issue that under `-Wsurprising'
  2434.      instead.
  2435.    * Clarify some diagnostics that say things like "ignored" when that's
  2436.      misleading.
  2437.    * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands.
  2438.    * Minor improvements to code generation for various operations on
  2439.      `LOGICAL' operands.
  2440.    * Minor improvement to code generation for some `DO' loops on some
  2441.      machines.
  2442.    * Support `gcc' version 2.7.1.
  2443.    * Upgrade to `libf2c' as of 1995-11-15.
  2444. In 0.5.16:
  2445. ==========
  2446.    * Fix a code-generation bug involving complicated `EQUIVALENCE'
  2447.      statements not involving `COMMON'.
  2448.    * Fix code-generation bugs involving invoking "gratis" library
  2449.      procedures in `libf2c' from code compiled with `-fno-f2c' by
  2450.      making these procedures known to `g77' as intrinsics (not affected
  2451.      by -fno-f2c).  This is known to fix code invoking `ERF()',
  2452.      `ERFC()', `DERF()', and `DERFC()'.
  2453.    * Update `libf2c' to include netlib patches through 1995-08-16, and
  2454.      `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more
  2455.      consistent with other Fortran implementations by outputting
  2456.      leading zeros in formatted and list-directed output.
  2457.    * Fix a code-generation bug involving adjustable dummy arrays with
  2458.      high bounds whose primaries are changed during procedure
  2459.      execution, and which might well improve code-generation
  2460.      performance for such arrays compared to `f2c' plus `gcc' (but
  2461.      apparently only when using `gcc-2.7.0' or later).
  2462.    * Fix a code-generation bug involving invocation of `COMPLEX' and
  2463.      `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE
  2464.      COMPLEX' divides, when the result of the invocation or divide is
  2465.      assigned directly to a variable that overlaps one or more of the
  2466.      arguments to the invocation or divide.
  2467.    * Fix crash by not generating new optimal code for `X**I' if `I' is
  2468.      nonconstant and the expression is used to dimension a dummy array,
  2469.      since the `gcc' back end does not support the necessary mechanics
  2470.      (and the `gcc' front end rejects the equivalent construct, as it
  2471.      turns out).
  2472.    * Fix crash on expressions like `COMPLEX**INTEGER'.
  2473.    * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a
  2474.      `DOUBLE COMPLEX' constant to an `INTEGER' constant power.
  2475.    * Fix crashes and such involving diagnosed code.
  2476.    * Diagnose, instead of crashing on, statement function definitions
  2477.      having duplicate dummy argument names.
  2478.    * Fix bug causing rejection of good code involving statement function
  2479.      definitions.
  2480.    * Fix bug resulting in debugger not knowing size of local equivalence
  2481.      area when any member of area has initial value (via `DATA', for
  2482.      example).
  2483.    * Fix installation bug that prevented installation of `g77' driver.
  2484.      Provide for easy selection of whether to install copy of `g77' as
  2485.      `f77' to replace the broken code.
  2486.    * Fix `gcc' driver (affects `g77' thereby) to not gratuitously
  2487.      invoke the `f771' program (e.g. when `-E' is specified).
  2488.    * Fix diagnostic to point to correct source line when it immediately
  2489.      follows an `INCLUDE' statement.
  2490.    * Support more compiler options in `gcc'/`g77' when compiling
  2491.      Fortran files.  These options include `-p', `-pg', `-aux-info',
  2492.      `-P', correct setting of version-number macros for preprocessing,
  2493.      full recognition of `-O0', and automatic insertion of
  2494.      configuration-specific linker specs.
  2495.    * Add new intrinsics that interface to existing routines in `libf2c':
  2496.      `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH',
  2497.      `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'.  Note that
  2498.      `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic
  2499.      subroutines, not functions (since they have side effects), so to
  2500.      get the return values from `SIGNAL' and `SYSTEM', append a final
  2501.      argument specifying an `INTEGER' variable or array element (e.g.
  2502.      `CALL SYSTEM('rm foo',ISTAT)').
  2503.    * Add new intrinsic group named `unix' to contain the new intrinsics,
  2504.      and by default enable this new group.
  2505.    * Move `LOC()' intrinsic out of the `vxt' group to the new `unix'
  2506.      group.
  2507.    * Improve `g77' so that `g77 -v' by itself (or with certain other
  2508.      options, including `-B', `-b', `-i', `-nostdlib', and `-V')
  2509.      reports lots more useful version info, and so that long-form
  2510.      options `gcc' accepts are understood by `g77' as well (even in
  2511.      truncated, unambiguous forms).
  2512.    * Add new `g77' option `--driver=name' to specify driver when
  2513.      default, `gcc', isn't appropriate.
  2514.    * Add support for `#' directives (as output by the preprocessor) in
  2515.      the compiler, and enable generation of those directives by the
  2516.      preprocessor (when compiling `.F' files) so diagnostics and
  2517.      debugging info are more useful to users of the preprocessor.
  2518.    * Produce better diagnostics, more like `gcc', with info such as `In
  2519.      function `foo':' and `In file included from...:'.
  2520.    * Support `gcc''s `-fident' and `-fno-ident' options.
  2521.    * When `-Wunused' in effect, don't warn about local variables used as
  2522.      statement-function dummy arguments or `DATA' implied-`DO' iteration
  2523.      variables, even though, strictly speaking, these are not uses of
  2524.      the variables themselves.
  2525.    * When `-W -Wunused' in effect, don't warn about unused dummy
  2526.      arguments at all, since there's no way to turn this off for
  2527.      individual cases (`g77' might someday start warning about
  2528.      these)--applies to `gcc' versions 2.7.0 and later, since earlier
  2529.      versions didn't warn about unused dummy arguments.
  2530.    * New option `-fno-underscoring' that inhibits transformation of
  2531.      names (by appending one or two underscores) so users may experiment
  2532.      with implications of such an environment.
  2533.    * Minor improvement to `gcc/f/info' module to make it easier to build
  2534.      `g77' using the native (non-`gcc') compiler on certain machines
  2535.      (but definitely not all machines nor all non-`gcc' compilers).
  2536.      Please do not report bugs showing problems compilers have with
  2537.      macros defined in `gcc/f/target.h' and used in places like
  2538.      `gcc/f/expr.c'.
  2539.    * Add warning to be printed for each invocation of the compiler if
  2540.      the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32
  2541.      bits, since `g77' is known to not work well for such cases (to be
  2542.      fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet:
  2543.      Actual Bugs.).
  2544.    * Lots of new documentation (though work is still needed to put it
  2545.      into canonical GNU format).
  2546.    * Build `libf2c' with `-g0', not `-g2', in effect (by default), to
  2547.      produce smaller library without lots of debugging clutter.
  2548. In 0.5.15:
  2549. ==========
  2550.    * Fix bad code generation involving `X**I' and temporary, internal
  2551.      variables generated by `g77' and the back end (such as for `DO'
  2552.      loops).
  2553.    * Fix crash given `CHARACTER A;DATA A/.TRUE./'.
  2554.    * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'.
  2555.    * Fix crash or other erratic behavior when null character constant
  2556.      (`''') is encountered.
  2557.    * Fix crash or other erratic behavior involving diagnosed code.
  2558.    * Fix code generation for external functions returning type `REAL'
  2559.      when the `-ff2c' option is in force (which it is by default) so
  2560.      that `f2c' compatibility is indeed provided.
  2561.    * Disallow `COMMON I(10)' if `I' has previously been specified with
  2562.      an array declarator.
  2563.    * New `-ffixed-line-length-N' option, where N is the maximum length
  2564.      of a typical fixed-form line, defaulting to 72 columns, such that
  2565.      characters beyond column N are ignored, or N is `none', meaning no
  2566.      characters are ignored.  does not affect lines with `&' in column
  2567.      1, which are always processed as if `-ffixed-line-length-none' was
  2568.      in effect.
  2569.    * No longer generate better code for some kinds of array references,
  2570.      as `gcc' back end is to be fixed to do this even better, and it
  2571.      turned out to slow down some code in some cases after all.
  2572.    * In `COMMON' and `EQUIVALENCE' areas with any members given initial
  2573.      values (e.g. via `DATA'), uninitialized members now always
  2574.      initialized to binary zeros (though this is not required by the
  2575.      standard, and might not be done in future versions of `g77').
  2576.      Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially
  2577.      those with members of more than one type), the uninitialized
  2578.      members were initialized to spaces, to cater to `CHARACTER' types,
  2579.      but it seems no existing code expects that, while much existing
  2580.      code expects binary zeros.
  2581. In 0.5.14:
  2582. ==========
  2583.    * Don't emit bad code when low bound of adjustable array is
  2584.      nonconstant and thus might vary as an expression at run time.
  2585.    * Emit correct code for calculation of number of trips in `DO' loops
  2586.      for cases where the loop should not execute at all.  (This bug
  2587.      affected cases where the difference between the begin and end
  2588.      values was less than the step count, though probably not for
  2589.      floating-point cases.)
  2590.    * Fix crash when extra parentheses surround item in `DATA'
  2591.      implied-`DO' list.
  2592.    * Fix crash over minor internal inconsistencies in handling
  2593.      diagnostics, just substitute dummy strings where necessary.
  2594.    * Fix crash on some systems when compiling call to `MVBITS()'
  2595.      intrinsic.
  2596.    * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a
  2597.      string of one or more digits.
  2598.    * Fix crash on `DCMPLX()' with a single `INTEGER' argument.
  2599.    * Fix various crashes involving code with diagnosed errors.
  2600.    * Support `-I' option for `INCLUDE' statement, plus `gcc''s
  2601.      `header.gcc' facility for handling systems like MS-DOS.
  2602.    * Allow `INCLUDE' statement to be continued across multiple lines,
  2603.      even allow it to coexist with other statements on the same line.
  2604.    * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this
  2605.      fixes a bug involving infinite loops reading EOF with empty
  2606.      list-directed I/O list.
  2607.    * Remove all the `g77'-specific auto-configuration scripts, code,
  2608.      and so on, except for temporary substitutes for bsearch() and
  2609.      strtoul(), as too many configure/build problems were reported in
  2610.      these areas.  People will have to fix their systems' problems
  2611.      themselves, or at least somewhere other than `g77', which expects
  2612.      a working ANSI C environment (and, for now, a GNU C compiler to
  2613.      compile `g77' itself).
  2614.    * Complain if initialized common redeclared as larger in subsequent
  2615.      program unit.
  2616.    * Warn if blank common initialized, since its size can vary and hence
  2617.      related warnings that might be helpful won't be seen.
  2618.    * New `-fbackslash' option, on by default, that causes `\' within
  2619.      `CHARACTER' and Hollerith constants to be interpreted a la GNU C.
  2620.      Note that this behavior is somewhat different from `f2c''s, which
  2621.      supports only a limited subset of backslash (escape) sequences.
  2622.    * Make `-fugly-args' the default.
  2623.    * New `-fugly-init' option, on by default, that allows
  2624.      typeless/Hollerith to be specified as initial values for variables
  2625.      or named constants (`PARAMETER'), and also allows
  2626.      character<->numeric conversion in those contexts--turn off via
  2627.      `-fno-ugly-init'.
  2628.    * New `-finit-local-zero' option to initialize local variables to
  2629.      binary zeros.  This does not affect whether they are `SAVE'd, i.e.
  2630.      made automatic or static.
  2631.    * New `-Wimplicit' option to warn about implicitly typed variables,
  2632.      arrays, and functions.  (Basically causes all program units to
  2633.      default to `IMPLICIT NONE'.)
  2634.    * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless
  2635.      `-O' not specified, since `-Wuninitialized' requires `-O'), and
  2636.      implies `-Wunused' as well.
  2637.    * `-Wunused' no longer gives spurious messages for unused `EXTERNAL'
  2638.      names (since they are assumed to refer to block data program
  2639.      units, to make use of libraries more reliable).
  2640.    * Support `%LOC()' and `LOC()' of character arguments.
  2641.    * Support null (zero-length) character constants and expressions.
  2642.    * Support `f2c''s `IMAG()' generic intrinsic.
  2643.    * Support `ICHAR()', `IACHAR()', and `LEN()' of character
  2644.      expressions that are valid in assignments but not normally as
  2645.      actual arguments.
  2646.    * Support `f2c'-style `&' in column 1 to mean continuation line.
  2647.    * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in
  2648.      `BLOCK DATA', even though these are not allowed by the standard.
  2649.    * Allow `RETURN' in main program unit.
  2650.    * Changes to Hollerith-constant support to obey Appendix C of the
  2651.      standard:
  2652.         - Now padded on the right with zeros, not spaces.
  2653.         - Hollerith "format specifications" in the form of arrays of
  2654.           non-character allowed.
  2655.         - Warnings issued when non-space truncation occurs when
  2656.           converting to another type.
  2657.         - When specified as actual argument, now passed by reference to
  2658.           `INTEGER' (padded on right with spaces if constant too small,
  2659.           otherwise fully intact if constant wider the `INTEGER' type)
  2660.           instead of by value.
  2661.      *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)',
  2662.      which it treats exactly the same as `CALL FOO('X')', but which the
  2663.      standard and `g77' treat as `CALL FOO(%REF('X   '))' (padded with
  2664.      as many spaces as necessary to widen to `INTEGER'), essentially.
  2665.    * Changes and fixes to typeless-constant support:
  2666.         - Now treated as a typeless double-length `INTEGER' value.
  2667.         - Warnings issued when overflow occurs.
  2668.         - Padded on the left with zeros when converting to a larger
  2669.           type.
  2670.         - Should be properly aligned and ordered on the target machine
  2671.           for whatever type it is turned into.
  2672.         - When specified as actual argument, now passed as reference to
  2673.           a default `INTEGER' constant.
  2674.    * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to
  2675.      the expression plus a length for the expression just as if it were
  2676.      a `CHARACTER' expression.  For example, `CALL FOO(%DESCR(D))',
  2677.      where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'.
  2678.    * Name of multi-entrypoint master function changed to incorporate
  2679.      the name of the primary entry point instead of a decimal value, so
  2680.      the name of the master function for `SUBROUTINE X' with alternate
  2681.      entry points is now `__g77_masterfun_x'.
  2682.    * Remove redundant message about zero-step-count `DO' loops.
  2683.    * Clean up diagnostic messages, shortening many of them.
  2684.    * Fix typo in `g77' man page.
  2685.    * Clarify implications of constant-handling bugs in `f/BUGS'.
  2686.    * Generate better code for `**' operator with a right-hand operand of
  2687.      type `INTEGER'.
  2688.    * Generate better code for `SQRT()' and `DSQRT()', also when
  2689.      `-ffast-math' specified, enable better code generation for `SIN()'
  2690.      and `COS()'.
  2691.    * Generate better code for some kinds of array references.
  2692.    * Speed up lexing somewhat (this makes the compilation phase
  2693.      noticeably faster).
  2694. File: g77.info,  Node: Changes,  Next: Language,  Prev: News,  Up: Top
  2695. User-visible Changes
  2696. ********************
  2697.    This section describes changes to `g77' that are visible to the
  2698. programmers who actually write and maintain Fortran code they compile
  2699. with `g77'.  Information on changes to installation procedures, changes
  2700. to the documentation, and bug fixes is not provided here, unless it is
  2701. likely to affect how users use `g77'.  *Note News About GNU Fortran:
  2702. News, for information on such changes to `g77'.
  2703.    To find out about existing bugs and ongoing plans for GNU Fortran,
  2704. retrieve `ftp://alpha.gnu.org/g77.plan' or, if you cannot do that, email
  2705. <fortran@gnu.org> asking for a recent copy of the GNU Fortran `.plan'
  2706. file.
  2707. In 0.5.21:
  2708. ==========
  2709.    * When the `-W' option is specified, `gcc', `g77', and other GNU
  2710.      compilers that incorporate the `gcc' back end as modified by
  2711.      `g77', issue a warning about integer division by constant zero.
  2712.    * New option `-Wno-globals' disables warnings about "suspicious" use
  2713.      of a name both as a global name and as the implicit name of an
  2714.      intrinsic, and warnings about disagreements over the number or
  2715.      natures of arguments passed to global procedures, or the natures
  2716.      of the procedures themselves.
  2717.      The default is to issue such warnings, which are new as of this
  2718.      version of `g77'.
  2719.    * New option `-fno-globals' disables diagnostics about potentially
  2720.      fatal disagreements analysis problems, such as disagreements over
  2721.      the number or natures of arguments passed to global procedures, or
  2722.      the natures of those procedures themselves.
  2723.      The default is to issue such diagnostics and flag the compilation
  2724.      as unsuccessful.  With this option, the diagnostics are issued as
  2725.      warnings, or, if `-Wno-globals' is specified, are not issued at
  2726.      all.
  2727.      This option also disables inlining of global procedures, to avoid
  2728.      compiler crashes resulting from coding errors that these
  2729.      diagnostics normally would identify.
  2730.    * Fix `libU77' routines that accept file names to strip trailing
  2731.      spaces from them, for consistency with other implementations.
  2732.    * Fix `SIGNAL' intrinsic so it accepts an optional third `Status'
  2733.      argument.
  2734.    * Make many changes to `libU77' intrinsics to support existing code
  2735.      more directly.
  2736.      Such changes include allowing both subroutine and function forms
  2737.      of many routines, changing `MCLOCK()' and `TIME()' to return
  2738.      `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to
  2739.      return `INTEGER(KIND=2)' values, and placing functions that are
  2740.      intended to perform side effects in a new intrinsic group,
  2741.      `badu77'.
  2742.    * Add options `-fbadu77-intrinsics-delete',
  2743.      `-fbadu77-intrinsics-hide', and so on.
  2744.    * Add `INT2' and `INT8' intrinsics.
  2745.    * Add `CPU_TIME' intrinsic.
  2746.    * `CTIME' intrinsic now accepts any `INTEGER' argument, not just
  2747.      `INTEGER(KIND=2)'.
  2748. In 0.5.20:
  2749. ==========
  2750.    * The `-fno-typeless-boz' option is now the default.
  2751.      This option specifies that non-decimal-radix constants using the
  2752.      prefixed-radix form (such as `Z'1234'') are to be interpreted as
  2753.      `INTEGER(KIND=1)' constants.  Specify `-ftypeless-boz' to cause
  2754.      such constants to be interpreted as typeless.
  2755.      (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.)
  2756.      *Note Options Controlling Fortran Dialect: Fortran Dialect Options,
  2757.      for information on the `-ftypeless-boz' option.
  2758.    * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable'
  2759.      now are the defaults.
  2760.      Some programs might use names that clash with intrinsic names
  2761.      defined (and now enabled) by these options or by the new `libU77'
  2762.      intrinsics.  Users of such programs might need to compile them
  2763.      differently (using, for example, `-ff90-intrinsics-disable') or,
  2764.      better yet, insert appropriate `EXTERNAL' statements specifying
  2765.      that these names are not intended to be names of intrinsics.
  2766.    * The `ALWAYS_FLUSH' macro is no longer defined when building
  2767.      `libf2c', which should result in improved I/O performance,
  2768.      especially over NFS.
  2769.      *Note:* If you have code that depends on the behavior of `libf2c'
  2770.      when built with `ALWAYS_FLUSH' defined, you will have to modify
  2771.      `libf2c' accordingly before building it from this and future
  2772.      versions of `g77'.
  2773.      *Note Output Assumed To Flush::, for more information.
  2774.    * Dave Love's implementation of `libU77' has been added to the
  2775.      version of `libf2c' distributed with and built by `g77'.  `g77'
  2776.      now knows about the routines in this library as intrinsics.
  2777.    * New option `-fvxt' specifies that the source file is written in
  2778.      VXT Fortran, instead of GNU Fortran.
  2779.      *Note VXT Fortran::, for more information on the constructs
  2780.      recognized when the `-fvxt' option is specified.
  2781.    * The `-fvxt-not-f90' option has been deleted, along with its
  2782.      inverse, `-ff90-not-vxt'.
  2783.      If you used one of these deleted options, you should re-read the
  2784.      pertinent documentation to determine which options, if any, are
  2785.      appropriate for compiling your code with this version of `g77'.
  2786.      *Note Other Dialects::, for more information.
  2787.    * The `-fugly' option now issues a warning, as it likely will be
  2788.      removed in a future version.
  2789.      (Enabling all the `-fugly-*' options is unlikely to be feasible,
  2790.      or sensible, in the future, so users should learn to specify only
  2791.      those `-fugly-*' options they really need for a particular source
  2792.      file.)
  2793.    * The `-fugly-assumed' option, introduced in version 0.5.19, has
  2794.      been changed to better accommodate old and new code.  *Note Ugly
  2795.      Assumed-Size Arrays::, for more information.
  2796.    * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic
  2797.      and `%LOC()' construct now return values of `INTEGER(KIND=0)' type,
  2798.      as defined by the GNU Fortran language.
  2799.      This type is wide enough (holds the same number of bits) as the
  2800.      character-pointer type on the machine.
  2801.      On most systems, this won't make a noticable difference, whereas
  2802.      on Alphas and other systems with 64-bit pointers, the
  2803.      `INTEGER(KIND=0)' type is equivalent to `INTEGER(KIND=2)' (often
  2804.      referred to as `INTEGER*8') instead of the more common
  2805.      `INTEGER(KIND=1)' (often referred to as `INTEGER*4').
  2806.    * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs
  2807.      in `complex' support in the `gcc' back end.  New option
  2808.      `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior.
  2809.    * Dummy arguments are no longer assumed to potentially alias
  2810.      (overlap) other dummy arguments or `COMMON' areas when any of
  2811.      these are defined (assigned to) by Fortran code.
  2812.      This can result in faster and/or smaller programs when compiling
  2813.      with optimization enabled, though on some systems this effect is
  2814.      observed only when `-fforce-addr' also is specified.
  2815.      New options `-falias-check', `-fargument-alias',
  2816.      `-fargument-noalias', and `-fno-argument-noalias-global' control
  2817.      the way `g77' handles potential aliasing.
  2818.      *Note Aliasing Assumed To Work::, for detailed information on why
  2819.      the new defaults might result in some programs no longer working
  2820.      the way they did when compiled by previous versions of `g77'.
  2821.    * New option `-fugly-assign' specifies that the same memory
  2822.      locations are to be used to hold the values assigned by both
  2823.      statements `I = 3' and `ASSIGN 10 TO I', for example.  (Normally,
  2824.      `g77' uses a separate memory location to hold assigned statement
  2825.      labels.)
  2826.      *Note Ugly Assigned Labels::, for more information.
  2827.    * `FORMAT' and `ENTRY' statements now are allowed to precede
  2828.      `IMPLICIT NONE' statements.
  2829.    * Enable full support of `INTEGER(KIND=2)' (often referred to as
  2830.      `INTEGER*8') available in `libf2c' and `f2c.h' so that `f2c' users
  2831.      may make full use of its features via the `g77' version of `f2c.h'
  2832.      and the `INTEGER(KIND=2)' support routines in the `g77' version of
  2833.      `libf2c'.
  2834.    * Improve `g77' driver and `libf2c' so that `g77 -v' yields version
  2835.      information on the library.
  2836.    * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics,
  2837.      instead of synonyms for the generic intrinsic `REAL'.
  2838.    * New intrinsics have been added.  These are `REALPART', `IMAGPART',
  2839.      `COMPLEX', `LONG', and `SHORT'.
  2840.    * A new group of intrinsics, `gnu', has been added to contain the
  2841.      new `REALPART', `IMAGPART', and `COMPLEX' intrinsics.  An old
  2842.      group, `dcp', has been removed.
  2843. In 0.5.19:
  2844. ==========
  2845.    * A temporary kludge option provides bare-bones information on
  2846.      `COMMON' and `EQUIVALENCE' members at debug time.  *Note Options
  2847.      for Code Generation Conventions: Code Gen Options, for information
  2848.      on the `-fdebug-kludge' option.
  2849.    * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO'
  2850.      loops.
  2851.    * New `-fno-silent' option causes names of program units to be
  2852.      printed as they are compiled, in a fashion similar to UNIX `f77'
  2853.      and `f2c'.
  2854.    * New `-fugly-assumed' option specifies that arrays dimensioned via
  2855.      `DIMENSION X(1)', for example, are to be treated as assumed-size.
  2856.    * New `-fno-typeless-boz' option specifies that non-decimal-radix
  2857.      constants using the prefixed-radix form (such as `Z'1234'') are to
  2858.      be interpreted as `INTEGER(KIND=1)' constants.
  2859.    * New `-ff66' option is a "shorthand" option that specifies
  2860.      behaviors considered appropriate for FORTRAN 66 programs.
  2861.    * New `-ff77' option is a "shorthand" option that specifies
  2862.      behaviors considered appropriate for UNIX `f77' programs.
  2863.    * New `-fugly-comma' and `-fugly-logint' options provided to perform
  2864.      some of what `-fugly' used to do.  `-fugly' and `-fno-ugly' are
  2865.      now "shorthand" options, in that they do nothing more than enable
  2866.      (or disable) other `-fugly-*' options.
  2867.    * Change code generation for list-directed I/O so it allows for new
  2868.      versions of `libf2c' that might return non-zero status codes for
  2869.      some operations previously assumed to always return zero.
  2870.      This change not only affects how `IOSTAT=' variables are set by
  2871.      list-directed I/O, it also affects whether `END=' and `ERR='
  2872.      labels are reached by these operations.
  2873.    * Add intrinsic support for new `FTELL' and `FSEEK' procedures in
  2874.      `libf2c'.
  2875.    * Add options `--help' and `--version' to the `g77' command, to
  2876.      conform to GNU coding guidelines.  Also add printing of `g77'
  2877.      version number when the `--verbose' (`-v') option is used.
  2878. In 0.5.18:
  2879. ==========
  2880.    * The `BYTE' and `WORD' statements now are supported, to a limited
  2881.      extent.
  2882.    * `INTEGER*1', `INTEGER*2', `INTEGER*8', and their `LOGICAL'
  2883.      equivalents, now are supported to a limited extent.  Among the
  2884.      missing elements are complete intrinsic and constant support.
  2885.    * Support automatic arrays in procedures.  For example, `REAL A(N)',
  2886.      where `A' is not a dummy argument, specifies that `A' is an
  2887.      automatic array.  The size of `A' is calculated from the value of
  2888.      `N' each time the procedure is called, that amount of space is
  2889.      allocated, and that space is freed when the procedure returns to
  2890.      its caller.
  2891.    * Add `-fno-zeros' option, enabled by default, to reduce
  2892.      compile-time CPU and memory usage for code that provides initial
  2893.      zero values for variables and arrays.
  2894.    * Introduce three new options that apply to all compilations by
  2895.      `g77'-aware GNU compilers--`-fmove-all-movables',
  2896.      `-freduce-all-givs', and `-frerun-loop-opt'--which can improve the
  2897.      run-time performance of some programs.
  2898.    * Replace much of the existing documentation with a single Info
  2899.      document.
  2900.    * New option `-fno-second-underscore'.
  2901. In 0.5.17:
  2902. ==========
  2903.    * The `ERF()' and `ERFC()' intrinsics now are generic intrinsics,
  2904.      mapping to `ERF'/`DERF' and `ERFC'/`DERFC', respectively.  *Note:*
  2905.      Use `INTRINSIC ERF,ERFC' in any code that might reference these as
  2906.      generic intrinsics, to improve the likelihood of diagnostics
  2907.      (instead of subtle run-time bugs) when using compilers that don't
  2908.      support these as intrinsics.
  2909.    * New option `-Wsurprising'.
  2910.    * DO loops with non-`INTEGER' variables now diagnosed only when
  2911.      `-Wsurprising' specified.  Previously, this was diagnosed *unless*
  2912.      `-fpedantic' or `-fugly' was specified.
  2913. In 0.5.16:
  2914. ==========
  2915.    * `libf2c' changed to output a leading zero (0) digit for
  2916.      floating-point values output via list-directed and formatted
  2917.      output (to bring `g77' more into line with many existing Fortran
  2918.      implementations--the ANSI FORTRAN 77 standard leaves this choice
  2919.      to the implementation).
  2920.    * `libf2c' no longer built with debugging information intact, making
  2921.      it much smaller.
  2922.    * Automatic installation of the `g77' command now works.
  2923.    * Diagnostic messages now more informative, a la `gcc', including
  2924.      messages like `In function `foo':' and `In file included from...:'.
  2925.    * New group of intrinsics called `unix', including `ABORT', `DERF',
  2926.      `DERFC', `ERF', `ERFC', `EXIT', `FLUSH', `GETARG', `GETENV',
  2927.      `SIGNAL', and `SYSTEM'.
  2928.    * `-funix-intrinsics-{delete,hide,disable,enable}' options added.
  2929.    * `-fno-underscoring' option added.
  2930.    * `--driver' option added to the `g77' command.
  2931.    * Support for the `gcc' options `-fident' and `-fno-ident' added.
  2932.    * `g77 -v' returns much more version info, making the submission of
  2933.      better bug reports easily.
  2934.    * Many improvements to the `g77' command to better fulfill its role
  2935.      as a front-end to the `gcc' driver.  For example, `g77' now
  2936.      recognizes `--verbose' as a verbose way of specifying `-v'.
  2937.    * Compiling preprocessed (`*.F' and `*.fpp') files now results in
  2938.      better diagnostics and debugging information, as the
  2939.      source-location info now is passed all the way through the
  2940.      compilation process instead of being lost.
  2941. File: g77.info,  Node: Language,  Next: Compiler,  Prev: Changes,  Up: Top
  2942. The GNU Fortran Language
  2943. ************************
  2944.    GNU Fortran supports a variety of extensions to, and dialects of,
  2945. the Fortran language.  Its primary base is the ANSI FORTRAN 77
  2946. standard, currently available on the network at
  2947. `http://kumo.swcp.com/fortran/F77_std/f77_std.html' or in
  2948. `ftp://ftp.ast.cam.ac.uk/pub/michael/'.  It offers some extensions that
  2949. are popular among users of UNIX `f77' and `f2c' compilers, some that
  2950. are popular among users of other compilers (such as Digital products),
  2951. some that are popular among users of the newer Fortran 90 standard, and
  2952. some that are introduced by GNU Fortran.
  2953.    (If you need a text on Fortran, a few freely available electronic
  2954. references have pointers from `http://www.fortran.com/fortran/Books/'.)
  2955.    Part of what defines a particular implementation of a Fortran
  2956. system, such as `g77', is the particular characteristics of how it
  2957. supports types, constants, and so on.  Much of this is left up to the
  2958. implementation by the various Fortran standards and accepted practice
  2959. in the industry.
  2960.    The GNU Fortran *language* is described below.  Much of the material
  2961. is organized along the same lines as the ANSI FORTRAN 77 standard
  2962. itself.
  2963.    *Note Other Dialects::, for information on features `g77' supports
  2964. that are not part of the GNU Fortran language.
  2965.    *Note*: This portion of the documentation definitely needs a lot of
  2966. work!
  2967. * Menu:
  2968. Relationship to the ANSI FORTRAN 77 standard:
  2969. * Direction of Language Development::  Where GNU Fortran is headed.
  2970. * Standard Support::  Degree of support for the standard.
  2971. Extensions to the ANSI FORTRAN 77 standard:
  2972. * Conformance::
  2973. * Notation Used::
  2974. * Terms and Concepts::
  2975. * Characters Lines Sequence::
  2976. * Data Types and Constants::
  2977. * Expressions::
  2978. * Specification Statements::
  2979. * Control Statements::
  2980. * Functions and Subroutines::
  2981. * Scope and Classes of Names::
  2982. File: g77.info,  Node: Direction of Language Development,  Next: Standard Support,  Up: Language
  2983. Direction of Language Development
  2984. =================================
  2985.    The purpose of the following description of the GNU Fortran language
  2986. is to promote wide portability of GNU Fortran programs.
  2987.    GNU Fortran is an evolving language, due to the fact that `g77'
  2988. itself is in beta test.  Some current features of the language might
  2989. later be redefined as dialects of Fortran supported by `g77' when
  2990. better ways to express these features are added to `g77', for example.
  2991. Such features would still be supported by `g77', but would be available
  2992. only when one or more command-line options were used.
  2993.    The GNU Fortran *language* is distinct from the GNU Fortran
  2994. *compilation system* (`g77').
  2995.    For example, `g77' supports various dialects of Fortran--in a sense,
  2996. these are languages other than GNU Fortran--though its primary purpose
  2997. is to support the GNU Fortran language, which also is described in its
  2998. documentation and by its implementation.
  2999.    On the other hand, non-GNU compilers might offer support for the GNU
  3000. Fortran language, and are encouraged to do so.
  3001.    Currently, the GNU Fortran language is a fairly fuzzy object.  It
  3002. represents something of a cross between what `g77' accepts when
  3003. compiling using the prevailing defaults and what this document
  3004. describes as being part of the language.
  3005.    Future versions of `g77' are expected to clarify the definition of
  3006. the language in the documentation.  Often, this will mean adding new
  3007. features to the language, in the form of both new documentation and new
  3008. support in `g77'.  However, it might occasionally mean removing a
  3009. feature from the language itself to "dialect" status.  In such a case,
  3010. the documentation would be adjusted to reflect the change, and `g77'
  3011. itself would likely be changed to require one or more command-line
  3012. options to continue supporting the feature.
  3013.    The development of the GNU Fortran language is intended to strike a
  3014. balance between:
  3015.    * Serving as a mostly-upwards-compatible language from the de facto
  3016.      UNIX Fortran dialect as supported by `f77'.
  3017.    * Offering new, well-designed language features.  Attributes of such
  3018.      features include not making existing code any harder to read (for
  3019.      those who might be unaware that the new features are not in use)
  3020.      and not making state-of-the-art compilers take longer to issue
  3021.      diagnostics, among others.
  3022.    * Supporting existing, well-written code without gratuitously
  3023.      rejecting non-standard constructs, regardless of the origin of the
  3024.      code (its dialect).
  3025.    * Offering default behavior and command-line options to reduce and,
  3026.      where reasonable, eliminate the need for programmers to make any
  3027.      modifications to code that already works in existing production
  3028.      environments.
  3029.    * Diagnosing constructs that have different meanings in different
  3030.      systems, languages, and dialects, while offering clear, less
  3031.      ambiguous ways to express each of the different meanings so
  3032.      programmers can change their code appropriately.
  3033.    One of the biggest practical challenges for the developers of the
  3034. GNU Fortran language is meeting the sometimes contradictory demands of
  3035. the above items.
  3036.    For example, a feature might be widely used in one popular
  3037. environment, but the exact same code that utilizes that feature might
  3038. not work as expected--perhaps it might mean something entirely
  3039. different--in another popular environment.
  3040.    Traditionally, Fortran compilers--even portable ones--have solved
  3041. this problem by simply offering the appropriate feature to users of the
  3042. respective systems.  This approach treats users of various Fortran
  3043. systems and dialects as remote "islands", or camps, of programmers, and
  3044. assume that these camps rarely come into contact with each other (or,
  3045. especially, with each other's code).
  3046.    Project GNU takes a radically different approach to software and
  3047. language design, in that it assumes that users of GNU software do not
  3048. necessarily care what kind of underlying system they are using,
  3049. regardless of whether they are using software (at the user-interface
  3050. level) or writing it (for example, writing Fortran or C code).
  3051.    As such, GNU users rarely need consider just what kind of underlying
  3052. hardware (or, in many cases, operating system) they are using at any
  3053. particular time.  They can use and write software designed for a
  3054. general-purpose, widely portable, heteregenous environment--the GNU
  3055. environment.
  3056.    In line with this philosophy, GNU Fortran must evolve into a product
  3057. that is widely ported and portable not only in the sense that it can be
  3058. successfully built, installed, and run by users, but in the larger
  3059. sense that its users can use it in the same way, and expect largely the
  3060. same behaviors from it, regardless of the kind of system they are using
  3061. at any particular time.
  3062.    This approach constrains the solutions `g77' can use to resolve
  3063. conflicts between various camps of Fortran users.  If these two camps
  3064. disagree about what a particular construct should mean, `g77' cannot
  3065. simply be changed to treat that particular construct as having one
  3066. meaning without comment (such as a warning), lest the users expecting
  3067. it to have the other meaning are unpleasantly surprised that their code
  3068. misbehaves when executed.
  3069.    The use of the ASCII backslash character in character constants is
  3070. an excellent (and still somewhat unresolved) example of this kind of
  3071. controversy.  *Note Backslash in Constants::.  Other examples are
  3072. likely to arise in the future, as `g77' developers strive to improve
  3073. its ability to accept an ever-wider variety of existing Fortran code
  3074. without requiring significant modifications to said code.
  3075.    Development of GNU Fortran is further constrained by the desire to
  3076. avoid requiring programmers to change their code.  This is important
  3077. because it allows programmers, administrators, and others to more
  3078. faithfully evaluate and validate `g77' (as an overall product and as
  3079. new versions are distributed) without having to support multiple
  3080. versions of their programs so that they continue to work the same way
  3081. on their existing systems (non-GNU perhaps, but possibly also earlier
  3082. versions of `g77').
  3083. File: g77.info,  Node: Standard Support,  Next: Conformance,  Prev: Direction of Language Development,  Up: Language
  3084. ANSI FORTRAN 77 Standard Support
  3085. ================================
  3086.    GNU Fortran supports ANSI FORTRAN 77 with the following caveats.  In
  3087. summary, the only ANSI FORTRAN 77 features `g77' doesn't support are
  3088. those that are probably rarely used in actual code, some of which are
  3089. explicitly disallowed by the Fortran 90 standard.
  3090. * Menu:
  3091. * No Passing External Assumed-length::  CHAR*(*) CFUNC restriction.
  3092. * No Passing Dummy Assumed-length::     CHAR*(*) CFUNC restriction.
  3093. * No Pathological Implied-DO::          No `((..., I=...), I=...)'.
  3094. * No Useless Implied-DO::               No `(A, I=1, 1)'.
  3095. File: g77.info,  Node: No Passing External Assumed-length,  Next: No Passing Dummy Assumed-length,  Up: Standard Support
  3096. No Passing External Assumed-length
  3097. ----------------------------------
  3098.    `g77' disallows passing of an external procedure as an actual
  3099. argument if the procedure's type is declared `CHARACTER*(*)'.  For
  3100. example:
  3101.      CHARACTER*(*) CFUNC
  3102.      EXTERNAL CFUNC
  3103.      CALL FOO(CFUNC)
  3104.      END
  3105. It isn't clear whether the standard considers this conforming.
  3106. File: g77.info,  Node: No Passing Dummy Assumed-length,  Next: No Pathological Implied-DO,  Prev: No Passing External Assumed-length,  Up: Standard Support
  3107. No Passing Dummy Assumed-length
  3108. -------------------------------
  3109.    `g77' disallows passing of a dummy procedure as an actual argument
  3110. if the procedure's type is declared `CHARACTER*(*)'.
  3111.      SUBROUTINE BAR(CFUNC)
  3112.      CHARACTER*(*) CFUNC
  3113.      EXTERNAL CFUNC
  3114.      CALL FOO(CFUNC)
  3115.      END
  3116. It isn't clear whether the standard considers this conforming.
  3117. File: g77.info,  Node: No Pathological Implied-DO,  Next: No Useless Implied-DO,  Prev: No Passing Dummy Assumed-length,  Up: Standard Support
  3118. No Pathological Implied-DO
  3119. --------------------------
  3120.    The `DO' variable for an implied-`DO' construct in a `DATA'
  3121. statement may not be used as the `DO' variable for an outer
  3122. implied-`DO' construct.  For example, this fragment is disallowed by
  3123. `g77':
  3124.      DATA ((A(I, I), I= 1, 10), I= 1, 10) /.../
  3125. This also is disallowed by Fortran 90, as it offers no additional
  3126. capabilities and would have a variety of possible meanings.
  3127.    Note that it is *very* unlikely that any production Fortran code
  3128. tries to use this unsupported construct.
  3129. File: g77.info,  Node: No Useless Implied-DO,  Prev: No Pathological Implied-DO,  Up: Standard Support
  3130. No Useless Implied-DO
  3131. ---------------------
  3132.    An array element initializer in an implied-`DO' construct in a
  3133. `DATA' statement must contain at least one reference to the `DO'
  3134. variables of each outer implied-`DO' construct.  For example, this
  3135. fragment is disallowed by `g77':
  3136.      DATA (A, I= 1, 1) /1./
  3137. This also is disallowed by Fortran 90, as FORTRAN 77's more permissive
  3138. requirements offer no additional capabilities.  However, `g77' doesn't
  3139. necessarily diagnose all cases where this requirement is not met.
  3140.    Note that it is *very* unlikely that any production Fortran code
  3141. tries to use this unsupported construct.
  3142. File: g77.info,  Node: Conformance,  Next: Notation Used,  Prev: Standard Support,  Up: Language
  3143. Conformance
  3144. ===========
  3145.    (The following information augments or overrides the information in
  3146. Section 1.4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3147. language.  Chapter 1 of that document otherwise serves as the basis for
  3148. the relevant aspects of GNU Fortran.)
  3149.    The definition of the GNU Fortran language is akin to that of the
  3150. ANSI FORTRAN 77 language in that it does not generally require
  3151. conforming implementations to diagnose cases where programs do not
  3152. conform to the language.
  3153.    However, `g77' as a compiler is being developed in a way that is
  3154. intended to enable it to diagnose such cases in an easy-to-understand
  3155. manner.
  3156.    A program that conforms to the GNU Fortran language should, when
  3157. compiled, linked, and executed using a properly installed `g77' system,
  3158. perform as described by the GNU Fortran language definition.  Reasons
  3159. for different behavior include, among others:
  3160.    * Use of resources (memory--heap, stack, and so on; disk space; CPU
  3161.      time; etc.) exceeds those of the system.
  3162.    * Range and/or precision of calculations required by the program
  3163.      exceeds that of the system.
  3164.    * Excessive reliance on behaviors that are system-dependent
  3165.      (non-portable Fortran code).
  3166.    * Bugs in the program.
  3167.    * Bug in `g77'.
  3168.    * Bugs in the system.
  3169.    Despite these "loopholes", the availability of a clear specification
  3170. of the language of programs submitted to `g77', as this document is
  3171. intended to provide, is considered an important aspect of providing a
  3172. robust, clean, predictable Fortran implementation.
  3173.    The definition of the GNU Fortran language, while having no special
  3174. legal status, can therefore be viewed as a sort of contract, or
  3175. agreement.  This agreement says, in essence, "if you write a program in
  3176. this language, and run it in an environment (such as a `g77' system)
  3177. that supports this language, the program should behave in a largely
  3178. predictable way".
  3179. File: g77.info,  Node: Notation Used,  Next: Terms and Concepts,  Prev: Conformance,  Up: Language
  3180. Notation Used in This Chapter
  3181. =============================
  3182.    (The following information augments or overrides the information in
  3183. Section 1.5 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3184. language.  Chapter 1 of that document otherwise serves as the basis for
  3185. the relevant aspects of GNU Fortran.)
  3186.    In this chapter, "must" denotes a requirement, "may" denotes
  3187. permission, and "must not" and "may not" denote prohibition.  Terms
  3188. such as "might", "should", and "can" generally add little or nothing in
  3189. the way of weight to the GNU Fortran language itself, but are used to
  3190. explain or illustrate the language.
  3191.    For example:
  3192.      ``The `FROBNITZ' statement must precede all executable
  3193.      statements in a program unit, and may not specify any dummy
  3194.      arguments.  It may specify local or common variables and arrays.
  3195.      Its use should be limited to portions of the program designed to
  3196.      be non-portable and system-specific, because it might cause the
  3197.      containing program unit to behave quite differently on different
  3198.      systems.''
  3199.    Insofar as the GNU Fortran language is specified, the requirements
  3200. and permissions denoted by the above sample statement are limited to
  3201. the placement of the statement and the kinds of things it may specify.
  3202. The rest of the statement--the content regarding non-portable portions
  3203. of the program and the differing behavior of program units containing
  3204. the `FROBNITZ' statement--does not pertain the GNU Fortran language
  3205. itself.  That content offers advice and warnings about the `FROBNITZ'
  3206. statement.
  3207.    *Remember:* The GNU Fortran language definition specifies both what
  3208. constitutes a valid GNU Fortran program and how, given such a program,
  3209. a valid GNU Fortran implementation is to interpret that program.
  3210.    It is *not* incumbent upon a valid GNU Fortran implementation to
  3211. behave in any particular way, any consistent way, or any predictable
  3212. way when it is asked to interpret input that is *not* a valid GNU
  3213. Fortran program.
  3214.    Such input is said to have "undefined" behavior when interpreted by
  3215. a valid GNU Fortran implementation, though an implementation may choose
  3216. to specify behaviors for some cases of inputs that are not valid GNU
  3217. Fortran programs.
  3218.    Other notation used herein is that of the GNU texinfo format, which
  3219. is used to generate printed hardcopy, on-line hypertext (Info), and
  3220. on-line HTML versions, all from a single source document.  This
  3221. notation is used as follows:
  3222.    * Keywords defined by the GNU Fortran language are shown in
  3223.      uppercase, as in: `COMMON', `INTEGER', and `BLOCK DATA'.
  3224.      Note that, in practice, many Fortran programs are written in
  3225.      lowercase--uppercase is used in this manual as a means to readily
  3226.      distinguish keywords and sample Fortran-related text from the
  3227.      prose in this document.
  3228.    * Portions of actual sample program, input, or output text look like
  3229.      this: `Actual program text'.
  3230.      Generally, uppercase is used for all Fortran-specific and
  3231.      Fortran-related text, though this does not always include literal
  3232.      text within Fortran code.
  3233.      For example: `PRINT *, 'My name is Bob''.
  3234.    * A metasyntactic variable--that is, a name used in this document to
  3235.      serve as a placeholder for whatever text is used by the user or
  3236.      programmer-appears as shown in the following example:
  3237.      "The `INTEGER IVAR' statement specifies that IVAR is a variable or
  3238.      array of type `INTEGER'."
  3239.      In the above example, any valid text may be substituted for the
  3240.      metasyntactic variable IVAR to make the statement apply to a
  3241.      specific instance, as long as the same text is substituted for
  3242.      *both* occurrences of IVAR.
  3243.    * Ellipses ("...") are used to indicate further text that is either
  3244.      unimportant or expanded upon further, elsewhere.
  3245.    * Names of data types are in the style of Fortran 90, in most cases.
  3246.      *Note Kind Notation::, for information on the relationship between
  3247.      Fortran 90 nomenclature (such as `INTEGER(KIND=1)') and the more
  3248.      traditional, less portably concise nomenclature (such as
  3249.      `INTEGER*4').
  3250. File: g77.info,  Node: Terms and Concepts,  Next: Characters Lines Sequence,  Prev: Notation Used,  Up: Language
  3251. Fortran Terms and Concepts
  3252. ==========================
  3253.    (The following information augments or overrides the information in
  3254. Chapter 2 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3255. language.  Chapter 2 of that document otherwise serves as the basis for
  3256. the relevant aspects of GNU Fortran.)
  3257. * Menu:
  3258. * Syntactic Items::
  3259. * Statements Comments Lines::
  3260. * Scope of Names and Labels::
  3261. File: g77.info,  Node: Syntactic Items,  Next: Statements Comments Lines,  Up: Terms and Concepts
  3262. Syntactic Items
  3263. ---------------
  3264.    (Corresponds to Section 2.2 of ANSI X3.9-1978 FORTRAN 77.)
  3265.    In GNU Fortran, a symbolic name is at least one character long, and
  3266. has no arbitrary upper limit on length.  However, names of entities
  3267. requiring external linkage (such as external functions, external
  3268. subroutines, and `COMMON' areas) might be restricted to some arbitrary
  3269. length by the system.  Such a restriction is no more constrained than
  3270. that of one through six characters.
  3271.    Underscores (`_') are accepted in symbol names after the first
  3272. character (which must be a letter).
  3273. File: g77.info,  Node: Statements Comments Lines,  Next: Scope of Names and Labels,  Prev: Syntactic Items,  Up: Terms and Concepts
  3274. Statements, Comments, and Lines
  3275. -------------------------------
  3276.    (Corresponds to Section 2.3 of ANSI X3.9-1978 FORTRAN 77.)
  3277.    Use of an exclamation point (`!') to begin a trailing comment (a
  3278. comment that extends to the end of the same source line) is permitted
  3279. under the following conditions:
  3280.    * The exclamation point does not appear in column 6.  Otherwise, it
  3281.      is treated as an indicator of a continuation line.
  3282.    * The exclamation point appears outside a character or hollerith
  3283.      constant.  Otherwise, the exclamation point is considered part of
  3284.      the constant.
  3285.    * The exclamation point appears to the left of any other possible
  3286.      trailing comment.  That is, a trailing comment may contain
  3287.      exclamation points in their commentary text.
  3288.    Use of a semicolon (`;') as a statement separator is permitted under
  3289. the following conditions:
  3290.    * The semicolon appears outside a character or hollerith constant.
  3291.      Otherwise, the semicolon is considered part of the constant.
  3292.    * The semicolon appears to the left of a trailing comment.
  3293.      Otherwise, the semicolon is considered part of that comment.
  3294.    * Neither a logical `IF' statement nor a non-construct `WHERE'
  3295.      statement (a Fortran 90 feature) may be followed (in the same,
  3296.      possibly continued, line) by a semicolon used as a statement
  3297.      separator.
  3298.      This restriction avoids the confusion that can result when reading
  3299.      a line such as:
  3300.           IF (VALIDP) CALL FOO; CALL BAR
  3301.      Some readers might think the `CALL BAR' is executed only if
  3302.      `VALIDP' is `.TRUE.', while others might assume its execution is
  3303.      unconditional.
  3304.      (At present, `g77' does not diagnose code that violates this
  3305.      restriction.)
  3306. File: g77.info,  Node: Scope of Names and Labels,  Prev: Statements Comments Lines,  Up: Terms and Concepts
  3307. Scope of Symbolic Names and Statement Labels
  3308. --------------------------------------------
  3309.    (Corresponds to Section 2.9 of ANSI X3.9-1978 FORTRAN 77.)
  3310.    Included in the list of entities that have a scope of a program unit
  3311. are construct names (a Fortran 90 feature).  *Note Construct Names::,
  3312. for more information.
  3313. File: g77.info,  Node: Characters Lines Sequence,  Next: Data Types and Constants,  Prev: Terms and Concepts,  Up: Language
  3314. Characters, Lines, and Execution Sequence
  3315. =========================================
  3316.    (The following information augments or overrides the information in
  3317. Chapter 3 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3318. language.  Chapter 3 of that document otherwise serves as the basis for
  3319. the relevant aspects of GNU Fortran.)
  3320. * Menu:
  3321. * Character Set::
  3322. * Lines::
  3323. * Continuation Line::
  3324. * Statements::
  3325. * Statement Labels::
  3326. * Order::
  3327. * INCLUDE::
  3328. File: g77.info,  Node: Character Set,  Next: Lines,  Up: Characters Lines Sequence
  3329. GNU Fortran Character Set
  3330. -------------------------
  3331.    (Corresponds to Section 3.1 of ANSI X3.9-1978 FORTRAN 77.)
  3332.    Letters include uppercase letters (the twenty-six characters of the
  3333. English alphabet) and lowercase letters (their lowercase equivalent).
  3334. Generally, lowercase letters may be used in place of uppercase letters,
  3335. though in character and hollerith constants, they are distinct.
  3336.    Special characters include:
  3337.    * Semicolon (`;')
  3338.    * Exclamation point (`!')
  3339.    * Double quote (`"')
  3340.    * Backslash (`\')
  3341.    * Question mark (`?')
  3342.    * Hash mark (`#')
  3343.    * Ampersand (`&')
  3344.    * Percent sign (`%')
  3345.    * Underscore (`_')
  3346.    * Open angle (`<')
  3347.    * Close angle (`>')
  3348.    * The FORTRAN 77 special characters (<SPC>, `=', `+', `-', `*', `/',
  3349.      `(', `)', `,', `.', `$', `'', and `:')
  3350.    Note that this document refers to <SPC> as "space", while X3.9-1978
  3351. FORTRAN 77 refers to it as "blank".
  3352. File: g77.info,  Node: Lines,  Next: Continuation Line,  Prev: Character Set,  Up: Characters Lines Sequence
  3353. Lines
  3354. -----
  3355.    (Corresponds to Section 3.2 of ANSI X3.9-1978 FORTRAN 77.)
  3356.    The way a Fortran compiler views source files depends entirely on the
  3357. implementation choices made for the compiler, since those choices are
  3358. explicitly left to the implementation by the published Fortran
  3359. standards.
  3360.    The GNU Fortran language mandates a view applicable to UNIX-like
  3361. text files--files that are made up of an arbitrary number of lines,
  3362. each with an arbitrary number of characters (sometimes called
  3363. stream-based files).
  3364.    This view does not apply to types of files that are specified as
  3365. having a particular number of characters on every single line (sometimes
  3366. referred to as record-based files).
  3367.    Because a "line in a program unit is a sequence of 72 characters",
  3368. to quote X3.9-1978, the GNU Fortran language specifies that a
  3369. stream-based text file is translated to GNU Fortran lines as follows:
  3370.    * A newline in the file is the character that represents the end of
  3371.      a line of text to the underlying system.  For example, on
  3372.      ASCII-based systems, a newline is the <NL> character, which has
  3373.      ASCII value 12 (decimal).
  3374.    * Each newline in the file serves to end the line of text that
  3375.      precedes it (and that does not contain a newline).
  3376.    * The end-of-file marker (`EOF') also serves to end the line of text
  3377.      that precedes it (and that does not contain a newline).
  3378.    * Any line of text that is shorter than 72 characters is padded to
  3379.      that length with spaces (called "blanks" in the standard).
  3380.    * Any line of text that is longer than 72 characters is truncated to
  3381.      that length, but the truncated remainder must consist entirely of
  3382.      spaces.
  3383.    * Characters other than newline and the GNU Fortran character set
  3384.      are invalid.
  3385.    For the purposes of the remainder of this description of the GNU
  3386. Fortran language, the translation described above has already taken
  3387. place, unless otherwise specified.
  3388.    The result of the above translation is that the source file appears,
  3389. in terms of the remainder of this description of the GNU Fortran
  3390. language, as if it had an arbitrary number of 72-character lines, each
  3391. character being among the GNU Fortran character set.
  3392.    For example, if the source file itself has two newlines in a row,
  3393. the second newline becomes, after the above translation, a single line
  3394. containing 72 spaces.
  3395. File: g77.info,  Node: Continuation Line,  Next: Statements,  Prev: Lines,  Up: Characters Lines Sequence
  3396. Continuation Line
  3397. -----------------
  3398.    (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.)
  3399.    A continuation line is any line that both
  3400.    * Contains a continuation character, and
  3401.    * Contains only spaces in columns 1 through 5
  3402.    A continuation character is any character of the GNU Fortran
  3403. character set other than space (<SPC>) or zero (`0') in column 6, or a
  3404. digit (`0' through `9') in column 7 through 72 of a line that has only
  3405. spaces to the left of that digit.
  3406.    The continuation character is ignored as far as the content of the
  3407. statement is concerned.
  3408.    The GNU Fortran language places no limit on the number of
  3409. continuation lines in a statement.  In practice, the limit depends on a
  3410. variety of factors, such as available memory, statement content, and so
  3411. on, but no GNU Fortran system may impose an arbitrary limit.
  3412. File: g77.info,  Node: Statements,  Next: Statement Labels,  Prev: Continuation Line,  Up: Characters Lines Sequence
  3413. Statements
  3414. ----------
  3415.    (Corresponds to Section 3.3 of ANSI X3.9-1978 FORTRAN 77.)
  3416.    Statements may be written using an arbitrary number of continuation
  3417. lines.
  3418.    Statements may be separated using the semicolon (`;'), except that
  3419. the logical `IF' and non-construct `WHERE' statements may not be
  3420. separated from subsequent statements using only a semicolon as
  3421. statement separator.
  3422.    The `END PROGRAM', `END SUBROUTINE', `END FUNCTION', and `END BLOCK
  3423. DATA' statements are alternatives to the `END' statement.  These
  3424. alternatives may be written as normal statements--they are not subject
  3425. to the restrictions of the `END' statement.
  3426.    However, no statement other than `END' may have an initial line that
  3427. appears to be an `END' statement--even `END PROGRAM', for example, must
  3428. not be written as:
  3429.            END
  3430.           &PROGRAM
  3431. File: g77.info,  Node: Statement Labels,  Next: Order,  Prev: Statements,  Up: Characters Lines Sequence
  3432. Statement Labels
  3433. ----------------
  3434.    (Corresponds to Section 3.4 of ANSI X3.9-1978 FORTRAN 77.)
  3435.    A statement separated from its predecessor via a semicolon may be
  3436. labeled as follows:
  3437.    * The semicolon is followed by the label for the statement, which in
  3438.      turn follows the label.
  3439.    * The label must be no more than five digits in length.
  3440.    * The first digit of the label for the statement is not the first
  3441.      non-space character on a line.  Otherwise, that character is
  3442.      treated as a continuation character.
  3443.    A statement may have only one label defined for it.
  3444. File: g77.info,  Node: Order,  Next: INCLUDE,  Prev: Statement Labels,  Up: Characters Lines Sequence
  3445. Order of Statements and Lines
  3446. -----------------------------
  3447.    (Corresponds to Section 3.5 of ANSI X3.9-1978 FORTRAN 77.)
  3448.    Generally, `DATA' statements may precede executable statements.
  3449. However, specification statements pertaining to any entities
  3450. initialized by a `DATA' statement must precede that `DATA' statement.
  3451. For example, after `DATA I/1/', `INTEGER I' is not permitted, but
  3452. `INTEGER J' is permitted.
  3453.    The last line of a program unit may be an `END' statement, or may be:
  3454.    * An `END PROGRAM' statement, if the program unit is a main program.
  3455.    * An `END SUBROUTINE' statement, if the program unit is a subroutine.
  3456.    * An `END FUNCTION' statement, if the program unit is a function.
  3457.    * An `END BLOCK DATA' statement, if the program unit is a block data.
  3458. File: g77.info,  Node: INCLUDE,  Prev: Order,  Up: Characters Lines Sequence
  3459. Including Source Text
  3460. ---------------------
  3461.    Additional source text may be included in the processing of the
  3462. source file via the `INCLUDE' directive:
  3463.      INCLUDE FILENAME
  3464. The source text to be included is identified by FILENAME, which is a
  3465. literal GNU Fortran character constant.  The meaning and interpretation
  3466. of FILENAME depends on the implementation, but typically is a filename.
  3467.    (`g77' treats it as a filename that it searches for in the current
  3468. directory and/or directories specified via the `-I' command-line
  3469. option.)
  3470.    The effect of the `INCLUDE' directive is as if the included text
  3471. directly replaced the directive in the source file prior to
  3472. interpretation of the program.  Included text may itself use `INCLUDE'.
  3473. The depth of nested `INCLUDE' references depends on the implementation,
  3474. but typically is a positive integer.
  3475.    This virtual replacement treats the statements and `INCLUDE'
  3476. directives in the included text as syntactically distinct from those in
  3477. the including text.
  3478.    Therefore, the first non-comment line of the included text must not
  3479. be a continuation line.  The included text must therefore have, after
  3480. the non-comment lines, either an initial line (statement), an `INCLUDE'
  3481. directive, or nothing (the end of the included text).
  3482.    Similarly, the including text may end the `INCLUDE' directive with a
  3483. semicolon or the end of the line, but it cannot follow an `INCLUDE'
  3484. directive at the end of its line with a continuation line.  Thus, the
  3485. last statement in an included text may not be continued.
  3486.    Any statements between two `INCLUDE' directives on the same line are
  3487. treated as if they appeared in between the respective included texts.
  3488. For example:
  3489.      INCLUDE 'A'; PRINT *, 'B'; INCLUDE 'C'; END PROGRAM
  3490. If the text included by `INCLUDE 'A'' constitutes a `PRINT *, 'A''
  3491. statement and the text included by `INCLUDE 'C'' constitutes a `PRINT
  3492. *, 'C'' statement, then the output of the above sample program would be
  3493.      A
  3494.      B
  3495.      C
  3496. (with suitable allowances for how an implementation defines its
  3497. handling of output).
  3498.    Included text must not include itself directly or indirectly,
  3499. regardless of whether the FILENAME used to reference the text is the
  3500. same.
  3501.    Note that `INCLUDE' is *not* a statement.  As such, it is neither a
  3502. non-executable or executable statement.  However, if the text it
  3503. includes constitutes one or more executable statements, then the
  3504. placement of `INCLUDE' is subject to effectively the same restrictions
  3505. as those on executable statements.
  3506.    An `INCLUDE' directive may be continued across multiple lines as if
  3507. it were a statement.  This permits long names to be used for FILENAME.
  3508. File: g77.info,  Node: Data Types and Constants,  Next: Expressions,  Prev: Characters Lines Sequence,  Up: Language
  3509. Data Types and Constants
  3510. ========================
  3511.    (The following information augments or overrides the information in
  3512. Chapter 4 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3513. language.  Chapter 4 of that document otherwise serves as the basis for
  3514. the relevant aspects of GNU Fortran.)
  3515.    To more concisely express the appropriate types for entities, this
  3516. document uses the more concise Fortran 90 nomenclature such as
  3517. `INTEGER(KIND=1)' instead of the more traditional, but less portably
  3518. concise, byte-size-based nomenclature such as `INTEGER*4', wherever
  3519. reasonable.
  3520.    When referring to generic types--in contexts where the specific
  3521. precision and range of a type are not important--this document uses the
  3522. generic type names `INTEGER', `LOGICAL', `REAL', `COMPLEX', and
  3523. `CHARACTER'.
  3524.    In some cases, the context requires specification of a particular
  3525. type.  This document uses the `KIND=' notation to accomplish this
  3526. throughout, sometimes supplying the more traditional notation for
  3527. clarification, though the traditional notation might not work the same
  3528. way on all GNU Fortran implementations.
  3529.    Use of `KIND=' makes this document more concise because `g77' is
  3530. able to define values for `KIND=' that have the same meanings on all
  3531. systems, due to the way the Fortran 90 standard specifies these values
  3532. are to be used.
  3533.    (In particular, that standard permits an implementation to
  3534. arbitrarily assign nonnegative values.  There are four distinct sets of
  3535. assignments: one to the `CHARACTER' type; one to the `INTEGER' type;
  3536. one to the `LOGICAL' type; and the fourth to both the `REAL' and
  3537. `COMPLEX' types.  Implementations are free to assign these values in
  3538. any order, leave gaps in the ordering of assignments, and assign more
  3539. than one value to a representation.)
  3540.    This makes `KIND=' values superior to the values used in
  3541. non-standard statements such as `INTEGER*4', because the meanings of
  3542. the values in those statements vary from machine to machine, compiler
  3543. to compiler, even operating system to operating system.
  3544.    However, use of `KIND=' is *not* generally recommended when writing
  3545. portable code (unless, for example, the code is going to be compiled
  3546. only via `g77', which is a widely ported compiler).  GNU Fortran does
  3547. not yet have adequate language constructs to permit use of `KIND=' in a
  3548. fashion that would make the code portable to Fortran 90
  3549. implementations; and, this construct is known to *not* be accepted by
  3550. many popular FORTRAN 77 implementations, so it cannot be used in code
  3551. that is to be ported to those.
  3552.    The distinction here is that this document is able to use specific
  3553. values for `KIND=' to concisely document the types of various
  3554. operations and operands.
  3555.    A Fortran program should use the FORTRAN 77 designations for the
  3556. appropriate GNU Fortran types--such as `INTEGER' for `INTEGER(KIND=1)',
  3557. `REAL' for `REAL(KIND=1)', and `DOUBLE COMPLEX' for
  3558. `COMPLEX(KIND=2)'--and, where no such designations exist, make use of
  3559. appropriate techniques (preprocessor macros, parameters, and so on) to
  3560. specify the types in a fashion that may be easily adjusted to suit each
  3561. particular implementation to which the program is ported.  (These types
  3562. generally won't need to be adjusted for ports of `g77'.)
  3563.    Further details regarding GNU Fortran data types and constants are
  3564. provided below.
  3565. * Menu:
  3566. * Types::
  3567. * Constants::
  3568. * Integer Type::
  3569. * Character Type::
  3570. File: g77.info,  Node: Types,  Next: Constants,  Up: Data Types and Constants
  3571. Data Types
  3572. ----------
  3573.    (Corresponds to Section 4.1 of ANSI X3.9-1978 FORTRAN 77.)
  3574.    GNU Fortran supports these types:
  3575.   1. Integer (generic type `INTEGER')
  3576.   2. Real (generic type `REAL')
  3577.   3. Double precision
  3578.   4. Complex (generic type `COMPLEX')
  3579.   5. Logical (generic type `LOGICAL')
  3580.   6. Character (generic type `CHARACTER')
  3581.   7. Double Complex
  3582.    (The types numbered 1 through 6 above are standard FORTRAN 77 types.)
  3583.    The generic types shown above are referred to in this document using
  3584. only their generic type names.  Such references usually indicate that
  3585. any specific type (kind) of that generic type is valid.
  3586.    For example, a context described in this document as accepting the
  3587. `COMPLEX' type also is likely to accept the `DOUBLE COMPLEX' type.
  3588.    The GNU Fortran language supports three ways to specify a specific
  3589. kind of a generic type.
  3590. * Menu:
  3591. * Double Notation::  As in `DOUBLE COMPLEX'.
  3592. * Star Notation::    As in `INTEGER*4'.
  3593. * Kind Notation::    As in `INTEGER(KIND=1)'.
  3594. File: g77.info,  Node: Double Notation,  Next: Star Notation,  Up: Types
  3595. Double Notation
  3596. ...............
  3597.    The GNU Fortran language supports two uses of the keyword `DOUBLE'
  3598. to specify a specific kind of type:
  3599.    * `DOUBLE PRECISION', equivalent to `REAL(KIND=2)'
  3600.    * `DOUBLE COMPLEX', equivalent to `COMPLEX(KIND=2)'
  3601.    Use one of the above forms where a type name is valid.
  3602.    While use of this notation is popular, it doesn't scale well in a
  3603. language or dialect rich in intrinsic types, as is the case for the GNU
  3604. Fortran language (especially planned future versions of it).
  3605.    After all, one rarely sees type names such as `DOUBLE INTEGER',
  3606. `QUADRUPLE REAL', or `QUARTER INTEGER'.  Instead, `INTEGER*8',
  3607. `REAL*16', and `INTEGER*1' often are substituted for these,
  3608. respectively, even though they do not always have the same meanings on
  3609. all systems.  (And, the fact that `DOUBLE REAL' does not exist as such
  3610. is an inconsistency.)
  3611.    Therefore, this document uses "double notation" only on occasion for
  3612. the benefit of those readers who are accustomed to it.
  3613. File: g77.info,  Node: Star Notation,  Next: Kind Notation,  Prev: Double Notation,  Up: Types
  3614. Star Notation
  3615. .............
  3616.    The following notation specifies the storage size for a type:
  3617.      GENERIC-TYPE*N
  3618. GENERIC-TYPE must be a generic type--one of `INTEGER', `REAL',
  3619. `COMPLEX', `LOGICAL', or `CHARACTER'.  N must be one or more digits
  3620. comprising a decimal integer number greater than zero.
  3621.    Use the above form where a type name is valid.
  3622.    The `*N' notation specifies that the amount of storage occupied by
  3623. variables and array elements of that type is N times the storage
  3624. occupied by a `CHARACTER*1' variable.
  3625.    This notation might indicate a different degree of precision and/or
  3626. range for such variables and array elements, and the functions that
  3627. return values of types using this notation.  It does not limit the
  3628. precision or range of values of that type in any particular way--use
  3629. explicit code to do that.
  3630.    Further, the GNU Fortran language requires no particular values for
  3631. N to be supported by an implementation via the `*N' notation.  `g77'
  3632. supports `INTEGER*1' (as `INTEGER(KIND=3)') on all systems, for example,
  3633. but not all implementations are required to do so, and `g77' is known
  3634. to not support `REAL*1' on most (or all) systems.
  3635.    As a result, except for GENERIC-TYPE of `CHARACTER', uses of this
  3636. notation should be limited to isolated portions of a program that are
  3637. intended to handle system-specific tasks and are expected to be
  3638. non-portable.
  3639.    (Standard FORTRAN 77 supports the `*N' notation for only
  3640. `CHARACTER', where it signifies not only the amount of storage
  3641. occupied, but the number of characters in entities of that type.
  3642. However, almost all Fortran compilers have supported this notation for
  3643. generic types, though with a variety of meanings for N.)
  3644.    Specifications of types using the `*N' notation always are
  3645. interpreted as specifications of the appropriate types described in
  3646. this document using the `KIND=N' notation, described below.
  3647.    While use of this notation is popular, it doesn't serve well in the
  3648. context of a widely portable dialect of Fortran, such as the GNU
  3649. Fortran language.
  3650.    For example, even on one particular machine, two or more popular
  3651. Fortran compilers might well disagree on the size of a type declared
  3652. `INTEGER*2' or `REAL*16'.  Certainly there is known to be disagreement
  3653. over such things among Fortran compilers on *different* systems.
  3654.    Further, this notation offers no elegant way to specify sizes that
  3655. are not even multiples of the "byte size" typically designated by
  3656. `INTEGER*1'.  Use of "absurd" values (such as `INTEGER*1000') would
  3657. certainly be possible, but would perhaps be stretching the original
  3658. intent of this notation beyond the breaking point in terms of
  3659. widespread readability of documentation and code making use of it.
  3660.    Therefore, this document uses "star notation" only on occasion for
  3661. the benefit of those readers who are accustomed to it.
  3662. File: g77.info,  Node: Kind Notation,  Prev: Star Notation,  Up: Types
  3663. Kind Notation
  3664. .............
  3665.    The following notation specifies the kind-type selector of a type:
  3666.      GENERIC-TYPE(KIND=N)
  3667. Use the above form where a type name is valid.
  3668.    GENERIC-TYPE must be a generic type--one of `INTEGER', `REAL',
  3669. `COMPLEX', `LOGICAL', or `CHARACTER'.  N must be an integer
  3670. initialization expression that is a positive, nonzero value.
  3671.    Programmers are discouraged from writing these values directly into
  3672. their code.  Future versions of the GNU Fortran language will offer
  3673. facilities that will make the writing of code portable to `g77' *and*
  3674. Fortran 90 implementations simpler.
  3675.    However, writing code that ports to existing FORTRAN 77
  3676. implementations depends on avoiding the `KIND=' construct.
  3677.    The `KIND=' construct is thus useful in the context of GNU Fortran
  3678. for two reasons:
  3679.    * It provides a means to specify a type in a fashion that is
  3680.      portable across all GNU Fortran implementations (though not other
  3681.      FORTRAN 77 and Fortran 90 implementations).
  3682.    * It provides a sort of Rosetta stone for this document to use to
  3683.      concisely describe the types of various operations and operands.
  3684.    The values of N in the GNU Fortran language are assigned using a
  3685. scheme that:
  3686.    * Attempts to maximize the ability of readers of this document to
  3687.      quickly familiarize themselves with assignments for popular types
  3688.    * Provides a unique value for each specific desired meaning
  3689.    * Provides a means to automatically assign new values so they have a
  3690.      "natural" relationship to existing values, if appropriate, or, if
  3691.      no such relationship exists, will not interfere with future values
  3692.      assigned on the basis of such relationships
  3693.    * Avoids using values that are similar to values used in the
  3694.      existing, popular `*N' notation, to prevent readers from expecting
  3695.      that these implied correspondences work on all GNU Fortran
  3696.      implementations
  3697.    The assignment system accomplishes this by assigning to each
  3698. "fundamental meaning" of a specific type a unique prime number.
  3699. Combinations of fundamental meanings--for example, a type that is two
  3700. times the size of some other type--are assigned values of N that are
  3701. the products of the values for those fundamental meanings.
  3702.    A prime value of N is never given more than one fundamental meaning,
  3703. to avoid situations where some code or system cannot reasonably provide
  3704. those meanings in the form of a single type.
  3705.    The values of N assigned so far are:
  3706. `KIND=0'
  3707.      This value is reserved for future use.
  3708.      The planned future use is for this value to designate, explicitly,
  3709.      context-sensitive kind-type selection.  For example, the
  3710.      expression `1D0 * 0.1_0' would be equivalent to `1D0 * 0.1D0'.
  3711. `KIND=1'
  3712.      This corresponds to the default types for `REAL', `INTEGER',
  3713.      `LOGICAL', `COMPLEX', and `CHARACTER', as appropriate.
  3714.      These are the "default" types described in the Fortran 90 standard,
  3715.      though that standard does not assign any particular `KIND=' value
  3716.      to these types.
  3717.      (Typically, these are `REAL*4', `INTEGER*4', `LOGICAL*4', and
  3718.      `COMPLEX*8'.)
  3719. `KIND=2'
  3720.      This corresponds to types that occupy twice as much storage as the
  3721.      default types.  `REAL(KIND=2)' is `DOUBLE PRECISION' (typically
  3722.      `REAL*8'), `COMPLEX(KIND=2)' is `DOUBLE COMPLEX' (typically
  3723.      `COMPLEX*16'),
  3724.      These are the "double precision" types described in the Fortran 90
  3725.      standard, though that standard does not assign any particular
  3726.      `KIND=' value to these types.
  3727.      N of 4 thus corresponds to types that occupy four times as much
  3728.      storage as the default types, N of 8 to types that occupy eight
  3729.      times as much storage, and so on.
  3730.      The `INTEGER(KIND=2)' and `LOGICAL(KIND=2)' types are not
  3731.      necessarily supported by every GNU Fortran implementation.
  3732. `KIND=3'
  3733.      This corresponds to types that occupy as much storage as the
  3734.      default `CHARACTER' type, which is the same effective type as
  3735.      `CHARACTER(KIND=1)' (making that type effectively the same as
  3736.      `CHARACTER(KIND=3)').
  3737.      (Typically, these are `INTEGER*1' and `LOGICAL*1'.)
  3738.      N of 6 thus corresponds to types that occupy twice as much storage
  3739.      as the N=3 types, N of 12 to types that occupy four times as much
  3740.      storage, and so on.
  3741.      These are not necessarily supported by every GNU Fortran
  3742.      implementation.
  3743. `KIND=5'
  3744.      This corresponds to types that occupy half the storage as the
  3745.      default (N=1) types.
  3746.      (Typically, these are `INTEGER*2' and `LOGICAL*2'.)
  3747.      N of 25 thus corresponds to types that occupy one-quarter as much
  3748.      storage as the default types.
  3749.      These are not necessarily supported by every GNU Fortran
  3750.      implementation.
  3751. `KIND=7'
  3752.      This is valid only as `INTEGER(KIND=7)' and denotes the `INTEGER'
  3753.      type that has the smallest storage size that holds a pointer on
  3754.      the system.
  3755.      A pointer representable by this type is capable of uniquely
  3756.      addressing a `CHARACTER*1' variable, array, array element, or
  3757.      substring.
  3758.      (Typically this is equivalent to `INTEGER*4' or, on 64-bit
  3759.      systems, `INTEGER*8'.  In a compatible C implementation, it
  3760.      typically would be the same size and semantics of the C type `void
  3761.      *'.)
  3762.    Note that these are *proposed* correspondences and might change in
  3763. future versions of `g77'--avoid writing code depending on them while
  3764. `g77', and therefore the GNU Fortran language it defines, is in beta
  3765. testing.
  3766.    Values not specified in the above list are reserved to future
  3767. versions of the GNU Fortran language.
  3768.    Implementation-dependent meanings will be assigned new, unique prime
  3769. numbers so as to not interfere with other implementation-dependent
  3770. meanings, and offer the possibility of increasing the portability of
  3771. code depending on such types by offering support for them in other GNU
  3772. Fortran implementations.
  3773.    Other meanings that might be given unique values are:
  3774.    * Types that make use of only half their storage size for
  3775.      representing precision and range.
  3776.      For example, some compilers offer options that cause `INTEGER'
  3777.      types to occupy the amount of storage that would be needed for
  3778.      `INTEGER(KIND=2)' types, but the range remains that of
  3779.      `INTEGER(KIND=1)'.
  3780.    * The IEEE single floating-point type.
  3781.    * Types with a specific bit pattern (endianness), such as the
  3782.      little-endian form of `INTEGER(KIND=1)'.  These could permit,
  3783.      conceptually, use of portable code and implementations on data
  3784.      files written by existing systems.
  3785.    Future *prime* numbers should be given meanings in as incremental a
  3786. fashion as possible, to allow for flexibility and expressiveness in
  3787. combining types.
  3788.    For example, instead of defining a prime number for little-endian
  3789. IEEE doubles, one prime number might be assigned the meaning
  3790. "little-endian", another the meaning "IEEE double", and the value of N
  3791. for a little-endian IEEE double would thus naturally be the product of
  3792. those two respective assigned values.  (It could even be reasonable to
  3793. have IEEE values result from the products of prime values denoting
  3794. exponent and fraction sizes and meanings, hidden bit usage,
  3795. availability and representations of special values such as subnormals,
  3796. infinities, and Not-A-Numbers (NaNs), and so on.)
  3797.    This assignment mechanism, while not inherently required for future
  3798. versions of the GNU Fortran language, is worth using because it could
  3799. ease management of the "space" of supported types much easier in the
  3800. long run.
  3801.    The above approach suggests a mechanism for specifying inheritance
  3802. of intrinsic (built-in) types for an entire, widely portable product
  3803. line.  It is certainly reasonable that, unlike programmers of other
  3804. languages offering inheritance mechanisms that employ verbose names for
  3805. classes and subclasses, along with graphical browsers to elucidate the
  3806. relationships, Fortran programmers would employ a mechanism that works
  3807. by multiplying prime numbers together and finding the prime factors of
  3808. such products.
  3809.    Most of the advantages for the above scheme have been explained
  3810. above.  One disadvantage is that it could lead to the defining, by the
  3811. GNU Fortran language, of some fairly large prime numbers.  This could
  3812. lead to the GNU Fortran language being declared "munitions" by the
  3813. United States Department of Defense.
  3814. File: g77.info,  Node: Constants,  Next: Integer Type,  Prev: Types,  Up: Data Types and Constants
  3815. Constants
  3816. ---------
  3817.    (Corresponds to Section 4.2 of ANSI X3.9-1978 FORTRAN 77.)
  3818.    A "typeless constant" has one of the following forms:
  3819.      'BINARY-DIGITS'B
  3820.      'OCTAL-DIGITS'O
  3821.      'HEXADECIMAL-DIGITS'Z
  3822.      'HEXADECIMAL-DIGITS'X
  3823. BINARY-DIGITS, OCTAL-DIGITS, and HEXADECIMAL-DIGITS are nonempty
  3824. strings of characters in the set `01', `01234567', and
  3825. `0123456789ABCDEFabcdef', respectively.  (The value for `A' (and `a')
  3826. is 10, for `B' and `b' is 11, and so on.)
  3827.    Typeless constants have values that depend on the context in which
  3828. they are used.
  3829.    All other constants, called "typed constants", are
  3830. interpreted--converted to internal form--according to their inherent
  3831. type.  Thus, context is *never* a determining factor for the type, and
  3832. hence the interpretation, of a typed constant.  (All constants in the
  3833. ANSI FORTRAN 77 language are typed constants.)
  3834.    For example, `1' is always type `INTEGER(KIND=1)' in GNU Fortran
  3835. (called default INTEGER in Fortran 90), `9.435784839284958' is always
  3836. type `REAL(KIND=1)' (even if the additional precision specified is
  3837. lost, and even when used in a `REAL(KIND=2)' context), `1E0' is always
  3838. type `REAL(KIND=2)', and `1D0' is always type `REAL(KIND=2)'.
  3839. File: g77.info,  Node: Integer Type,  Next: Character Type,  Prev: Constants,  Up: Data Types and Constants
  3840. Integer Type
  3841. ------------
  3842.    (Corresponds to Section 4.3 of ANSI X3.9-1978 FORTRAN 77.)
  3843.    An integer constant also may have one of the following forms:
  3844.      B'BINARY-DIGITS'
  3845.      O'OCTAL-DIGITS'
  3846.      Z'HEXADECIMAL-DIGITS'
  3847.      X'HEXADECIMAL-DIGITS'
  3848. BINARY-DIGITS, OCTAL-DIGITS, and HEXADECIMAL-DIGITS are nonempty
  3849. strings of characters in the set `01', `01234567', and
  3850. `0123456789ABCDEFabcdef', respectively.  (The value for `A' (and `a')
  3851. is 10, for `B' and `b' is 11, and so on.)
  3852. File: g77.info,  Node: Character Type,  Prev: Integer Type,  Up: Data Types and Constants
  3853. Character Type
  3854. --------------
  3855.    (Corresponds to Section 4.8 of ANSI X3.9-1978 FORTRAN 77.)
  3856.    A character constant may be delimited by a pair of double quotes
  3857. (`"') instead of apostrophes.  In this case, an apostrophe within the
  3858. constant represents a single apostrophe, while a double quote is
  3859. represented in the source text of the constant by two consecutive double
  3860. quotes with no intervening spaces.
  3861.    A character constant may be empty (have a length of zero).
  3862.    A character constant may include a substring specification, The
  3863. value of such a constant is the value of the substring--for example,
  3864. the value of `'hello'(3:5)' is the same as the value of `'llo''.
  3865. File: g77.info,  Node: Expressions,  Next: Specification Statements,  Prev: Data Types and Constants,  Up: Language
  3866. Expressions
  3867. ===========
  3868.    (The following information augments or overrides the information in
  3869. Chapter 6 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3870. language.  Chapter 6 of that document otherwise serves as the basis for
  3871. the relevant aspects of GNU Fortran.)
  3872. * Menu:
  3873. * %LOC()::
  3874. File: g77.info,  Node: %LOC(),  Up: Expressions
  3875. The `%LOC()' Construct
  3876. ----------------------
  3877.      %LOC(ARG)
  3878.    The `%LOC()' construct is an expression that yields the value of the
  3879. location of its argument, ARG, in memory.  The size of the type of the
  3880. expression depends on the system--typically, it is equivalent to either
  3881. `INTEGER(KIND=1)' or `INTEGER(KIND=2)', though it is actually type
  3882. `INTEGER(KIND=7)'.
  3883.    The argument to `%LOC()' must be suitable as the left-hand side of
  3884. an assignment statement.  That is, it may not be a general expression
  3885. involving operators such as addition, subtraction, and so on, nor may
  3886. it be a constant.
  3887.    Use of `%LOC()' is recommended only for code that is accessing
  3888. facilities outside of GNU Fortran, such as operating system or
  3889. windowing facilities.  It is best to constrain such uses to isolated
  3890. portions of a program--portions that deal specifically and exclusively
  3891. with low-level, system-dependent facilities.  Such portions might well
  3892. provide a portable interface for use by the program as a whole, but are
  3893. themselves not portable, and should be thoroughly tested each time they
  3894. are rebuilt using a new compiler or version of a compiler.
  3895.    Do not depend on `%LOC()' returning a pointer that can be safely
  3896. used to *define* (change) the argument.  While this might work in some
  3897. circumstances, it is hard to predict whether it will continue to work
  3898. when a program (that works using this unsafe behavior) is recompiled
  3899. using different command-line options or a different version of `g77'.
  3900.    Generally, `%LOC()' is safe when used as an argument to a procedure
  3901. that makes use of the value of the corresponding dummy argument only
  3902. during its activation, and only when such use is restricted to
  3903. referencing (reading) the value of the argument to `%LOC()'.
  3904.    *Implementation Note:* Currently, `g77' passes arguments (those not
  3905. passed using a construct such as `%VAL()') by reference or descriptor,
  3906. depending on the type of the actual argument.  Thus, given `INTEGER I',
  3907. `CALL FOO(I)' would seem to mean the same thing as `CALL FOO(%LOC(I))',
  3908. and in fact might compile to identical code.
  3909.    However, `CALL FOO(%LOC(I))' emphatically means "pass the address of
  3910. `I' in memory".  While `CALL FOO(I)' might use that same approach in a
  3911. particular version of `g77', another version or compiler might choose a
  3912. different implementation, such as copy-in/copy-out, to effect the
  3913. desired behavior--and which will therefore not necessarily compile to
  3914. the same code as would `CALL FOO(%LOC(I))' using the same version or
  3915. compiler.
  3916.    *Note Debugging and Interfacing::, for detailed information on how
  3917. this particular version of `g77' implements various constructs.
  3918. File: g77.info,  Node: Specification Statements,  Next: Control Statements,  Prev: Expressions,  Up: Language
  3919. Specification Statements
  3920. ========================
  3921.    (The following information augments or overrides the information in
  3922. Chapter 8 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3923. language.  Chapter 8 of that document otherwise serves as the basis for
  3924. the relevant aspects of GNU Fortran.)
  3925. * Menu:
  3926. * NAMELIST::
  3927. * DOUBLE COMPLEX::
  3928. File: g77.info,  Node: NAMELIST,  Next: DOUBLE COMPLEX,  Up: Specification Statements
  3929. `NAMELIST' Statement
  3930. --------------------
  3931.    The `NAMELIST' statement, and related I/O constructs, are supported
  3932. by the GNU Fortran language in essentially the same way as they are by
  3933. `f2c'.
  3934. File: g77.info,  Node: DOUBLE COMPLEX,  Prev: NAMELIST,  Up: Specification Statements
  3935. `DOUBLE COMPLEX' Statement
  3936. --------------------------
  3937.    `DOUBLE COMPLEX' is a type-statement (and type) that specifies the
  3938. type `COMPLEX(KIND=2)' in GNU Fortran.
  3939. File: g77.info,  Node: Control Statements,  Next: Functions and Subroutines,  Prev: Specification Statements,  Up: Language
  3940. Control Statements
  3941. ==================
  3942.    (The following information augments or overrides the information in
  3943. Chapter 11 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  3944. language.  Chapter 11 of that document otherwise serves as the basis
  3945. for the relevant aspects of GNU Fortran.)
  3946. * Menu:
  3947. * DO WHILE::
  3948. * END DO::
  3949. * Construct Names::
  3950. * CYCLE and EXIT::
  3951. File: g77.info,  Node: DO WHILE,  Next: END DO,  Up: Control Statements
  3952. DO WHILE
  3953. --------
  3954.    The `DO WHILE' statement, a feature of both the MIL-STD 1753 and
  3955. Fortran 90 standards, is provided by the GNU Fortran language.
  3956. File: g77.info,  Node: END DO,  Next: Construct Names,  Prev: DO WHILE,  Up: Control Statements
  3957. END DO
  3958. ------
  3959.    The `END DO' statement is provided by the GNU Fortran language.
  3960.    This statement is used in one of two ways:
  3961.    * The Fortran 90 meaning, in which it specifies the termination
  3962.      point of a single `DO' loop started with a `DO' statement that
  3963.      specifies no termination label.
  3964.    * The MIL-STD 1753 meaning, in which it specifies the termination
  3965.      point of one or more `DO' loops, all of which start with a `DO'
  3966.      statement that specify the label defined for the `END DO'
  3967.      statement.
  3968.      This kind of `END DO' statement is merely a synonym for
  3969.      `CONTINUE', except it is permitted only when the statement is
  3970.      labeled and a target of one or more labeled `DO' loops.
  3971.      It is expected that this use of `END DO' will be removed from the
  3972.      GNU Fortran language in the future, though it is likely that it
  3973.      will long be supported by `g77' as a dialect form.
  3974. File: g77.info,  Node: Construct Names,  Next: CYCLE and EXIT,  Prev: END DO,  Up: Control Statements
  3975. Construct Names
  3976. ---------------
  3977.    The GNU Fortran language supports construct names as defined by the
  3978. Fortran 90 standard.  These names are local to the program unit and are
  3979. defined as follows:
  3980.      CONSTRUCT-NAME: BLOCK-STATEMENT
  3981. Here, CONSTRUCT-NAME is the construct name itself; its definition is
  3982. connoted by the single colon (`:'); and BLOCK-STATEMENT is an `IF',
  3983. `DO', or `SELECT CASE' statement that begins a block.
  3984.    A block that is given a construct name must also specify the same
  3985. construct name in its termination statement:
  3986.      END BLOCK CONSTRUCT-NAME
  3987. Here, BLOCK must be `IF', `DO', or `SELECT', as appropriate.
  3988. File: g77.info,  Node: CYCLE and EXIT,  Prev: Construct Names,  Up: Control Statements
  3989. The `CYCLE' and `EXIT' Statements
  3990. ---------------------------------
  3991.    The `CYCLE' and `EXIT' statements specify that the remaining
  3992. statements in the current iteration of a particular active (enclosing)
  3993. `DO' loop are to be skipped.
  3994.    `CYCLE' specifies that these statements are skipped, but the `END
  3995. DO' statement that marks the end of the `DO' loop be executed--that is,
  3996. the next iteration, if any, is to be started.  If the statement marking
  3997. the end of the `DO' loop is not `END DO'--in other words, if the loop
  3998. is not a block `DO'--the `CYCLE' statement does not execute that
  3999. statement, but does start the next iteration (if any).
  4000.    `EXIT' specifies that the loop specified by the `DO' construct is
  4001. terminated.
  4002.    The `DO' loop affected by `CYCLE' and `EXIT' is the innermost
  4003. enclosing `DO' loop when the following forms are used:
  4004.      CYCLE
  4005.      EXIT
  4006.    Otherwise, the following forms specify the construct name of the
  4007. pertinent `DO' loop:
  4008.      CYCLE CONSTRUCT-NAME
  4009.      EXIT CONSTRUCT-NAME
  4010.    `CYCLE' and `EXIT' can be viewed as glorified `GO TO' statements.
  4011. However, they cannot be easily thought of as `GO TO' statements in
  4012. obscure cases involving FORTRAN 77 loops.  For example:
  4013.            DO 10 I = 1, 5
  4014.            DO 10 J = 1, 5
  4015.               IF (J .EQ. 5) EXIT
  4016.            DO 10 K = 1, 5
  4017.               IF (K .EQ. 3) CYCLE
  4018.      10    PRINT *, 'I=', I, ' J=', J, ' K=', K
  4019.      20    CONTINUE
  4020. In particular, neither the `EXIT' nor `CYCLE' statements above are
  4021. equivalent to a `GO TO' statement to either label `10' or `20'.
  4022.    To understand the effect of `CYCLE' and `EXIT' in the above
  4023. fragment, it is helpful to first translate it to its equivalent using
  4024. only block `DO' loops:
  4025.            DO I = 1, 5
  4026.               DO J = 1, 5
  4027.                  IF (J .EQ. 5) EXIT
  4028.                  DO K = 1, 5
  4029.                     IF (K .EQ. 3) CYCLE
  4030.      10             PRINT *, 'I=', I, ' J=', J, ' K=', K
  4031.                  END DO
  4032.               END DO
  4033.            END DO
  4034.      20    CONTINUE
  4035.    Adding new labels allows translation of `CYCLE' and `EXIT' to `GO
  4036. TO' so they may be more easily understood by programmers accustomed to
  4037. FORTRAN coding:
  4038.            DO I = 1, 5
  4039.               DO J = 1, 5
  4040.                  IF (J .EQ. 5) GOTO 18
  4041.                  DO K = 1, 5
  4042.                     IF (K .EQ. 3) GO TO 12
  4043.      10             PRINT *, 'I=', I, ' J=', J, ' K=', K
  4044.      12          END DO
  4045.               END DO
  4046.      18    END DO
  4047.      20    CONTINUE
  4048. Thus, the `CYCLE' statement in the innermost loop skips over the
  4049. `PRINT' statement as it begins the next iteration of the loop, while
  4050. the `EXIT' statement in the middle loop ends that loop but *not* the
  4051. outermost loop.
  4052. File: g77.info,  Node: Functions and Subroutines,  Next: Scope and Classes of Names,  Prev: Control Statements,  Up: Language
  4053. Functions and Subroutines
  4054. =========================
  4055.    (The following information augments or overrides the information in
  4056. Chapter 15 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  4057. language.  Chapter 15 of that document otherwise serves as the basis
  4058. for the relevant aspects of GNU Fortran.)
  4059. * Menu:
  4060. * %VAL()::
  4061. * %REF()::
  4062. * %DESCR()::
  4063. * Generics and Specifics::
  4064. * REAL() and AIMAG() of Complex::
  4065. * CMPLX() of DOUBLE PRECISION::
  4066. * MIL-STD 1753::
  4067. * f77/f2c Intrinsics::
  4068. * Table of Intrinsic Functions::
  4069. File: g77.info,  Node: %VAL(),  Next: %REF(),  Up: Functions and Subroutines
  4070. The `%VAL()' Construct
  4071. ----------------------
  4072.      %VAL(ARG)
  4073.    The `%VAL()' construct specifies that an argument, ARG, is to be
  4074. passed by value, instead of by reference or descriptor.
  4075.    `%VAL()' is restricted to actual arguments in invocations of
  4076. external procedures.
  4077.    Use of `%VAL()' is recommended only for code that is accessing
  4078. facilities outside of GNU Fortran, such as operating system or
  4079. windowing facilities.  It is best to constrain such uses to isolated
  4080. portions of a program--portions the deal specifically and exclusively
  4081. with low-level, system-dependent facilities.  Such portions might well
  4082. provide a portable interface for use by the program as a whole, but are
  4083. themselves not portable, and should be thoroughly tested each time they
  4084. are rebuilt using a new compiler or version of a compiler.
  4085.    *Implementation Note:* Currently, `g77' passes all arguments either
  4086. by reference or by descriptor.
  4087.    Thus, use of `%VAL()' tends to be restricted to cases where the
  4088. called procedure is written in a language other than Fortran that
  4089. supports call-by-value semantics.  (C is an example of such a language.)
  4090.    *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
  4091. information on how this particular version of `g77' passes arguments to
  4092. procedures.
  4093. File: g77.info,  Node: %REF(),  Next: %DESCR(),  Prev: %VAL(),  Up: Functions and Subroutines
  4094. The `%REF()' Construct
  4095. ----------------------
  4096.      %REF(ARG)
  4097.    The `%REF()' construct specifies that an argument, ARG, is to be
  4098. passed by reference, instead of by value or descriptor.
  4099.    `%REF()' is restricted to actual arguments in invocations of
  4100. external procedures.
  4101.    Use of `%REF()' is recommended only for code that is accessing
  4102. facilities outside of GNU Fortran, such as operating system or
  4103. windowing facilities.  It is best to constrain such uses to isolated
  4104. portions of a program--portions the deal specifically and exclusively
  4105. with low-level, system-dependent facilities.  Such portions might well
  4106. provide a portable interface for use by the program as a whole, but are
  4107. themselves not portable, and should be thoroughly tested each time they
  4108. are rebuilt using a new compiler or version of a compiler.
  4109.    Do not depend on `%REF()' supplying a pointer to the procedure being
  4110. invoked.  While that is a likely implementation choice, other
  4111. implementation choices are available that preserve Fortran
  4112. pass-by-reference semantics without passing a pointer to the argument,
  4113. ARG.  (For example, a copy-in/copy-out implementation.)
  4114.    *Implementation Note:* Currently, `g77' passes all arguments (other
  4115. than variables and arrays of type `CHARACTER') by reference.  Future
  4116. versions of, or dialects supported by, `g77' might not pass `CHARACTER'
  4117. functions by reference.
  4118.    Thus, use of `%REF()' tends to be restricted to cases where ARG is
  4119. type `CHARACTER' but the called procedure accesses it via a means other
  4120. than the method used for Fortran `CHARACTER' arguments.
  4121.    *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
  4122. information on how this particular version of `g77' passes arguments to
  4123. procedures.
  4124. File: g77.info,  Node: %DESCR(),  Next: Generics and Specifics,  Prev: %REF(),  Up: Functions and Subroutines
  4125. The `%DESCR()' Construct
  4126. ------------------------
  4127.      %DESCR(ARG)
  4128.    The `%DESCR()' construct specifies that an argument, ARG, is to be
  4129. passed by descriptor, instead of by value or reference.
  4130.    `%DESCR()' is restricted to actual arguments in invocations of
  4131. external procedures.
  4132.    Use of `%DESCR()' is recommended only for code that is accessing
  4133. facilities outside of GNU Fortran, such as operating system or
  4134. windowing facilities.  It is best to constrain such uses to isolated
  4135. portions of a program--portions the deal specifically and exclusively
  4136. with low-level, system-dependent facilities.  Such portions might well
  4137. provide a portable interface for use by the program as a whole, but are
  4138. themselves not portable, and should be thoroughly tested each time they
  4139. are rebuilt using a new compiler or version of a compiler.
  4140.    Do not depend on `%DESCR()' supplying a pointer and/or a length
  4141. passed by value to the procedure being invoked.  While that is a likely
  4142. implementation choice, other implementation choices are available that
  4143. preserve the pass-by-reference semantics without passing a pointer to
  4144. the argument, ARG.  (For example, a copy-in/copy-out implementation.)
  4145. And, future versions of `g77' might change the way descriptors are
  4146. implemented, such as passing a single argument pointing to a record
  4147. containing the pointer/length information instead of passing that same
  4148. information via two arguments as it currently does.
  4149.    *Implementation Note:* Currently, `g77' passes all variables and
  4150. arrays of type `CHARACTER' by descriptor.  Future versions of, or
  4151. dialects supported by, `g77' might pass `CHARACTER' functions by
  4152. descriptor as well.
  4153.    Thus, use of `%DESCR()' tends to be restricted to cases where ARG is
  4154. not type `CHARACTER' but the called procedure accesses it via a means
  4155. similar to the method used for Fortran `CHARACTER' arguments.
  4156.    *Note Procedures (SUBROUTINE and FUNCTION): Procedures, for detailed
  4157. information on how this particular version of `g77' passes arguments to
  4158. procedures.
  4159. File: g77.info,  Node: Generics and Specifics,  Next: REAL() and AIMAG() of Complex,  Prev: %DESCR(),  Up: Functions and Subroutines
  4160. Generics and Specifics
  4161. ----------------------
  4162.    The ANSI FORTRAN 77 language defines generic and specific intrinsics.
  4163. In short, the distinctions are:
  4164.    * *Specific* intrinsics have specific types for their arguments and
  4165.      a specific return type.
  4166.    * *Generic* intrinsics are treated, on a case-by-case basis in the
  4167.      program's source code, as one of several possible specific
  4168.      intrinsics.
  4169.      Typically, a generic intrinsic has a return type that is
  4170.      determined by the type of one or more of its arguments.
  4171.    The GNU Fortran language generalizes these concepts somewhat,
  4172. especially by providing intrinsic subroutines and generic intrinsics
  4173. that are treated as either a specific intrinsic subroutine or a
  4174. specific intrinsic function (e.g. `SECOND').
  4175.    However, GNU Fortran avoids generalizing this concept to the point
  4176. where existing code would be accepted as meaning something possibly
  4177. different than what was intended.
  4178.    For example, `ABS' is a generic intrinsic, so all working code
  4179. written using `ABS' of an `INTEGER' argument expects an `INTEGER'
  4180. return value.  Similarly, all such code expects that `ABS' of an
  4181. `INTEGER*2' argument returns an `INTEGER*2' return value.
  4182.    Yet, `IABS' is a *specific* intrinsic that accepts only an
  4183. `INTEGER(KIND=1)' argument.  Code that passes something other than an
  4184. `INTEGER(KIND=1)' argument to `IABS' is not valid GNU Fortran code,
  4185. because it is not clear what the author intended.
  4186.    For example, if `J' is `INTEGER(KIND=6)', `IABS(J)' is not defined
  4187. by the GNU Fortran language, because the programmer might have used
  4188. that construct to mean any of the following, subtly different, things:
  4189.    * Convert `J' to `INTEGER(KIND=1)' first (as if `IABS(INT(J))' had
  4190.      been written).
  4191.    * Convert the result of the intrinsic to `INTEGER(KIND=1)' (as if
  4192.      `INT(ABS(J))' had been written).
  4193.    * No conversion (as if `ABS(J)' had been written).
  4194.    The distinctions matter especially when types and values wider than
  4195. `INTEGER(KIND=1)' (such as `INTEGER(KIND=2)'), or when operations
  4196. performing more "arithmetic" than absolute-value, are involved.
  4197.    The following sample program is not a valid GNU Fortran program, but
  4198. might be accepted by other compilers.  If so, the output is likely to
  4199. be revealing in terms of how a given compiler treats intrinsics (that
  4200. normally are specific) when they are given arguments that do not
  4201. conform to their stated requirements:
  4202.            PROGRAM JCB002
  4203.      C Version 1:
  4204.      C Modified 1997-05-21 (Burley) to accommodate compilers that implement
  4205.      C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2.
  4206.      C
  4207.      C Version 0:
  4208.      C Written by James Craig Burley 1997-02-20.
  4209.      C Contact via Internet email: burley@gnu.org
  4210.      C
  4211.      C Purpose:
  4212.      C Determine how compilers handle non-standard IDIM
  4213.      C on INTEGER*2 operands, which presumably can be
  4214.      C extrapolated into understanding how the compiler
  4215.      C generally treats specific intrinsics that are passed
  4216.      C arguments not of the correct types.
  4217.      C
  4218.      C If your compiler implements INTEGER*2 and INTEGER
  4219.      C as the same type, change all INTEGER*2 below to
  4220.      C INTEGER*1.
  4221.      C
  4222.            INTEGER*2 I0, I4
  4223.            INTEGER I1, I2, I3
  4224.            INTEGER*2 ISMALL, ILARGE
  4225.            INTEGER*2 ITOOLG, ITWO
  4226.            INTEGER*2 ITMP
  4227.            LOGICAL L2, L3, L4
  4228.      C
  4229.      C Find smallest INTEGER*2 number.
  4230.      C
  4231.            ISMALL=0
  4232.       10   I0 = ISMALL-1
  4233.            IF ((I0 .GE. ISMALL) .OR. (I0+1 .NE. ISMALL)) GOTO 20
  4234.            ISMALL = I0
  4235.            GOTO 10
  4236.       20   CONTINUE
  4237.      C
  4238.      C Find largest INTEGER*2 number.
  4239.      C
  4240.            ILARGE=0
  4241.       30   I0 = ILARGE+1
  4242.            IF ((I0 .LE. ILARGE) .OR. (I0-1 .NE. ILARGE)) GOTO 40
  4243.            ILARGE = I0
  4244.            GOTO 30
  4245.       40   CONTINUE
  4246.      C
  4247.      C Multiplying by two adds stress to the situation.
  4248.      C
  4249.            ITWO = 2
  4250.      C
  4251.      C Need a number that, added to -2, is too wide to fit in I*2.
  4252.      C
  4253.            ITOOLG = ISMALL
  4254.      C
  4255.      C Use IDIM the straightforward way.
  4256.      C
  4257.            I1 = IDIM (ILARGE, ISMALL) * ITWO + ITOOLG
  4258.      C
  4259.      C Calculate result for first interpretation.
  4260.      C
  4261.            I2 = (INT (ILARGE) - INT (ISMALL)) * ITWO + ITOOLG
  4262.      C
  4263.      C Calculate result for second interpretation.
  4264.      C
  4265.            ITMP = ILARGE - ISMALL
  4266.            I3 = (INT (ITMP)) * ITWO + ITOOLG
  4267.      C
  4268.      C Calculate result for third interpretation.
  4269.      C
  4270.            I4 = (ILARGE - ISMALL) * ITWO + ITOOLG
  4271.      C
  4272.      C Print results.
  4273.      C
  4274.            PRINT *, 'ILARGE=', ILARGE
  4275.            PRINT *, 'ITWO=', ITWO
  4276.            PRINT *, 'ITOOLG=', ITOOLG
  4277.            PRINT *, 'ISMALL=', ISMALL
  4278.            PRINT *, 'I1=', I1
  4279.            PRINT *, 'I2=', I2
  4280.            PRINT *, 'I3=', I3
  4281.            PRINT *, 'I4=', I4
  4282.            PRINT *
  4283.            L2 = (I1 .EQ. I2)
  4284.            L3 = (I1 .EQ. I3)
  4285.            L4 = (I1 .EQ. I4)
  4286.            IF (L2 .AND. .NOT.L3 .AND. .NOT.L4) THEN
  4287.               PRINT *, 'Interp 1: IDIM(I*2,I*2) => IDIM(INT(I*2),INT(I*2))'
  4288.               STOP
  4289.            END IF
  4290.            IF (L3 .AND. .NOT.L2 .AND. .NOT.L4) THEN
  4291.               PRINT *, 'Interp 2: IDIM(I*2,I*2) => INT(DIM(I*2,I*2))'
  4292.               STOP
  4293.            END IF
  4294.            IF (L4 .AND. .NOT.L2 .AND. .NOT.L3) THEN
  4295.               PRINT *, 'Interp 3: IDIM(I*2,I*2) => DIM(I*2,I*2)'
  4296.               STOP
  4297.            END IF
  4298.            PRINT *, 'Results need careful analysis.'
  4299.            END
  4300.    No future version of the GNU Fortran language will likely permit
  4301. specific intrinsic invocations with wrong-typed arguments (such as
  4302. `IDIM' in the above example), since it has been determined that
  4303. disagreements exist among many production compilers on the
  4304. interpretation of such invocations.  These disagreements strongly
  4305. suggest that Fortran programmers, and certainly existing Fortran
  4306. programs, disagree about the meaning of such invocations.
  4307.    The first version of `JCB002' didn't accommodate some compilers'
  4308. treatment of `INT(I1-I2)' where `I1' and `I2' are `INTEGER*2'.  In such
  4309. a case, these compilers apparently convert both operands to `INTEGER*4'
  4310. and then do an `INTEGER*4' subtraction, instead of doing an `INTEGER*2'
  4311. subtraction on the original values in `I1' and `I2'.
  4312.    However, the results of the careful analyses done on the outputs of
  4313. programs compiled by these various compilers show that they all
  4314. implement either `Interp 1' or `Interp 2' above.
  4315.    Specifically, it is believed that the new version of `JCB002' above
  4316. will confirm that:
  4317.    * Digital Semiconductor ("DEC") Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5
  4318.      `f77' compilers all implement `Interp 1'.
  4319.    * IRIX 5.3 `f77' compiler implements `Interp 2'.
  4320.    * Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3, and IRIX 6.1
  4321.      `f77' compilers all implement `Interp 3'.
  4322.    If you get different results than the above for the stated
  4323. compilers, or have results for other compilers that might be worth
  4324. adding to the above list, please let us know the details (compiler
  4325. product, version, machine, results, and so on).
  4326. File: g77.info,  Node: REAL() and AIMAG() of Complex,  Next: CMPLX() of DOUBLE PRECISION,  Prev: Generics and Specifics,  Up: Functions and Subroutines
  4327. `REAL()' and `AIMAG()' of Complex
  4328. ---------------------------------
  4329.    The GNU Fortran language disallows `REAL(EXPR)' and `AIMAG(EXPR)',
  4330. where EXPR is any `COMPLEX' type other than `COMPLEX(KIND=1)', except
  4331. when they are used in the following way:
  4332.      REAL(REAL(EXPR))
  4333.      REAL(AIMAG(EXPR))
  4334. The above forms explicitly specify that the desired effect is to
  4335. convert the real or imaginary part of EXPR, which might be some `REAL'
  4336. type other than `REAL(KIND=1)', to type `REAL(KIND=1)', and have that
  4337. serve as the value of the expression.
  4338.    The GNU Fortran language offers clearly named intrinsics to extract
  4339. the real and imaginary parts of a complex entity without any conversion:
  4340.      REALPART(EXPR)
  4341.      IMAGPART(EXPR)
  4342.    To express the above using typical extended FORTRAN 77, use the
  4343. following constructs (when EXPR is `COMPLEX(KIND=2)'):
  4344.      DBLE(EXPR)
  4345.      DIMAG(EXPR)
  4346.    The FORTRAN 77 language offers no way to explicitly specify the real
  4347. and imaginary parts of a complex expression of arbitrary type,
  4348. apparently as a result of requiring support for only one `COMPLEX' type
  4349. (`COMPLEX(KIND=1)').  The concepts of converting an expression to type
  4350. `REAL(KIND=1)' and of extracting the real part of a complex expression
  4351. were thus "smooshed" by FORTRAN 77 into a single intrinsic, since they
  4352. happened to have the exact same effect in that language (due to having
  4353. only one `COMPLEX' type).
  4354.    *Note:* When `-ff90' is in effect, `g77' treats `REAL(EXPR)', where
  4355. EXPR is of type `COMPLEX', as `REALPART(EXPR)', whereas with
  4356. `-fugly-complex -fno-f90' in effect, it is treated as
  4357. `REAL(REALPART(EXPR))'.
  4358.    *Note Ugly Complex Part Extraction::, for more information.
  4359. File: g77.info,  Node: CMPLX() of DOUBLE PRECISION,  Next: MIL-STD 1753,  Prev: REAL() and AIMAG() of Complex,  Up: Functions and Subroutines
  4360. `CMPLX()' of `DOUBLE PRECISION'
  4361. -------------------------------
  4362.    In accordance with Fortran 90 and at least some (perhaps all) other
  4363. compilers, the GNU Fortran language defines `CMPLX()' as always
  4364. returning a result that is type `COMPLEX(KIND=1)'.
  4365.    This means `CMPLX(D1,D2)', where `D1' and `D2' are `REAL(KIND=2)'
  4366. (`DOUBLE PRECISION'), is treated as:
  4367.      CMPLX(SNGL(D1), SNGL(D2))
  4368.    (It was necessary for Fortran 90 to specify this behavior for
  4369. `DOUBLE PRECISION' arguments, since that is the behavior mandated by
  4370. FORTRAN 77.)
  4371.    The GNU Fortran language also provides the `DCMPLX()' intrinsic,
  4372. which is provided by some FORTRAN 77 compilers to construct a `DOUBLE
  4373. COMPLEX' entity from of `DOUBLE PRECISION' operands.  However, this
  4374. solution does not scale well when more `COMPLEX' types (having various
  4375. precisions and ranges) are offered by Fortran implementations.
  4376.    Fortran 90 extends the `CMPLX()' intrinsic by adding an extra
  4377. argument used to specify the desired kind of complex result.  However,
  4378. this solution is somewhat awkward to use, and `g77' currently does not
  4379. support it.
  4380.    The GNU Fortran language provides a simple way to build a complex
  4381. value out of two numbers, with the precise type of the value determined
  4382. by the types of the two numbers (via the usual type-promotion
  4383. mechanism):
  4384.      COMPLEX(REAL, IMAG)
  4385.    When REAL and IMAG are the same `REAL' types, `COMPLEX()' performs
  4386. no conversion other than to put them together to form a complex result
  4387. of the same (complex version of real) type.
  4388.    *Note Complex Intrinsic::, for more information.
  4389. File: g77.info,  Node: MIL-STD 1753,  Next: f77/f2c Intrinsics,  Prev: CMPLX() of DOUBLE PRECISION,  Up: Functions and Subroutines
  4390. MIL-STD 1753 Support
  4391. --------------------
  4392.    The GNU Fortran language includes the MIL-STD 1753 intrinsics
  4393. `BTEST', `IAND', `IBCLR', `IBITS', `IBSET', `IEOR', `IOR', `ISHFT',
  4394. `ISHFTC', `MVBITS', and `NOT'.
  4395. File: g77.info,  Node: f77/f2c Intrinsics,  Next: Table of Intrinsic Functions,  Prev: MIL-STD 1753,  Up: Functions and Subroutines
  4396. `f77'/`f2c' Intrinsics
  4397. ----------------------
  4398.    The bit-manipulation intrinsics supported by traditional `f77' and
  4399. by `f2c' are available in the GNU Fortran language.  These include
  4400. `AND', `LSHIFT', `OR', `RSHIFT', and `XOR'.
  4401.    Also supported are the intrinsics `CDABS', `CDCOS', `CDEXP',
  4402. `CDLOG', `CDSIN', `CDSQRT', `DCMPLX', `DCONJG', `DFLOAT', `DIMAG',
  4403. `DREAL', and `IMAG', `ZABS', `ZCOS', `ZEXP', `ZLOG', `ZSIN', and
  4404. `ZSQRT'.
  4405. File: g77.info,  Node: Table of Intrinsic Functions,  Prev: f77/f2c Intrinsics,  Up: Functions and Subroutines
  4406. Table of Intrinsic Functions
  4407. ----------------------------
  4408.    (Corresponds to Section 15.10 of ANSI X3.9-1978 FORTRAN 77.)
  4409.    The GNU Fortran language adds various functions, subroutines, types,
  4410. and arguments to the set of intrinsic functions in ANSI FORTRAN 77.
  4411. The complete set of intrinsics supported by the GNU Fortran language is
  4412. described below.
  4413.    Note that a name is not treated as that of an intrinsic if it is
  4414. specified in an `EXTERNAL' statement in the same program unit; if a
  4415. command-line option is used to disable the groups to which the
  4416. intrinsic belongs; or if the intrinsic is not named in an `INTRINSIC'
  4417. statement and a command-line option is used to hide the groups to which
  4418. the intrinsic belongs.
  4419.    So, it is recommended that any reference in a program unit to an
  4420. intrinsic procedure that is not a standard FORTRAN 77 intrinsic be
  4421. accompanied by an appropriate `INTRINSIC' statement in that program
  4422. unit.  This sort of defensive programming makes it more likely that an
  4423. implementation will issue a diagnostic rather than generate incorrect
  4424. code for such a reference.
  4425.    The terminology used below is based on that of the Fortran 90
  4426. standard, so that the text may be more concise and accurate:
  4427.    * `OPTIONAL' means the argument may be omitted.
  4428.    * `A-1, A-2, ..., A-n' means more than one argument (generally named
  4429.      `A') may be specified.
  4430.    * `scalar' means the argument must not be an array (must be a
  4431.      variable or array element, or perhaps a constant if expressions
  4432.      are permitted).
  4433.    * `DIMENSION(4)' means the argument must be an array having 4
  4434.      elements.
  4435.    * `INTENT(IN)' means the argument must be an expression (such as a
  4436.      constant or a variable that is defined upon invocation of the
  4437.      intrinsic).
  4438.    * `INTENT(OUT)' means the argument must be definable by the
  4439.      invocation of the intrinsic (that is, must not be a constant nor
  4440.      an expression involving operators other than array reference and
  4441.      substring reference).
  4442.    * `INTENT(INOUT)' means the argument must be defined prior to, and
  4443.      definable by, invocation of the intrinsic (a combination of the
  4444.      requirements of `INTENT(IN)' and `INTENT(OUT)'.
  4445.    * *Note Kind Notation:: for explanation of `KIND'.
  4446.    (Note that the empty lines appearing in the menu below are not
  4447. intentional--they result from a bug in the GNU `makeinfo' program...a
  4448. program that, if it did not exist, would leave this document in far
  4449. worse shape!)
  4450. * Menu:
  4451. * Abort Intrinsic::     Abort the program.
  4452. * Abs Intrinsic::       Absolute value.
  4453. * Access Intrinsic::    Check file accessibility.
  4454. * AChar Intrinsic::     ASCII character from code.
  4455. * ACos Intrinsic::      Arc cosine.
  4456. * AdjustL Intrinsic::   (Reserved for future use.)
  4457. * AdjustR Intrinsic::   (Reserved for future use.)
  4458. * AImag Intrinsic::     Convert/extract imaginary part of complex.
  4459. * AInt Intrinsic::      Truncate to whole number.
  4460. * Alarm Intrinsic::     Execute a routine after a given delay.
  4461. * All Intrinsic::       (Reserved for future use.)
  4462. * Allocated Intrinsic:: (Reserved for future use.)
  4463. * ALog Intrinsic::      Natural logarithm (archaic).
  4464. * ALog10 Intrinsic::    Natural logarithm (archaic).
  4465. * AMax0 Intrinsic::     Maximum value (archaic).
  4466. * AMax1 Intrinsic::     Maximum value (archaic).
  4467. * AMin0 Intrinsic::     Minimum value (archaic).
  4468. * AMin1 Intrinsic::     Minimum value (archaic).
  4469. * AMod Intrinsic::      Remainder (archaic).
  4470. * And Intrinsic::       Boolean AND.
  4471. * ANInt Intrinsic::     Round to nearest whole number.
  4472. * Any Intrinsic::       (Reserved for future use.)
  4473. * ASin Intrinsic::      Arc sine.
  4474. * Associated Intrinsic:: (Reserved for future use.)
  4475. * ATan Intrinsic::      Arc tangent.
  4476. * ATan2 Intrinsic::     Arc tangent.
  4477. * BesJ0 Intrinsic::     Bessel function.
  4478. * BesJ1 Intrinsic::     Bessel function.
  4479. * BesJN Intrinsic::     Bessel function.
  4480. * BesY0 Intrinsic::     Bessel function.
  4481. * BesY1 Intrinsic::     Bessel function.
  4482. * BesYN Intrinsic::     Bessel function.
  4483. * Bit_Size Intrinsic::  Number of bits in argument's type.
  4484. * BTest Intrinsic::     Test bit.
  4485. * CAbs Intrinsic::      Absolute value (archaic).
  4486. * CCos Intrinsic::      Cosine (archaic).
  4487. * Ceiling Intrinsic::   (Reserved for future use.)
  4488. * CExp Intrinsic::      Exponential (archaic).
  4489. * Char Intrinsic::      Character from code.
  4490. * ChDir Intrinsic (subroutine):: Change directory.
  4491. * ChMod Intrinsic (subroutine):: Change file modes.
  4492. * CLog Intrinsic::      Natural logarithm (archaic).
  4493. * Cmplx Intrinsic::     Construct `COMPLEX(KIND=1)' value.
  4494. * Complex Intrinsic::   Build complex value from real and
  4495.                          imaginary parts.
  4496. * Conjg Intrinsic::     Complex conjugate.
  4497. * Cos Intrinsic::       Cosine.
  4498. * CosH Intrinsic::      Hyperbolic cosine.
  4499. * Count Intrinsic::     (Reserved for future use.)
  4500. * CPU_Time Intrinsic::  Get current CPU time.
  4501. * CShift Intrinsic::    (Reserved for future use.)
  4502. * CSin Intrinsic::      Sine (archaic).
  4503. * CSqRt Intrinsic::     Square root (archaic).
  4504. * CTime Intrinsic (subroutine):: Convert time to Day Mon dd hh:mm:ss yyyy.
  4505. * CTime Intrinsic (function):: Convert time to Day Mon dd hh:mm:ss yyyy.
  4506. * DAbs Intrinsic::      Absolute value (archaic).
  4507. * DACos Intrinsic::     Arc cosine (archaic).
  4508. * DASin Intrinsic::     Arc sine (archaic).
  4509. * DATan Intrinsic::     Arc tangent (archaic).
  4510. * DATan2 Intrinsic::    Arc tangent (archaic).
  4511. * Date_and_Time Intrinsic:: (Reserved for future use.)
  4512. * DbesJ0 Intrinsic::    Bessel function (archaic).
  4513. * DbesJ1 Intrinsic::    Bessel function (archaic).
  4514. * DbesJN Intrinsic::    Bessel function (archaic).
  4515. * DbesY0 Intrinsic::    Bessel function (archaic).
  4516. * DbesY1 Intrinsic::    Bessel function (archaic).
  4517. * DbesYN Intrinsic::    Bessel function (archaic).
  4518. * Dble Intrinsic::      Convert to double precision.
  4519. * DCos Intrinsic::      Cosine (archaic).
  4520. * DCosH Intrinsic::     Hyperbolic cosine (archaic).
  4521. * DDiM Intrinsic::      Difference magnitude (archaic).
  4522. * DErF Intrinsic::      Error function (archaic).
  4523. * DErFC Intrinsic::     Complementary error function (archaic).
  4524. * DExp Intrinsic::      Exponential (archaic).
  4525. * Digits Intrinsic::    (Reserved for future use.)
  4526. * DiM Intrinsic::       Difference magnitude (non-negative subtract).
  4527. * DInt Intrinsic::      Truncate to whole number (archaic).
  4528. * DLog Intrinsic::      Natural logarithm (archaic).
  4529. * DLog10 Intrinsic::    Natural logarithm (archaic).
  4530. * DMax1 Intrinsic::     Maximum value (archaic).
  4531. * DMin1 Intrinsic::     Minimum value (archaic).
  4532. * DMod Intrinsic::      Remainder (archaic).
  4533. * DNInt Intrinsic::     Round to nearest whole number (archaic).
  4534. * Dot_Product Intrinsic:: (Reserved for future use.)
  4535. * DProd Intrinsic::     Double-precision product.
  4536. * DSign Intrinsic::     Apply sign to magnitude (archaic).
  4537. * DSin Intrinsic::      Sine (archaic).
  4538. * DSinH Intrinsic::     Hyperbolic sine (archaic).
  4539. * DSqRt Intrinsic::     Square root (archaic).
  4540. * DTan Intrinsic::      Tangent (archaic).
  4541. * DTanH Intrinsic::     Hyperbolic tangent (archaic).
  4542. * Dtime Intrinsic (subroutine):: Get elapsed time since last time.
  4543. * EOShift Intrinsic::   (Reserved for future use.)
  4544. * Epsilon Intrinsic::   (Reserved for future use.)
  4545. * ErF Intrinsic::       Error function.
  4546. * ErFC Intrinsic::      Complementary error function.
  4547. * ETime Intrinsic (subroutine):: Get elapsed time for process.
  4548. * ETime Intrinsic (function):: Get elapsed time for process.
  4549. * Exit Intrinsic::      Terminate the program.
  4550. * Exp Intrinsic::       Exponential.
  4551. * Exponent Intrinsic::  (Reserved for future use.)
  4552. * Fdate Intrinsic (subroutine):: Get current time as Day Mon dd hh:mm:ss yyyy.
  4553. * Fdate Intrinsic (function):: Get current time as Day Mon dd hh:mm:ss yyyy.
  4554. * FGet Intrinsic (subroutine):: Read a character from unit 5 stream-wise.
  4555. * FGetC Intrinsic (subroutine):: Read a character stream-wise.
  4556. * Float Intrinsic::     Conversion (archaic).
  4557. * Floor Intrinsic::     (Reserved for future use.)
  4558. * Flush Intrinsic::     Flush buffered output.
  4559. * FNum Intrinsic::      Get file descriptor from Fortran unit number.
  4560. * FPut Intrinsic (subroutine):: Write a character to unit 6 stream-wise.
  4561. * FPutC Intrinsic (subroutine):: Write a character stream-wise.
  4562. * Fraction Intrinsic::  (Reserved for future use.)
  4563. * FSeek Intrinsic::     Position file (low-level).
  4564. * FStat Intrinsic (subroutine):: Get file information.
  4565. * FStat Intrinsic (function):: Get file information.
  4566. * FTell Intrinsic (subroutine):: Get file position (low-level).
  4567. * FTell Intrinsic (function):: Get file position (low-level).
  4568. * GError Intrinsic::    Get error message for last error.
  4569. * GetArg Intrinsic::    Obtain command-line argument.
  4570. * GetCWD Intrinsic (subroutine):: Get current working directory.
  4571. * GetCWD Intrinsic (function):: Get current working directory.
  4572. * GetEnv Intrinsic::    Get environment variable.
  4573. * GetGId Intrinsic::    Get process group id.
  4574. * GetLog Intrinsic::    Get login name.
  4575. * GetPId Intrinsic::    Get process id.
  4576. * GetUId Intrinsic::    Get process user id.
  4577. * GMTime Intrinsic::    Convert time to GMT time info.
  4578. * HostNm Intrinsic (subroutine):: Get host name.
  4579. * HostNm Intrinsic (function):: Get host name.
  4580. * Huge Intrinsic::      (Reserved for future use.)
  4581. * IAbs Intrinsic::      Absolute value (archaic).
  4582. * IAChar Intrinsic::    ASCII code for character.
  4583. * IAnd Intrinsic::      Boolean AND.
  4584. * IArgC Intrinsic::     Obtain count of command-line arguments.
  4585. * IBClr Intrinsic::     Clear a bit.
  4586. * IBits Intrinsic::     Extract a bit subfield of a variable.
  4587. * IBSet Intrinsic::     Set a bit.
  4588. * IChar Intrinsic::     Code for character.
  4589. * IDate Intrinsic (UNIX):: Get local time info.
  4590. * IDiM Intrinsic::      Difference magnitude (archaic).
  4591. * IDInt Intrinsic::     Convert to `INTEGER' value truncated
  4592.                          to whole number (archaic).
  4593. * IDNInt Intrinsic::    Convert to `INTEGER' value rounded
  4594.                          to nearest whole number (archaic).
  4595. * IEOr Intrinsic::      Boolean XOR.
  4596. * IErrNo Intrinsic::    Get error number for last error.
  4597. * IFix Intrinsic::      Conversion (archaic).
  4598. * Imag Intrinsic::      Extract imaginary part of complex.
  4599. * ImagPart Intrinsic::  Extract imaginary part of complex.
  4600. * Index Intrinsic::     Locate a CHARACTER substring.
  4601. * Int Intrinsic::       Convert to `INTEGER' value truncated
  4602.                          to whole number.
  4603. * Int2 Intrinsic::      Convert to `INTEGER(KIND=6)' value
  4604.                          truncated to whole number.
  4605. * Int8 Intrinsic::      Convert to `INTEGER(KIND=2)' value
  4606.                          truncated to whole number.
  4607. * IOr Intrinsic::       Boolean OR.
  4608. * IRand Intrinsic::     Random number.
  4609. * IsaTty Intrinsic::    Is unit connected to a terminal?
  4610. * IShft Intrinsic::     Logical bit shift.
  4611. * IShftC Intrinsic::    Circular bit shift.
  4612. * ISign Intrinsic::     Apply sign to magnitude (archaic).
  4613. * ITime Intrinsic::     Get local time of day.
  4614. * Kill Intrinsic (subroutine):: Signal a process.
  4615. * Kind Intrinsic::      (Reserved for future use.)
  4616. * LBound Intrinsic::    (Reserved for future use.)
  4617. * Len Intrinsic::       Length of character entity.
  4618. * Len_Trim Intrinsic::  Get last non-blank character in string.
  4619. * LGe Intrinsic::       Lexically greater than or equal.
  4620. * LGt Intrinsic::       Lexically greater than.
  4621. * Link Intrinsic (subroutine):: Make hard link in file system.
  4622. * LLe Intrinsic::       Lexically less than or equal.
  4623. * LLt Intrinsic::       Lexically less than.
  4624. * LnBlnk Intrinsic::    Get last non-blank character in string.
  4625. * Loc Intrinsic::       Address of entity in core.
  4626. * Log Intrinsic::       Natural logarithm.
  4627. * Log10 Intrinsic::     Natural logarithm.
  4628. * Logical Intrinsic::   (Reserved for future use.)
  4629. * Long Intrinsic::      Conversion to `INTEGER(KIND=1)' (archaic).
  4630. * LShift Intrinsic::    Left-shift bits.
  4631. * LStat Intrinsic (subroutine):: Get file information.
  4632. * LStat Intrinsic (function):: Get file information.
  4633. * LTime Intrinsic::     Convert time to local time info.
  4634. * MatMul Intrinsic::    (Reserved for future use.)
  4635. * Max Intrinsic::       Maximum value.
  4636. * Max0 Intrinsic::      Maximum value (archaic).
  4637. * Max1 Intrinsic::      Maximum value (archaic).
  4638. * MaxExponent Intrinsic:: (Reserved for future use.)
  4639. * MaxLoc Intrinsic::    (Reserved for future use.)
  4640. * MaxVal Intrinsic::    (Reserved for future use.)
  4641. * MClock Intrinsic::    Get number of clock ticks for process.
  4642. * MClock8 Intrinsic::   Get number of clock ticks for process.
  4643. * Merge Intrinsic::     (Reserved for future use.)
  4644. * Min Intrinsic::       Minimum value.
  4645. * Min0 Intrinsic::      Minimum value (archaic).
  4646. * Min1 Intrinsic::      Minimum value (archaic).
  4647. * MinExponent Intrinsic:: (Reserved for future use.)
  4648. * MinLoc Intrinsic::    (Reserved for future use.)
  4649. * MinVal Intrinsic::    (Reserved for future use.)
  4650. * Mod Intrinsic::       Remainder.
  4651. * Modulo Intrinsic::    (Reserved for future use.)
  4652. * MvBits Intrinsic::    Moving a bit field.
  4653. * Nearest Intrinsic::   (Reserved for future use.)
  4654. * NInt Intrinsic::      Convert to `INTEGER' value rounded
  4655.                          to nearest whole number.
  4656. * Not Intrinsic::       Boolean NOT.
  4657. * Or Intrinsic::        Boolean OR.
  4658. * Pack Intrinsic::      (Reserved for future use.)
  4659. * PError Intrinsic::    Print error message for last error.
  4660. * Precision Intrinsic:: (Reserved for future use.)
  4661. * Present Intrinsic::   (Reserved for future use.)
  4662. * Product Intrinsic::   (Reserved for future use.)
  4663. * Radix Intrinsic::     (Reserved for future use.)
  4664. * Rand Intrinsic::      Random number.
  4665. * Random_Number Intrinsic:: (Reserved for future use.)
  4666. * Random_Seed Intrinsic:: (Reserved for future use.)
  4667. * Range Intrinsic::     (Reserved for future use.)
  4668. * Real Intrinsic::      Convert value to type `REAL(KIND=1)'.
  4669. * RealPart Intrinsic::  Extract real part of complex.
  4670. * Rename Intrinsic (subroutine):: Rename file.
  4671. * Repeat Intrinsic::    (Reserved for future use.)
  4672. * Reshape Intrinsic::   (Reserved for future use.)
  4673. * RRSpacing Intrinsic:: (Reserved for future use.)
  4674. * RShift Intrinsic::    Right-shift bits.
  4675. * Scale Intrinsic::     (Reserved for future use.)
  4676. * Scan Intrinsic::      (Reserved for future use.)
  4677. * Second Intrinsic (function):: Get CPU time for process in seconds.
  4678. * Second Intrinsic (subroutine):: Get CPU time for process
  4679.                          in seconds.
  4680. * Selected_Int_Kind Intrinsic:: (Reserved for future use.)
  4681. * Selected_Real_Kind Intrinsic:: (Reserved for future use.)
  4682. * Set_Exponent Intrinsic:: (Reserved for future use.)
  4683. * Shape Intrinsic::     (Reserved for future use.)
  4684. * Short Intrinsic::     Convert to `INTEGER(KIND=6)' value
  4685.                          truncated to whole number.
  4686. * Sign Intrinsic::      Apply sign to magnitude.
  4687. * Signal Intrinsic (subroutine):: Muck with signal handling.
  4688. * Sin Intrinsic::       Sine.
  4689. * SinH Intrinsic::      Hyperbolic sine.
  4690. * Sleep Intrinsic::     Sleep for a specified time.
  4691. * Sngl Intrinsic::      Convert (archaic).
  4692. * Spacing Intrinsic::   (Reserved for future use.)
  4693. * Spread Intrinsic::    (Reserved for future use.)
  4694. * SqRt Intrinsic::      Square root.
  4695. * SRand Intrinsic::     Random seed.
  4696. * Stat Intrinsic (subroutine):: Get file information.
  4697. * Stat Intrinsic (function):: Get file information.
  4698. * Sum Intrinsic::       (Reserved for future use.)
  4699. * SymLnk Intrinsic (subroutine):: Make symbolic link in file system.
  4700. * System Intrinsic (subroutine):: Invoke shell (system) command.
  4701. * System_Clock Intrinsic:: Get current system clock value.
  4702. * Tan Intrinsic::       Tangent.
  4703. * TanH Intrinsic::      Hyperbolic tangent.
  4704. * Time Intrinsic (UNIX):: Get current time as time value.
  4705. * Time8 Intrinsic::     Get current time as time value.
  4706. * Tiny Intrinsic::      (Reserved for future use.)
  4707. * Transfer Intrinsic::  (Reserved for future use.)
  4708. * Transpose Intrinsic:: (Reserved for future use.)
  4709. * Trim Intrinsic::      (Reserved for future use.)
  4710. * TtyNam Intrinsic (subroutine):: Get name of terminal device for unit.
  4711. * TtyNam Intrinsic (function):: Get name of terminal device for unit.
  4712. * UBound Intrinsic::    (Reserved for future use.)
  4713. * UMask Intrinsic (subroutine):: Set file creation permissions mask.
  4714. * Unlink Intrinsic (subroutine):: Unlink file.
  4715. * Unpack Intrinsic::    (Reserved for future use.)
  4716. * Verify Intrinsic::    (Reserved for future use.)
  4717. * XOr Intrinsic::       Boolean XOR.
  4718. * ZAbs Intrinsic::      Absolute value (archaic).
  4719. * ZCos Intrinsic::      Cosine (archaic).
  4720. * ZExp Intrinsic::      Exponential (archaic).
  4721. * ZLog Intrinsic::      Natural logarithm (archaic).
  4722. * ZSin Intrinsic::      Sine (archaic).
  4723. * ZSqRt Intrinsic::     Square root (archaic).
  4724. File: g77.info,  Node: Abort Intrinsic,  Next: Abs Intrinsic,  Up: Table of Intrinsic Functions
  4725. Abort Intrinsic
  4726. ...............
  4727.      CALL Abort()
  4728. Intrinsic groups: `unix'.
  4729. Description:
  4730.    Prints a message and potentially causes a core dump via `abort(3)'.
  4731. File: g77.info,  Node: Abs Intrinsic,  Next: Access Intrinsic,  Prev: Abort Intrinsic,  Up: Table of Intrinsic Functions
  4732. Abs Intrinsic
  4733. .............
  4734.      Abs(A)
  4735. Abs: `INTEGER' or `REAL' function.  The exact type depends on that of
  4736. argument A--if A is `COMPLEX', this function's type is `REAL' with the
  4737. same `KIND=' value as the type of A.  Otherwise, this function's type
  4738. is the same as that of A.
  4739. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  4740. Intrinsic groups: (standard FORTRAN 77).
  4741. Description:
  4742.    Returns the absolute value of A.
  4743.    If A is type `COMPLEX', the absolute value is computed as:
  4744.      SQRT(REALPART(A)**2, IMAGPART(A)**2)
  4745. Otherwise, it is computed by negating the A if it is negative, or
  4746. returning A.
  4747.    *Note Sign Intrinsic::, for how to explicitly compute the positive
  4748. or negative form of the absolute value of an expression.
  4749. File: g77.info,  Node: Access Intrinsic,  Next: AChar Intrinsic,  Prev: Abs Intrinsic,  Up: Table of Intrinsic Functions
  4750. Access Intrinsic
  4751. ................
  4752.      Access(NAME, MODE)
  4753. Access: `INTEGER(KIND=1)' function.
  4754. NAME: `CHARACTER'; scalar; INTENT(IN).
  4755. MODE: `CHARACTER'; scalar; INTENT(IN).
  4756. Intrinsic groups: `unix'.
  4757. Description:
  4758.    Checks file NAME for accessibility in the mode specified by MODE and
  4759. returns 0 if the file is accessible in that mode, otherwise an error
  4760. code if the file is inaccessible or MODE is invalid.  See `access(2)'.
  4761. A null character (`CHAR(0)') marks the end of the name in
  4762. NAME--otherwise, trailing blanks in NAME are ignored.  MODE may be a
  4763. concatenation of any of the following characters:
  4764.      Read permission
  4765.      Write permission
  4766.      Execute permission
  4767. `SPC'
  4768.      Existence
  4769. File: g77.info,  Node: AChar Intrinsic,  Next: ACos Intrinsic,  Prev: Access Intrinsic,  Up: Table of Intrinsic Functions
  4770. AChar Intrinsic
  4771. ...............
  4772.      AChar(I)
  4773. AChar: `CHARACTER*1' function.
  4774. I: `INTEGER'; scalar; INTENT(IN).
  4775. Intrinsic groups: `f2c', `f90'.
  4776. Description:
  4777.    Returns the ASCII character corresponding to the code specified by I.
  4778.    *Note IAChar Intrinsic::, for the inverse of this function.
  4779.    *Note Char Intrinsic::, for the function corresponding to the
  4780. system's native character set.
  4781. File: g77.info,  Node: ACos Intrinsic,  Next: AdjustL Intrinsic,  Prev: AChar Intrinsic,  Up: Table of Intrinsic Functions
  4782. ACos Intrinsic
  4783. ..............
  4784.      ACos(X)
  4785. ACos: `REAL' function, the `KIND=' value of the type being that of
  4786. argument X.
  4787. X: `REAL'; scalar; INTENT(IN).
  4788. Intrinsic groups: (standard FORTRAN 77).
  4789. Description:
  4790.    Returns the arc-cosine (inverse cosine) of X in radians.
  4791.    *Note Cos Intrinsic::, for the inverse of this function.
  4792. File: g77.info,  Node: AdjustL Intrinsic,  Next: AdjustR Intrinsic,  Prev: ACos Intrinsic,  Up: Table of Intrinsic Functions
  4793. AdjustL Intrinsic
  4794. .................
  4795.    This intrinsic is not yet implemented.  The name is, however,
  4796. reserved as an intrinsic.  Use `EXTERNAL AdjustL' to use this name for
  4797. an external procedure.
  4798. File: g77.info,  Node: AdjustR Intrinsic,  Next: AImag Intrinsic,  Prev: AdjustL Intrinsic,  Up: Table of Intrinsic Functions
  4799. AdjustR Intrinsic
  4800. .................
  4801.    This intrinsic is not yet implemented.  The name is, however,
  4802. reserved as an intrinsic.  Use `EXTERNAL AdjustR' to use this name for
  4803. an external procedure.
  4804. File: g77.info,  Node: AImag Intrinsic,  Next: AInt Intrinsic,  Prev: AdjustR Intrinsic,  Up: Table of Intrinsic Functions
  4805. AImag Intrinsic
  4806. ...............
  4807.      AImag(Z)
  4808. AImag: `REAL' function.  This intrinsic is valid when argument Z is
  4809. `COMPLEX(KIND=1)'.  When Z is any other `COMPLEX' type, this intrinsic
  4810. is valid only when used as the argument to `REAL()', as explained below.
  4811. Z: `COMPLEX'; scalar; INTENT(IN).
  4812. Intrinsic groups: (standard FORTRAN 77).
  4813. Description:
  4814.    Returns the (possibly converted) imaginary part of Z.
  4815.    Use of `AIMAG()' with an argument of a type other than
  4816. `COMPLEX(KIND=1)' is restricted to the following case:
  4817.      REAL(AIMAG(Z))
  4818. This expression converts the imaginary part of Z to `REAL(KIND=1)'.
  4819.    *Note REAL() and AIMAG() of Complex::, for more information.
  4820. File: g77.info,  Node: AInt Intrinsic,  Next: Alarm Intrinsic,  Prev: AImag Intrinsic,  Up: Table of Intrinsic Functions
  4821. AInt Intrinsic
  4822. ..............
  4823.      AInt(A)
  4824. AInt: `REAL' function, the `KIND=' value of the type being that of
  4825. argument A.
  4826. A: `REAL'; scalar; INTENT(IN).
  4827. Intrinsic groups: (standard FORTRAN 77).
  4828. Description:
  4829.    Returns A with the fractional portion of its magnitude truncated and
  4830. its sign preserved.  (Also called "truncation towards zero".)
  4831.    *Note ANInt Intrinsic::, for how to round to nearest whole number.
  4832.    *Note Int Intrinsic::, for how to truncate and then convert number
  4833. to `INTEGER'.
  4834. File: g77.info,  Node: Alarm Intrinsic,  Next: All Intrinsic,  Prev: AInt Intrinsic,  Up: Table of Intrinsic Functions
  4835. Alarm Intrinsic
  4836. ...............
  4837.      CALL Alarm(SECONDS, HANDLER, STATUS)
  4838. SECONDS: `INTEGER'; scalar; INTENT(IN).
  4839. HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
  4840. dummy/global `INTEGER(KIND=1)' scalar.
  4841. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  4842. Intrinsic groups: `unix'.
  4843. Description:
  4844.    Causes external subroutine HANDLER to be executed after a delay of
  4845. SECONDS seconds by using `alarm(1)' to set up a signal and `signal(2)'
  4846. to catch it.  If STATUS is supplied, it will be returned with the the
  4847. number of seconds remaining until any previously scheduled alarm was
  4848. due to be delivered, or zero if there was no previously scheduled alarm.
  4849. *Note Signal Intrinsic (subroutine)::.
  4850. File: g77.info,  Node: All Intrinsic,  Next: Allocated Intrinsic,  Prev: Alarm Intrinsic,  Up: Table of Intrinsic Functions
  4851. All Intrinsic
  4852. .............
  4853.    This intrinsic is not yet implemented.  The name is, however,
  4854. reserved as an intrinsic.  Use `EXTERNAL All' to use this name for an
  4855. external procedure.
  4856. File: g77.info,  Node: Allocated Intrinsic,  Next: ALog Intrinsic,  Prev: All Intrinsic,  Up: Table of Intrinsic Functions
  4857. Allocated Intrinsic
  4858. ...................
  4859.    This intrinsic is not yet implemented.  The name is, however,
  4860. reserved as an intrinsic.  Use `EXTERNAL Allocated' to use this name
  4861. for an external procedure.
  4862. File: g77.info,  Node: ALog Intrinsic,  Next: ALog10 Intrinsic,  Prev: Allocated Intrinsic,  Up: Table of Intrinsic Functions
  4863. ALog Intrinsic
  4864. ..............
  4865.      ALog(X)
  4866. ALog: `REAL(KIND=1)' function.
  4867. X: `REAL(KIND=1)'; scalar; INTENT(IN).
  4868. Intrinsic groups: (standard FORTRAN 77).
  4869. Description:
  4870.    Archaic form of `LOG()' that is specific to one type for X.  *Note
  4871. Log Intrinsic::.
  4872. File: g77.info,  Node: ALog10 Intrinsic,  Next: AMax0 Intrinsic,  Prev: ALog Intrinsic,  Up: Table of Intrinsic Functions
  4873. ALog10 Intrinsic
  4874. ................
  4875.      ALog10(X)
  4876. ALog10: `REAL(KIND=1)' function.
  4877. X: `REAL(KIND=1)'; scalar; INTENT(IN).
  4878. Intrinsic groups: (standard FORTRAN 77).
  4879. Description:
  4880.    Archaic form of `LOG10()' that is specific to one type for X.  *Note
  4881. Log10 Intrinsic::.
  4882. File: g77.info,  Node: AMax0 Intrinsic,  Next: AMax1 Intrinsic,  Prev: ALog10 Intrinsic,  Up: Table of Intrinsic Functions
  4883. AMax0 Intrinsic
  4884. ...............
  4885.      AMax0(A-1, A-2, ..., A-n)
  4886. AMax0: `REAL(KIND=1)' function.
  4887. A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
  4888. scalar; INTENT(IN).
  4889. Intrinsic groups: (standard FORTRAN 77).
  4890. Description:
  4891.    Archaic form of `MAX()' that is specific to one type for A and a
  4892. different return type.  *Note Max Intrinsic::.
  4893. File: g77.info,  Node: AMax1 Intrinsic,  Next: AMin0 Intrinsic,  Prev: AMax0 Intrinsic,  Up: Table of Intrinsic Functions
  4894. AMax1 Intrinsic
  4895. ...............
  4896.      AMax1(A-1, A-2, ..., A-n)
  4897. AMax1: `REAL(KIND=1)' function.
  4898. A: `REAL(KIND=1)'; at least two such arguments must be provided;
  4899. scalar; INTENT(IN).
  4900. Intrinsic groups: (standard FORTRAN 77).
  4901. Description:
  4902.    Archaic form of `MAX()' that is specific to one type for A.  *Note
  4903. Max Intrinsic::.
  4904. File: g77.info,  Node: AMin0 Intrinsic,  Next: AMin1 Intrinsic,  Prev: AMax1 Intrinsic,  Up: Table of Intrinsic Functions
  4905. AMin0 Intrinsic
  4906. ...............
  4907.      AMin0(A-1, A-2, ..., A-n)
  4908. AMin0: `REAL(KIND=1)' function.
  4909. A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
  4910. scalar; INTENT(IN).
  4911. Intrinsic groups: (standard FORTRAN 77).
  4912. Description:
  4913.    Archaic form of `MIN()' that is specific to one type for A and a
  4914. different return type.  *Note Min Intrinsic::.
  4915. File: g77.info,  Node: AMin1 Intrinsic,  Next: AMod Intrinsic,  Prev: AMin0 Intrinsic,  Up: Table of Intrinsic Functions
  4916. AMin1 Intrinsic
  4917. ...............
  4918.      AMin1(A-1, A-2, ..., A-n)
  4919. AMin1: `REAL(KIND=1)' function.
  4920. A: `REAL(KIND=1)'; at least two such arguments must be provided;
  4921. scalar; INTENT(IN).
  4922. Intrinsic groups: (standard FORTRAN 77).
  4923. Description:
  4924.    Archaic form of `MIN()' that is specific to one type for A.  *Note
  4925. Min Intrinsic::.
  4926. File: g77.info,  Node: AMod Intrinsic,  Next: And Intrinsic,  Prev: AMin1 Intrinsic,  Up: Table of Intrinsic Functions
  4927. AMod Intrinsic
  4928. ..............
  4929.      AMod(A, P)
  4930. AMod: `REAL(KIND=1)' function.
  4931. A: `REAL(KIND=1)'; scalar; INTENT(IN).
  4932. P: `REAL(KIND=1)'; scalar; INTENT(IN).
  4933. Intrinsic groups: (standard FORTRAN 77).
  4934. Description:
  4935.    Archaic form of `MOD()' that is specific to one type for A.  *Note
  4936. Mod Intrinsic::.
  4937. File: g77.info,  Node: And Intrinsic,  Next: ANInt Intrinsic,  Prev: AMod Intrinsic,  Up: Table of Intrinsic Functions
  4938. And Intrinsic
  4939. .............
  4940.      And(I, J)
  4941. And: `INTEGER' or `LOGICAL' function, the exact type being the result
  4942. of cross-promoting the types of all the arguments.
  4943. I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
  4944. J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
  4945. Intrinsic groups: `f2c'.
  4946. Description:
  4947.    Returns value resulting from boolean AND of pair of bits in each of
  4948. I and J.
  4949. File: g77.info,  Node: ANInt Intrinsic,  Next: Any Intrinsic,  Prev: And Intrinsic,  Up: Table of Intrinsic Functions
  4950. ANInt Intrinsic
  4951. ...............
  4952.      ANInt(A)
  4953. ANInt: `REAL' function, the `KIND=' value of the type being that of
  4954. argument A.
  4955. A: `REAL'; scalar; INTENT(IN).
  4956. Intrinsic groups: (standard FORTRAN 77).
  4957. Description:
  4958.    Returns A with the fractional portion of its magnitude eliminated by
  4959. rounding to the nearest whole number and with its sign preserved.
  4960.    A fractional portion exactly equal to `.5' is rounded to the whole
  4961. number that is larger in magnitude.  (Also called "Fortran round".)
  4962.    *Note AInt Intrinsic::, for how to truncate to whole number.
  4963.    *Note NInt Intrinsic::, for how to round and then convert number to
  4964. `INTEGER'.
  4965. File: g77.info,  Node: Any Intrinsic,  Next: ASin Intrinsic,  Prev: ANInt Intrinsic,  Up: Table of Intrinsic Functions
  4966. Any Intrinsic
  4967. .............
  4968.    This intrinsic is not yet implemented.  The name is, however,
  4969. reserved as an intrinsic.  Use `EXTERNAL Any' to use this name for an
  4970. external procedure.
  4971. File: g77.info,  Node: ASin Intrinsic,  Next: Associated Intrinsic,  Prev: Any Intrinsic,  Up: Table of Intrinsic Functions
  4972. ASin Intrinsic
  4973. ..............
  4974.      ASin(X)
  4975. ASin: `REAL' function, the `KIND=' value of the type being that of
  4976. argument X.
  4977. X: `REAL'; scalar; INTENT(IN).
  4978. Intrinsic groups: (standard FORTRAN 77).
  4979. Description:
  4980.    Returns the arc-sine (inverse sine) of X in radians.
  4981.    *Note Sin Intrinsic::, for the inverse of this function.
  4982. File: g77.info,  Node: Associated Intrinsic,  Next: ATan Intrinsic,  Prev: ASin Intrinsic,  Up: Table of Intrinsic Functions
  4983. Associated Intrinsic
  4984. ....................
  4985.    This intrinsic is not yet implemented.  The name is, however,
  4986. reserved as an intrinsic.  Use `EXTERNAL Associated' to use this name
  4987. for an external procedure.
  4988. File: g77.info,  Node: ATan Intrinsic,  Next: ATan2 Intrinsic,  Prev: Associated Intrinsic,  Up: Table of Intrinsic Functions
  4989. ATan Intrinsic
  4990. ..............
  4991.      ATan(X)
  4992. ATan: `REAL' function, the `KIND=' value of the type being that of
  4993. argument X.
  4994. X: `REAL'; scalar; INTENT(IN).
  4995. Intrinsic groups: (standard FORTRAN 77).
  4996. Description:
  4997.    Returns the arc-tangent (inverse tangent) of X in radians.
  4998.    *Note Tan Intrinsic::, for the inverse of this function.
  4999. File: g77.info,  Node: ATan2 Intrinsic,  Next: BesJ0 Intrinsic,  Prev: ATan Intrinsic,  Up: Table of Intrinsic Functions
  5000. ATan2 Intrinsic
  5001. ...............
  5002.      ATan2(Y, X)
  5003. ATan2: `REAL' function, the exact type being the result of
  5004. cross-promoting the types of all the arguments.
  5005. Y: `REAL'; scalar; INTENT(IN).
  5006. X: `REAL'; scalar; INTENT(IN).
  5007. Intrinsic groups: (standard FORTRAN 77).
  5008. Description:
  5009.    Returns the arc-tangent (inverse tangent) of the complex number (Y,
  5010. X) in radians.
  5011.    *Note Tan Intrinsic::, for the inverse of this function.
  5012. File: g77.info,  Node: BesJ0 Intrinsic,  Next: BesJ1 Intrinsic,  Prev: ATan2 Intrinsic,  Up: Table of Intrinsic Functions
  5013. BesJ0 Intrinsic
  5014. ...............
  5015.      BesJ0(X)
  5016. BesJ0: `REAL' function, the `KIND=' value of the type being that of
  5017. argument X.
  5018. X: `REAL'; scalar; INTENT(IN).
  5019. Intrinsic groups: `unix'.
  5020. Description:
  5021.    Calculates the Bessel function of the first kind of order 0 of X.
  5022. See `bessel(3m)', on whose implementation the function depends.
  5023. File: g77.info,  Node: BesJ1 Intrinsic,  Next: BesJN Intrinsic,  Prev: BesJ0 Intrinsic,  Up: Table of Intrinsic Functions
  5024. BesJ1 Intrinsic
  5025. ...............
  5026.      BesJ1(X)
  5027. BesJ1: `REAL' function, the `KIND=' value of the type being that of
  5028. argument X.
  5029. X: `REAL'; scalar; INTENT(IN).
  5030. Intrinsic groups: `unix'.
  5031. Description:
  5032.    Calculates the Bessel function of the first kind of order 1 of X.
  5033. See `bessel(3m)', on whose implementation the function depends.
  5034. File: g77.info,  Node: BesJN Intrinsic,  Next: BesY0 Intrinsic,  Prev: BesJ1 Intrinsic,  Up: Table of Intrinsic Functions
  5035. BesJN Intrinsic
  5036. ...............
  5037.      BesJN(N, X)
  5038. BesJN: `REAL' function, the `KIND=' value of the type being that of
  5039. argument X.
  5040. N: `INTEGER'; scalar; INTENT(IN).
  5041. X: `REAL'; scalar; INTENT(IN).
  5042. Intrinsic groups: `unix'.
  5043. Description:
  5044.    Calculates the Bessel function of the first kind of order N of X.
  5045. See `bessel(3m)', on whose implementation the function depends.
  5046. File: g77.info,  Node: BesY0 Intrinsic,  Next: BesY1 Intrinsic,  Prev: BesJN Intrinsic,  Up: Table of Intrinsic Functions
  5047. BesY0 Intrinsic
  5048. ...............
  5049.      BesY0(X)
  5050. BesY0: `REAL' function, the `KIND=' value of the type being that of
  5051. argument X.
  5052. X: `REAL'; scalar; INTENT(IN).
  5053. Intrinsic groups: `unix'.
  5054. Description:
  5055.    Calculates the Bessel function of the second kind of order 0 of X.
  5056. See `bessel(3m)', on whose implementation the function depends.
  5057. File: g77.info,  Node: BesY1 Intrinsic,  Next: BesYN Intrinsic,  Prev: BesY0 Intrinsic,  Up: Table of Intrinsic Functions
  5058. BesY1 Intrinsic
  5059. ...............
  5060.      BesY1(X)
  5061. BesY1: `REAL' function, the `KIND=' value of the type being that of
  5062. argument X.
  5063. X: `REAL'; scalar; INTENT(IN).
  5064. Intrinsic groups: `unix'.
  5065. Description:
  5066.    Calculates the Bessel function of the second kind of order 1 of X.
  5067. See `bessel(3m)', on whose implementation the function depends.
  5068. File: g77.info,  Node: BesYN Intrinsic,  Next: Bit_Size Intrinsic,  Prev: BesY1 Intrinsic,  Up: Table of Intrinsic Functions
  5069. BesYN Intrinsic
  5070. ...............
  5071.      BesYN(N, X)
  5072. BesYN: `REAL' function, the `KIND=' value of the type being that of
  5073. argument X.
  5074. N: `INTEGER'; scalar; INTENT(IN).
  5075. X: `REAL'; scalar; INTENT(IN).
  5076. Intrinsic groups: `unix'.
  5077. Description:
  5078.    Calculates the Bessel function of the second kind of order N of X.
  5079. See `bessel(3m)', on whose implementation the function depends.
  5080. File: g77.info,  Node: Bit_Size Intrinsic,  Next: BTest Intrinsic,  Prev: BesYN Intrinsic,  Up: Table of Intrinsic Functions
  5081. Bit_Size Intrinsic
  5082. ..................
  5083.      Bit_Size(I)
  5084. Bit_Size: `INTEGER' function, the `KIND=' value of the type being that
  5085. of argument I.
  5086. I: `INTEGER'; scalar.
  5087. Intrinsic groups: `f90'.
  5088. Description:
  5089.    Returns the number of bits (integer precision plus sign bit)
  5090. represented by the type for I.
  5091.    *Note BTest Intrinsic::, for how to test the value of a bit in a
  5092. variable or array.
  5093.    *Note IBSet Intrinsic::, for how to set a bit in a variable to 1.
  5094.    *Note IBClr Intrinsic::, for how to set a bit in a variable to 0.
  5095. File: g77.info,  Node: BTest Intrinsic,  Next: CAbs Intrinsic,  Prev: Bit_Size Intrinsic,  Up: Table of Intrinsic Functions
  5096. BTest Intrinsic
  5097. ...............
  5098.      BTest(I, POS)
  5099. BTest: `LOGICAL(KIND=1)' function.
  5100. I: `INTEGER'; scalar; INTENT(IN).
  5101. POS: `INTEGER'; scalar; INTENT(IN).
  5102. Intrinsic groups: `mil', `f90', `vxt'.
  5103. Description:
  5104.    Returns `.TRUE.' if bit POS in I is 1, `.FALSE.' otherwise.
  5105.    (Bit 0 is the low-order (rightmost) bit, adding the value 2**0, or 1,
  5106. to the number if set to 1; bit 1 is the next-higher-order bit, adding
  5107. 2**1, or 2; bit 2 adds 2**2, or 4; and so on.)
  5108.    *Note Bit_Size Intrinsic::, for how to obtain the number of bits in
  5109. a type.  The leftmost bit of I is `BIT_SIZE(I-1)'.
  5110. File: g77.info,  Node: CAbs Intrinsic,  Next: CCos Intrinsic,  Prev: BTest Intrinsic,  Up: Table of Intrinsic Functions
  5111. CAbs Intrinsic
  5112. ..............
  5113.      CAbs(A)
  5114. CAbs: `REAL(KIND=1)' function.
  5115. A: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
  5116. Intrinsic groups: (standard FORTRAN 77).
  5117. Description:
  5118.    Archaic form of `ABS()' that is specific to one type for A.  *Note
  5119. Abs Intrinsic::.
  5120. File: g77.info,  Node: CCos Intrinsic,  Next: Ceiling Intrinsic,  Prev: CAbs Intrinsic,  Up: Table of Intrinsic Functions
  5121. CCos Intrinsic
  5122. ..............
  5123.      CCos(X)
  5124. CCos: `COMPLEX(KIND=1)' function.
  5125. X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
  5126. Intrinsic groups: (standard FORTRAN 77).
  5127. Description:
  5128.    Archaic form of `COS()' that is specific to one type for X.  *Note
  5129. Cos Intrinsic::.
  5130. File: g77.info,  Node: Ceiling Intrinsic,  Next: CExp Intrinsic,  Prev: CCos Intrinsic,  Up: Table of Intrinsic Functions
  5131. Ceiling Intrinsic
  5132. .................
  5133.    This intrinsic is not yet implemented.  The name is, however,
  5134. reserved as an intrinsic.  Use `EXTERNAL Ceiling' to use this name for
  5135. an external procedure.
  5136. File: g77.info,  Node: CExp Intrinsic,  Next: Char Intrinsic,  Prev: Ceiling Intrinsic,  Up: Table of Intrinsic Functions
  5137. CExp Intrinsic
  5138. ..............
  5139.      CExp(X)
  5140. CExp: `COMPLEX(KIND=1)' function.
  5141. X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
  5142. Intrinsic groups: (standard FORTRAN 77).
  5143. Description:
  5144.    Archaic form of `EXP()' that is specific to one type for X.  *Note
  5145. Exp Intrinsic::.
  5146. File: g77.info,  Node: Char Intrinsic,  Next: ChDir Intrinsic (subroutine),  Prev: CExp Intrinsic,  Up: Table of Intrinsic Functions
  5147. Char Intrinsic
  5148. ..............
  5149.      Char(I)
  5150. Char: `CHARACTER*1' function.
  5151. I: `INTEGER'; scalar; INTENT(IN).
  5152. Intrinsic groups: (standard FORTRAN 77).
  5153. Description:
  5154.    Returns the character corresponding to the code specified by I,
  5155. using the system's native character set.
  5156.    Because the system's native character set is used, the
  5157. correspondence between character and their codes is not necessarily the
  5158. same between GNU Fortran implementations.
  5159.    Note that no intrinsic exists to convert a numerical value to a
  5160. printable character string.  For example, there is no intrinsic that,
  5161. given an `INTEGER' or `REAL' argument with the value `154', returns the
  5162. `CHARACTER' result `'154''.
  5163.    Instead, you can use internal-file I/O to do this kind of conversion.
  5164. For example:
  5165.      INTEGER VALUE
  5166.      CHARACTER*10 STRING
  5167.      VALUE = 154
  5168.      WRITE (STRING, '(I10)'), VALUE
  5169.      PRINT *, STRING
  5170.      END
  5171.    The above program, when run, prints:
  5172.              154
  5173.    *Note IChar Intrinsic::, for the inverse of the `CHAR' function.
  5174.    *Note AChar Intrinsic::, for the function corresponding to the ASCII
  5175. character set.
  5176. File: g77.info,  Node: ChDir Intrinsic (subroutine),  Next: ChMod Intrinsic (subroutine),  Prev: Char Intrinsic,  Up: Table of Intrinsic Functions
  5177. ChDir Intrinsic (subroutine)
  5178. ............................
  5179.      CALL ChDir(DIR, STATUS)
  5180. DIR: `CHARACTER'; scalar; INTENT(IN).
  5181. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  5182. Intrinsic groups: `unix'.
  5183. Description:
  5184.    Sets the current working directory to be DIR.  If the STATUS
  5185. argument is supplied, it contains 0 on success or a non-zero error code
  5186. otherwise upon return.  See `chdir(3)'.
  5187.    *Caution:* Using this routine during I/O to a unit connected with a
  5188. non-absolute file name can cause subsequent I/O on such a unit to fail
  5189. because the I/O library may reopen files by name.
  5190.    Some non-GNU implementations of Fortran provide this intrinsic as
  5191. only a function, not as a subroutine, or do not support the (optional)
  5192. STATUS argument.
  5193.    For information on other intrinsics with the same name: *Note ChDir
  5194. Intrinsic (function)::.
  5195. File: g77.info,  Node: ChMod Intrinsic (subroutine),  Next: CLog Intrinsic,  Prev: ChDir Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5196. ChMod Intrinsic (subroutine)
  5197. ............................
  5198.      CALL ChMod(NAME, MODE, STATUS)
  5199. NAME: `CHARACTER'; scalar; INTENT(IN).
  5200. MODE: `CHARACTER'; scalar; INTENT(IN).
  5201. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  5202. Intrinsic groups: `unix'.
  5203. Description:
  5204.    Changes the access mode of file NAME according to the specification
  5205. MODE, which is given in the format of `chmod(1)'.  A null character
  5206. (`CHAR(0)') marks the end of the name in NAME--otherwise, trailing
  5207. blanks in NAME are ignored.  Currently, NAME must not contain the
  5208. single quote character.
  5209.    If the STATUS argument is supplied, it contains 0 on success or a
  5210. non-zero error code upon return.
  5211.    Note that this currently works by actually invoking `/bin/chmod' (or
  5212. the `chmod' found when the library was configured) and so may fail in
  5213. some circumstances and will, anyway, be slow.
  5214.    Some non-GNU implementations of Fortran provide this intrinsic as
  5215. only a function, not as a subroutine, or do not support the (optional)
  5216. STATUS argument.
  5217.    For information on other intrinsics with the same name: *Note ChMod
  5218. Intrinsic (function)::.
  5219. File: g77.info,  Node: CLog Intrinsic,  Next: Cmplx Intrinsic,  Prev: ChMod Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5220. CLog Intrinsic
  5221. ..............
  5222.      CLog(X)
  5223. CLog: `COMPLEX(KIND=1)' function.
  5224. X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
  5225. Intrinsic groups: (standard FORTRAN 77).
  5226. Description:
  5227.    Archaic form of `LOG()' that is specific to one type for X.  *Note
  5228. Log Intrinsic::.
  5229. File: g77.info,  Node: Cmplx Intrinsic,  Next: Complex Intrinsic,  Prev: CLog Intrinsic,  Up: Table of Intrinsic Functions
  5230. Cmplx Intrinsic
  5231. ...............
  5232.      Cmplx(X, Y)
  5233. Cmplx: `COMPLEX(KIND=1)' function.
  5234. X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  5235. Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX');
  5236. scalar; INTENT(IN).
  5237. Intrinsic groups: (standard FORTRAN 77).
  5238. Description:
  5239.    If X is not type `COMPLEX', constructs a value of type
  5240. `COMPLEX(KIND=1)' from the real and imaginary values specified by X and
  5241. Y, respectively.  If Y is omitted, `0.' is assumed.
  5242.    If X is type `COMPLEX', converts it to type `COMPLEX(KIND=1)'.
  5243.    *Note Complex Intrinsic::, for information on easily constructing a
  5244. `COMPLEX' value of arbitrary precision from `REAL' arguments.
  5245. File: g77.info,  Node: Complex Intrinsic,  Next: Conjg Intrinsic,  Prev: Cmplx Intrinsic,  Up: Table of Intrinsic Functions
  5246. Complex Intrinsic
  5247. .................
  5248.      Complex(REAL, IMAG)
  5249. Complex: `COMPLEX' function, the exact type being the result of
  5250. cross-promoting the types of all the arguments.
  5251. REAL: `INTEGER' or `REAL'; scalar; INTENT(IN).
  5252. IMAG: `INTEGER' or `REAL'; scalar; INTENT(IN).
  5253. Intrinsic groups: `gnu'.
  5254. Description:
  5255.    Returns a `COMPLEX' value that has `Real' and `Imag' as its real and
  5256. imaginary parts, respectively.
  5257.    If REAL and IMAG are the same type, and that type is not `INTEGER',
  5258. no data conversion is performed, and the type of the resulting value
  5259. has the same kind value as the types of REAL and IMAG.
  5260.    If REAL and IMAG are not the same type, the usual type-promotion
  5261. rules are applied to both, converting either or both to the appropriate
  5262. `REAL' type.  The type of the resulting value has the same kind value
  5263. as the type to which both REAL and IMAG were converted, in this case.
  5264.    If REAL and IMAG are both `INTEGER', they are both converted to
  5265. `REAL(KIND=1)', and the result of the `COMPLEX()' invocation is type
  5266. `COMPLEX(KIND=1)'.
  5267.    *Note:* The way to do this in standard Fortran 90 is too hairy to
  5268. describe here, but it is important to note that `CMPLX(D1,D2)' returns
  5269. a `COMPLEX(KIND=1)' result even if `D1' and `D2' are type
  5270. `REAL(KIND=2)'.  Hence the availability of `COMPLEX()' in GNU Fortran.
  5271. File: g77.info,  Node: Conjg Intrinsic,  Next: Cos Intrinsic,  Prev: Complex Intrinsic,  Up: Table of Intrinsic Functions
  5272. Conjg Intrinsic
  5273. ...............
  5274.      Conjg(Z)
  5275. Conjg: `COMPLEX' function, the `KIND=' value of the type being that of
  5276. argument Z.
  5277. Z: `COMPLEX'; scalar; INTENT(IN).
  5278. Intrinsic groups: (standard FORTRAN 77).
  5279. Description:
  5280.    Returns the complex conjugate:
  5281.      COMPLEX(REALPART(Z), -IMAGPART(Z))
  5282. File: g77.info,  Node: Cos Intrinsic,  Next: CosH Intrinsic,  Prev: Conjg Intrinsic,  Up: Table of Intrinsic Functions
  5283. Cos Intrinsic
  5284. .............
  5285.      Cos(X)
  5286. Cos: `REAL' or `COMPLEX' function, the exact type being that of
  5287. argument X.
  5288. X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
  5289. Intrinsic groups: (standard FORTRAN 77).
  5290. Description:
  5291.    Returns the cosine of X, an angle measured in radians.
  5292.    *Note ACos Intrinsic::, for the inverse of this function.
  5293. File: g77.info,  Node: CosH Intrinsic,  Next: Count Intrinsic,  Prev: Cos Intrinsic,  Up: Table of Intrinsic Functions
  5294. CosH Intrinsic
  5295. ..............
  5296.      CosH(X)
  5297. CosH: `REAL' function, the `KIND=' value of the type being that of
  5298. argument X.
  5299. X: `REAL'; scalar; INTENT(IN).
  5300. Intrinsic groups: (standard FORTRAN 77).
  5301. Description:
  5302.    Returns the hyperbolic cosine of X.
  5303. File: g77.info,  Node: Count Intrinsic,  Next: CPU_Time Intrinsic,  Prev: CosH Intrinsic,  Up: Table of Intrinsic Functions
  5304. Count Intrinsic
  5305. ...............
  5306.    This intrinsic is not yet implemented.  The name is, however,
  5307. reserved as an intrinsic.  Use `EXTERNAL Count' to use this name for an
  5308. external procedure.
  5309. File: g77.info,  Node: CPU_Time Intrinsic,  Next: CShift Intrinsic,  Prev: Count Intrinsic,  Up: Table of Intrinsic Functions
  5310. CPU_Time Intrinsic
  5311. ..................
  5312.      CALL CPU_Time(SECONDS)
  5313. SECONDS: `REAL'; scalar; INTENT(OUT).
  5314. Intrinsic groups: `f90'.
  5315. Description:
  5316.    Returns in SECONDS the current value of the system time.  This
  5317. implementation of the Fortran 95 intrinsic is just an alias for
  5318. `second' *Note Second Intrinsic (subroutine)::.
  5319. File: g77.info,  Node: CShift Intrinsic,  Next: CSin Intrinsic,  Prev: CPU_Time Intrinsic,  Up: Table of Intrinsic Functions
  5320. CShift Intrinsic
  5321. ................
  5322.    This intrinsic is not yet implemented.  The name is, however,
  5323. reserved as an intrinsic.  Use `EXTERNAL CShift' to use this name for an
  5324. external procedure.
  5325. File: g77.info,  Node: CSin Intrinsic,  Next: CSqRt Intrinsic,  Prev: CShift Intrinsic,  Up: Table of Intrinsic Functions
  5326. CSin Intrinsic
  5327. ..............
  5328.      CSin(X)
  5329. CSin: `COMPLEX(KIND=1)' function.
  5330. X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
  5331. Intrinsic groups: (standard FORTRAN 77).
  5332. Description:
  5333.    Archaic form of `SIN()' that is specific to one type for X.  *Note
  5334. Sin Intrinsic::.
  5335. File: g77.info,  Node: CSqRt Intrinsic,  Next: CTime Intrinsic (subroutine),  Prev: CSin Intrinsic,  Up: Table of Intrinsic Functions
  5336. CSqRt Intrinsic
  5337. ...............
  5338.      CSqRt(X)
  5339. CSqRt: `COMPLEX(KIND=1)' function.
  5340. X: `COMPLEX(KIND=1)'; scalar; INTENT(IN).
  5341. Intrinsic groups: (standard FORTRAN 77).
  5342. Description:
  5343.    Archaic form of `SQRT()' that is specific to one type for X.  *Note
  5344. SqRt Intrinsic::.
  5345. File: g77.info,  Node: CTime Intrinsic (subroutine),  Next: CTime Intrinsic (function),  Prev: CSqRt Intrinsic,  Up: Table of Intrinsic Functions
  5346. CTime Intrinsic (subroutine)
  5347. ............................
  5348.      CALL CTime(RESULT, STIME)
  5349. RESULT: `CHARACTER'; scalar; INTENT(OUT).
  5350. STIME: `INTEGER'; scalar; INTENT(IN).
  5351. Intrinsic groups: `unix'.
  5352. Description:
  5353.    Converts STIME, a system time value, such as returned by `TIME8()',
  5354. to a string of the form `Sat Aug 19 18:13:14 1995', and returns that
  5355. string in RESULT.
  5356.    *Note Time8 Intrinsic::.
  5357.    Some non-GNU implementations of Fortran provide this intrinsic as
  5358. only a function, not as a subroutine.
  5359.    For information on other intrinsics with the same name: *Note CTime
  5360. Intrinsic (function)::.
  5361. File: g77.info,  Node: CTime Intrinsic (function),  Next: DAbs Intrinsic,  Prev: CTime Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5362. CTime Intrinsic (function)
  5363. ..........................
  5364.      CTime(STIME)
  5365. CTime: `CHARACTER*(*)' function.
  5366. STIME: `INTEGER'; scalar; INTENT(IN).
  5367. Intrinsic groups: `unix'.
  5368. Description:
  5369.    Converts STIME, a system time value, such as returned by `TIME8()',
  5370. to a string of the form `Sat Aug 19 18:13:14 1995', and returns that
  5371. string as the function value.
  5372.    *Note Time8 Intrinsic::.
  5373.    For information on other intrinsics with the same name: *Note CTime
  5374. Intrinsic (subroutine)::.
  5375. File: g77.info,  Node: DAbs Intrinsic,  Next: DACos Intrinsic,  Prev: CTime Intrinsic (function),  Up: Table of Intrinsic Functions
  5376. DAbs Intrinsic
  5377. ..............
  5378.      DAbs(A)
  5379. DAbs: `REAL(KIND=2)' function.
  5380. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  5381. Intrinsic groups: (standard FORTRAN 77).
  5382. Description:
  5383.    Archaic form of `ABS()' that is specific to one type for A.  *Note
  5384. Abs Intrinsic::.
  5385. File: g77.info,  Node: DACos Intrinsic,  Next: DASin Intrinsic,  Prev: DAbs Intrinsic,  Up: Table of Intrinsic Functions
  5386. DACos Intrinsic
  5387. ...............
  5388.      DACos(X)
  5389. DACos: `REAL(KIND=2)' function.
  5390. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5391. Intrinsic groups: (standard FORTRAN 77).
  5392. Description:
  5393.    Archaic form of `ACOS()' that is specific to one type for X.  *Note
  5394. ACos Intrinsic::.
  5395. File: g77.info,  Node: DASin Intrinsic,  Next: DATan Intrinsic,  Prev: DACos Intrinsic,  Up: Table of Intrinsic Functions
  5396. DASin Intrinsic
  5397. ...............
  5398.      DASin(X)
  5399. DASin: `REAL(KIND=2)' function.
  5400. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5401. Intrinsic groups: (standard FORTRAN 77).
  5402. Description:
  5403.    Archaic form of `ASIN()' that is specific to one type for X.  *Note
  5404. ASin Intrinsic::.
  5405. File: g77.info,  Node: DATan Intrinsic,  Next: DATan2 Intrinsic,  Prev: DASin Intrinsic,  Up: Table of Intrinsic Functions
  5406. DATan Intrinsic
  5407. ...............
  5408.      DATan(X)
  5409. DATan: `REAL(KIND=2)' function.
  5410. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5411. Intrinsic groups: (standard FORTRAN 77).
  5412. Description:
  5413.    Archaic form of `ATAN()' that is specific to one type for X.  *Note
  5414. ATan Intrinsic::.
  5415. File: g77.info,  Node: DATan2 Intrinsic,  Next: Date_and_Time Intrinsic,  Prev: DATan Intrinsic,  Up: Table of Intrinsic Functions
  5416. DATan2 Intrinsic
  5417. ................
  5418.      DATan2(Y, X)
  5419. DATan2: `REAL(KIND=2)' function.
  5420. Y: `REAL(KIND=2)'; scalar; INTENT(IN).
  5421. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5422. Intrinsic groups: (standard FORTRAN 77).
  5423. Description:
  5424.    Archaic form of `ATAN2()' that is specific to one type for Y and X.
  5425. *Note ATan2 Intrinsic::.
  5426. File: g77.info,  Node: Date_and_Time Intrinsic,  Next: DbesJ0 Intrinsic,  Prev: DATan2 Intrinsic,  Up: Table of Intrinsic Functions
  5427. Date_and_Time Intrinsic
  5428. .......................
  5429.    This intrinsic is not yet implemented.  The name is, however,
  5430. reserved as an intrinsic.  Use `EXTERNAL Date_and_Time' to use this
  5431. name for an external procedure.
  5432. File: g77.info,  Node: DbesJ0 Intrinsic,  Next: DbesJ1 Intrinsic,  Prev: Date_and_Time Intrinsic,  Up: Table of Intrinsic Functions
  5433. DbesJ0 Intrinsic
  5434. ................
  5435.      DbesJ0(X)
  5436. DbesJ0: `REAL(KIND=2)' function.
  5437. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5438. Intrinsic groups: `unix'.
  5439. Description:
  5440.    Archaic form of `BESJ0()' that is specific to one type for X.  *Note
  5441. BesJ0 Intrinsic::.
  5442. File: g77.info,  Node: DbesJ1 Intrinsic,  Next: DbesJN Intrinsic,  Prev: DbesJ0 Intrinsic,  Up: Table of Intrinsic Functions
  5443. DbesJ1 Intrinsic
  5444. ................
  5445.      DbesJ1(X)
  5446. DbesJ1: `REAL(KIND=2)' function.
  5447. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5448. Intrinsic groups: `unix'.
  5449. Description:
  5450.    Archaic form of `BESJ1()' that is specific to one type for X.  *Note
  5451. BesJ1 Intrinsic::.
  5452. File: g77.info,  Node: DbesJN Intrinsic,  Next: DbesY0 Intrinsic,  Prev: DbesJ1 Intrinsic,  Up: Table of Intrinsic Functions
  5453. DbesJN Intrinsic
  5454. ................
  5455.      DbesJN(N, X)
  5456. DbesJN: `REAL(KIND=2)' function.
  5457. N: `INTEGER'; scalar; INTENT(IN).
  5458. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5459. Intrinsic groups: `unix'.
  5460. Description:
  5461.    Archaic form of `BESJN()' that is specific to one type for X.  *Note
  5462. BesJN Intrinsic::.
  5463. File: g77.info,  Node: DbesY0 Intrinsic,  Next: DbesY1 Intrinsic,  Prev: DbesJN Intrinsic,  Up: Table of Intrinsic Functions
  5464. DbesY0 Intrinsic
  5465. ................
  5466.      DbesY0(X)
  5467. DbesY0: `REAL(KIND=2)' function.
  5468. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5469. Intrinsic groups: `unix'.
  5470. Description:
  5471.    Archaic form of `BESY0()' that is specific to one type for X.  *Note
  5472. BesY0 Intrinsic::.
  5473. File: g77.info,  Node: DbesY1 Intrinsic,  Next: DbesYN Intrinsic,  Prev: DbesY0 Intrinsic,  Up: Table of Intrinsic Functions
  5474. DbesY1 Intrinsic
  5475. ................
  5476.      DbesY1(X)
  5477. DbesY1: `REAL(KIND=2)' function.
  5478. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5479. Intrinsic groups: `unix'.
  5480. Description:
  5481.    Archaic form of `BESY1()' that is specific to one type for X.  *Note
  5482. BesY1 Intrinsic::.
  5483. File: g77.info,  Node: DbesYN Intrinsic,  Next: Dble Intrinsic,  Prev: DbesY1 Intrinsic,  Up: Table of Intrinsic Functions
  5484. DbesYN Intrinsic
  5485. ................
  5486.      DbesYN(N, X)
  5487. DbesYN: `REAL(KIND=2)' function.
  5488. N: `INTEGER'; scalar; INTENT(IN).
  5489. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5490. Intrinsic groups: `unix'.
  5491. Description:
  5492.    Archaic form of `BESYN()' that is specific to one type for X.  *Note
  5493. BesYN Intrinsic::.
  5494. File: g77.info,  Node: Dble Intrinsic,  Next: DCos Intrinsic,  Prev: DbesYN Intrinsic,  Up: Table of Intrinsic Functions
  5495. Dble Intrinsic
  5496. ..............
  5497.      Dble(A)
  5498. Dble: `REAL(KIND=2)' function.
  5499. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  5500. Intrinsic groups: (standard FORTRAN 77).
  5501. Description:
  5502.    Returns A converted to double precision (`REAL(KIND=2)').  If A is
  5503. `COMPLEX', the real part of A is used for the conversion and the
  5504. imaginary part disregarded.
  5505.    *Note Sngl Intrinsic::, for the function that converts to single
  5506. precision.
  5507.    *Note Int Intrinsic::, for the function that converts to `INTEGER'.
  5508.    *Note Complex Intrinsic::, for the function that converts to
  5509. `COMPLEX'.
  5510. File: g77.info,  Node: DCos Intrinsic,  Next: DCosH Intrinsic,  Prev: Dble Intrinsic,  Up: Table of Intrinsic Functions
  5511. DCos Intrinsic
  5512. ..............
  5513.      DCos(X)
  5514. DCos: `REAL(KIND=2)' function.
  5515. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5516. Intrinsic groups: (standard FORTRAN 77).
  5517. Description:
  5518.    Archaic form of `COS()' that is specific to one type for X.  *Note
  5519. Cos Intrinsic::.
  5520. File: g77.info,  Node: DCosH Intrinsic,  Next: DDiM Intrinsic,  Prev: DCos Intrinsic,  Up: Table of Intrinsic Functions
  5521. DCosH Intrinsic
  5522. ...............
  5523.      DCosH(X)
  5524. DCosH: `REAL(KIND=2)' function.
  5525. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5526. Intrinsic groups: (standard FORTRAN 77).
  5527. Description:
  5528.    Archaic form of `COSH()' that is specific to one type for X.  *Note
  5529. CosH Intrinsic::.
  5530. File: g77.info,  Node: DDiM Intrinsic,  Next: DErF Intrinsic,  Prev: DCosH Intrinsic,  Up: Table of Intrinsic Functions
  5531. DDiM Intrinsic
  5532. ..............
  5533.      DDiM(X, Y)
  5534. DDiM: `REAL(KIND=2)' function.
  5535. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5536. Y: `REAL(KIND=2)'; scalar; INTENT(IN).
  5537. Intrinsic groups: (standard FORTRAN 77).
  5538. Description:
  5539.    Archaic form of `DIM()' that is specific to one type for X and Y.
  5540. *Note DiM Intrinsic::.
  5541. File: g77.info,  Node: DErF Intrinsic,  Next: DErFC Intrinsic,  Prev: DDiM Intrinsic,  Up: Table of Intrinsic Functions
  5542. DErF Intrinsic
  5543. ..............
  5544.      DErF(X)
  5545. DErF: `REAL(KIND=2)' function.
  5546. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5547. Intrinsic groups: `unix'.
  5548. Description:
  5549.    Archaic form of `ERF()' that is specific to one type for X.  *Note
  5550. ErF Intrinsic::.
  5551. File: g77.info,  Node: DErFC Intrinsic,  Next: DExp Intrinsic,  Prev: DErF Intrinsic,  Up: Table of Intrinsic Functions
  5552. DErFC Intrinsic
  5553. ...............
  5554.      DErFC(X)
  5555. DErFC: `REAL(KIND=2)' function.
  5556. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5557. Intrinsic groups: `unix'.
  5558. Description:
  5559.    Archaic form of `ERFC()' that is specific to one type for X.  *Note
  5560. ErFC Intrinsic::.
  5561. File: g77.info,  Node: DExp Intrinsic,  Next: Digits Intrinsic,  Prev: DErFC Intrinsic,  Up: Table of Intrinsic Functions
  5562. DExp Intrinsic
  5563. ..............
  5564.      DExp(X)
  5565. DExp: `REAL(KIND=2)' function.
  5566. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5567. Intrinsic groups: (standard FORTRAN 77).
  5568. Description:
  5569.    Archaic form of `EXP()' that is specific to one type for X.  *Note
  5570. Exp Intrinsic::.
  5571. File: g77.info,  Node: Digits Intrinsic,  Next: DiM Intrinsic,  Prev: DExp Intrinsic,  Up: Table of Intrinsic Functions
  5572. Digits Intrinsic
  5573. ................
  5574.    This intrinsic is not yet implemented.  The name is, however,
  5575. reserved as an intrinsic.  Use `EXTERNAL Digits' to use this name for an
  5576. external procedure.
  5577. File: g77.info,  Node: DiM Intrinsic,  Next: DInt Intrinsic,  Prev: Digits Intrinsic,  Up: Table of Intrinsic Functions
  5578. DiM Intrinsic
  5579. .............
  5580.      DiM(X, Y)
  5581. DiM: `INTEGER' or `REAL' function, the exact type being the result of
  5582. cross-promoting the types of all the arguments.
  5583. X: `INTEGER' or `REAL'; scalar; INTENT(IN).
  5584. Y: `INTEGER' or `REAL'; scalar; INTENT(IN).
  5585. Intrinsic groups: (standard FORTRAN 77).
  5586. Description:
  5587.    Returns `X-Y' if X is greater than Y; otherwise returns zero.
  5588. File: g77.info,  Node: DInt Intrinsic,  Next: DLog Intrinsic,  Prev: DiM Intrinsic,  Up: Table of Intrinsic Functions
  5589. DInt Intrinsic
  5590. ..............
  5591.      DInt(A)
  5592. DInt: `REAL(KIND=2)' function.
  5593. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  5594. Intrinsic groups: (standard FORTRAN 77).
  5595. Description:
  5596.    Archaic form of `AINT()' that is specific to one type for A.  *Note
  5597. AInt Intrinsic::.
  5598. File: g77.info,  Node: DLog Intrinsic,  Next: DLog10 Intrinsic,  Prev: DInt Intrinsic,  Up: Table of Intrinsic Functions
  5599. DLog Intrinsic
  5600. ..............
  5601.      DLog(X)
  5602. DLog: `REAL(KIND=2)' function.
  5603. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5604. Intrinsic groups: (standard FORTRAN 77).
  5605. Description:
  5606.    Archaic form of `LOG()' that is specific to one type for X.  *Note
  5607. Log Intrinsic::.
  5608. File: g77.info,  Node: DLog10 Intrinsic,  Next: DMax1 Intrinsic,  Prev: DLog Intrinsic,  Up: Table of Intrinsic Functions
  5609. DLog10 Intrinsic
  5610. ................
  5611.      DLog10(X)
  5612. DLog10: `REAL(KIND=2)' function.
  5613. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5614. Intrinsic groups: (standard FORTRAN 77).
  5615. Description:
  5616.    Archaic form of `LOG10()' that is specific to one type for X.  *Note
  5617. Log10 Intrinsic::.
  5618. File: g77.info,  Node: DMax1 Intrinsic,  Next: DMin1 Intrinsic,  Prev: DLog10 Intrinsic,  Up: Table of Intrinsic Functions
  5619. DMax1 Intrinsic
  5620. ...............
  5621.      DMax1(A-1, A-2, ..., A-n)
  5622. DMax1: `REAL(KIND=2)' function.
  5623. A: `REAL(KIND=2)'; at least two such arguments must be provided;
  5624. scalar; INTENT(IN).
  5625. Intrinsic groups: (standard FORTRAN 77).
  5626. Description:
  5627.    Archaic form of `MAX()' that is specific to one type for A.  *Note
  5628. Max Intrinsic::.
  5629. File: g77.info,  Node: DMin1 Intrinsic,  Next: DMod Intrinsic,  Prev: DMax1 Intrinsic,  Up: Table of Intrinsic Functions
  5630. DMin1 Intrinsic
  5631. ...............
  5632.      DMin1(A-1, A-2, ..., A-n)
  5633. DMin1: `REAL(KIND=2)' function.
  5634. A: `REAL(KIND=2)'; at least two such arguments must be provided;
  5635. scalar; INTENT(IN).
  5636. Intrinsic groups: (standard FORTRAN 77).
  5637. Description:
  5638.    Archaic form of `MIN()' that is specific to one type for A.  *Note
  5639. Min Intrinsic::.
  5640. File: g77.info,  Node: DMod Intrinsic,  Next: DNInt Intrinsic,  Prev: DMin1 Intrinsic,  Up: Table of Intrinsic Functions
  5641. DMod Intrinsic
  5642. ..............
  5643.      DMod(A, P)
  5644. DMod: `REAL(KIND=2)' function.
  5645. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  5646. P: `REAL(KIND=2)'; scalar; INTENT(IN).
  5647. Intrinsic groups: (standard FORTRAN 77).
  5648. Description:
  5649.    Archaic form of `MOD()' that is specific to one type for A.  *Note
  5650. Mod Intrinsic::.
  5651. File: g77.info,  Node: DNInt Intrinsic,  Next: Dot_Product Intrinsic,  Prev: DMod Intrinsic,  Up: Table of Intrinsic Functions
  5652. DNInt Intrinsic
  5653. ...............
  5654.      DNInt(A)
  5655. DNInt: `REAL(KIND=2)' function.
  5656. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  5657. Intrinsic groups: (standard FORTRAN 77).
  5658. Description:
  5659.    Archaic form of `ANINT()' that is specific to one type for A.  *Note
  5660. ANInt Intrinsic::.
  5661. File: g77.info,  Node: Dot_Product Intrinsic,  Next: DProd Intrinsic,  Prev: DNInt Intrinsic,  Up: Table of Intrinsic Functions
  5662. Dot_Product Intrinsic
  5663. .....................
  5664.    This intrinsic is not yet implemented.  The name is, however,
  5665. reserved as an intrinsic.  Use `EXTERNAL Dot_Product' to use this name
  5666. for an external procedure.
  5667. File: g77.info,  Node: DProd Intrinsic,  Next: DSign Intrinsic,  Prev: Dot_Product Intrinsic,  Up: Table of Intrinsic Functions
  5668. DProd Intrinsic
  5669. ...............
  5670.      DProd(X, Y)
  5671. DProd: `REAL(KIND=2)' function.
  5672. X: `REAL(KIND=1)'; scalar; INTENT(IN).
  5673. Y: `REAL(KIND=1)'; scalar; INTENT(IN).
  5674. Intrinsic groups: (standard FORTRAN 77).
  5675. Description:
  5676.    Returns `DBLE(X)*DBLE(Y)'.
  5677. File: g77.info,  Node: DSign Intrinsic,  Next: DSin Intrinsic,  Prev: DProd Intrinsic,  Up: Table of Intrinsic Functions
  5678. DSign Intrinsic
  5679. ...............
  5680.      DSign(A, B)
  5681. DSign: `REAL(KIND=2)' function.
  5682. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  5683. B: `REAL(KIND=2)'; scalar; INTENT(IN).
  5684. Intrinsic groups: (standard FORTRAN 77).
  5685. Description:
  5686.    Archaic form of `SIGN()' that is specific to one type for A and B.
  5687. *Note Sign Intrinsic::.
  5688. File: g77.info,  Node: DSin Intrinsic,  Next: DSinH Intrinsic,  Prev: DSign Intrinsic,  Up: Table of Intrinsic Functions
  5689. DSin Intrinsic
  5690. ..............
  5691.      DSin(X)
  5692. DSin: `REAL(KIND=2)' function.
  5693. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5694. Intrinsic groups: (standard FORTRAN 77).
  5695. Description:
  5696.    Archaic form of `SIN()' that is specific to one type for X.  *Note
  5697. Sin Intrinsic::.
  5698. File: g77.info,  Node: DSinH Intrinsic,  Next: DSqRt Intrinsic,  Prev: DSin Intrinsic,  Up: Table of Intrinsic Functions
  5699. DSinH Intrinsic
  5700. ...............
  5701.      DSinH(X)
  5702. DSinH: `REAL(KIND=2)' function.
  5703. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5704. Intrinsic groups: (standard FORTRAN 77).
  5705. Description:
  5706.    Archaic form of `SINH()' that is specific to one type for X.  *Note
  5707. SinH Intrinsic::.
  5708. File: g77.info,  Node: DSqRt Intrinsic,  Next: DTan Intrinsic,  Prev: DSinH Intrinsic,  Up: Table of Intrinsic Functions
  5709. DSqRt Intrinsic
  5710. ...............
  5711.      DSqRt(X)
  5712. DSqRt: `REAL(KIND=2)' function.
  5713. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5714. Intrinsic groups: (standard FORTRAN 77).
  5715. Description:
  5716.    Archaic form of `SQRT()' that is specific to one type for X.  *Note
  5717. SqRt Intrinsic::.
  5718. File: g77.info,  Node: DTan Intrinsic,  Next: DTanH Intrinsic,  Prev: DSqRt Intrinsic,  Up: Table of Intrinsic Functions
  5719. DTan Intrinsic
  5720. ..............
  5721.      DTan(X)
  5722. DTan: `REAL(KIND=2)' function.
  5723. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5724. Intrinsic groups: (standard FORTRAN 77).
  5725. Description:
  5726.    Archaic form of `TAN()' that is specific to one type for X.  *Note
  5727. Tan Intrinsic::.
  5728. File: g77.info,  Node: DTanH Intrinsic,  Next: Dtime Intrinsic (subroutine),  Prev: DTan Intrinsic,  Up: Table of Intrinsic Functions
  5729. DTanH Intrinsic
  5730. ...............
  5731.      DTanH(X)
  5732. DTanH: `REAL(KIND=2)' function.
  5733. X: `REAL(KIND=2)'; scalar; INTENT(IN).
  5734. Intrinsic groups: (standard FORTRAN 77).
  5735. Description:
  5736.    Archaic form of `TANH()' that is specific to one type for X.  *Note
  5737. TanH Intrinsic::.
  5738. File: g77.info,  Node: Dtime Intrinsic (subroutine),  Next: EOShift Intrinsic,  Prev: DTanH Intrinsic,  Up: Table of Intrinsic Functions
  5739. Dtime Intrinsic (subroutine)
  5740. ............................
  5741.      CALL Dtime(RESULT, TARRAY)
  5742. RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).
  5743. TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
  5744. Intrinsic groups: `unix'.
  5745. Description:
  5746.    Initially, return the number of seconds of runtime since the start
  5747. of the process's execution in RESULT, and the user and system
  5748. components of this in `TARRAY(1)' and `TARRAY(2)' respectively.  The
  5749. value of RESULT is equal to `TARRAY(1) + TARRAY(2)'.
  5750.    Subsequent invocations of `DTIME()' set values based on accumulations
  5751. since the previous invocation.
  5752.    Some non-GNU implementations of Fortran provide this intrinsic as
  5753. only a function, not as a subroutine.
  5754.    For information on other intrinsics with the same name: *Note Dtime
  5755. Intrinsic (function)::.
  5756. File: g77.info,  Node: EOShift Intrinsic,  Next: Epsilon Intrinsic,  Prev: Dtime Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5757. EOShift Intrinsic
  5758. .................
  5759.    This intrinsic is not yet implemented.  The name is, however,
  5760. reserved as an intrinsic.  Use `EXTERNAL EOShift' to use this name for
  5761. an external procedure.
  5762. File: g77.info,  Node: Epsilon Intrinsic,  Next: ErF Intrinsic,  Prev: EOShift Intrinsic,  Up: Table of Intrinsic Functions
  5763. Epsilon Intrinsic
  5764. .................
  5765.    This intrinsic is not yet implemented.  The name is, however,
  5766. reserved as an intrinsic.  Use `EXTERNAL Epsilon' to use this name for
  5767. an external procedure.
  5768. File: g77.info,  Node: ErF Intrinsic,  Next: ErFC Intrinsic,  Prev: Epsilon Intrinsic,  Up: Table of Intrinsic Functions
  5769. ErF Intrinsic
  5770. .............
  5771.      ErF(X)
  5772. ErF: `REAL' function, the `KIND=' value of the type being that of
  5773. argument X.
  5774. X: `REAL'; scalar; INTENT(IN).
  5775. Intrinsic groups: `unix'.
  5776. Description:
  5777.    Returns the error function of X.  See `erf(3m)', which provides the
  5778. implementation.
  5779. File: g77.info,  Node: ErFC Intrinsic,  Next: ETime Intrinsic (subroutine),  Prev: ErF Intrinsic,  Up: Table of Intrinsic Functions
  5780. ErFC Intrinsic
  5781. ..............
  5782.      ErFC(X)
  5783. ErFC: `REAL' function, the `KIND=' value of the type being that of
  5784. argument X.
  5785. X: `REAL'; scalar; INTENT(IN).
  5786. Intrinsic groups: `unix'.
  5787. Description:
  5788.    Returns the complementary error function of X: `ERFC(R) = 1 -
  5789. ERF(R)' (except that the result may be more accurate than explicitly
  5790. evaluating that formulae would give).  See `erfc(3m)', which provides
  5791. the implementation.
  5792. File: g77.info,  Node: ETime Intrinsic (subroutine),  Next: ETime Intrinsic (function),  Prev: ErFC Intrinsic,  Up: Table of Intrinsic Functions
  5793. ETime Intrinsic (subroutine)
  5794. ............................
  5795.      CALL ETime(RESULT, TARRAY)
  5796. RESULT: `REAL(KIND=1)'; scalar; INTENT(OUT).
  5797. TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
  5798. Intrinsic groups: `unix'.
  5799. Description:
  5800.    Return the number of seconds of runtime since the start of the
  5801. process's execution in RESULT, and the user and system components of
  5802. this in `TARRAY(1)' and `TARRAY(2)' respectively.  The value of RESULT
  5803. is equal to `TARRAY(1) + TARRAY(2)'.
  5804.    Some non-GNU implementations of Fortran provide this intrinsic as
  5805. only a function, not as a subroutine.
  5806.    For information on other intrinsics with the same name: *Note ETime
  5807. Intrinsic (function)::.
  5808. File: g77.info,  Node: ETime Intrinsic (function),  Next: Exit Intrinsic,  Prev: ETime Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5809. ETime Intrinsic (function)
  5810. ..........................
  5811.      ETime(TARRAY)
  5812. ETime: `REAL(KIND=1)' function.
  5813. TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
  5814. Intrinsic groups: `unix'.
  5815. Description:
  5816.    Return the number of seconds of runtime since the start of the
  5817. process's execution as the function value, and the user and system
  5818. components of this in `TARRAY(1)' and `TARRAY(2)' respectively.  The
  5819. functions' value is equal to `TARRAY(1) + TARRAY(2)'.
  5820.    For information on other intrinsics with the same name: *Note ETime
  5821. Intrinsic (subroutine)::.
  5822. File: g77.info,  Node: Exit Intrinsic,  Next: Exp Intrinsic,  Prev: ETime Intrinsic (function),  Up: Table of Intrinsic Functions
  5823. Exit Intrinsic
  5824. ..............
  5825.      CALL Exit(STATUS)
  5826. STATUS: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
  5827. Intrinsic groups: `unix'.
  5828. Description:
  5829.    Exit the program with status STATUS after closing open Fortran I/O
  5830. units and otherwise behaving as `exit(2)'.  If STATUS is omitted the
  5831. canonical `success' value will be returned to the system.
  5832. File: g77.info,  Node: Exp Intrinsic,  Next: Exponent Intrinsic,  Prev: Exit Intrinsic,  Up: Table of Intrinsic Functions
  5833. Exp Intrinsic
  5834. .............
  5835.      Exp(X)
  5836. Exp: `REAL' or `COMPLEX' function, the exact type being that of
  5837. argument X.
  5838. X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
  5839. Intrinsic groups: (standard FORTRAN 77).
  5840. Description:
  5841.    Returns `E**X', where E is approximately 2.7182818.
  5842.    *Note Log Intrinsic::, for the inverse of this function.
  5843. File: g77.info,  Node: Exponent Intrinsic,  Next: Fdate Intrinsic (subroutine),  Prev: Exp Intrinsic,  Up: Table of Intrinsic Functions
  5844. Exponent Intrinsic
  5845. ..................
  5846.    This intrinsic is not yet implemented.  The name is, however,
  5847. reserved as an intrinsic.  Use `EXTERNAL Exponent' to use this name for
  5848. an external procedure.
  5849. File: g77.info,  Node: Fdate Intrinsic (subroutine),  Next: Fdate Intrinsic (function),  Prev: Exponent Intrinsic,  Up: Table of Intrinsic Functions
  5850. Fdate Intrinsic (subroutine)
  5851. ............................
  5852.      CALL Fdate(DATE)
  5853. DATE: `CHARACTER'; scalar; INTENT(OUT).
  5854. Intrinsic groups: `unix'.
  5855. Description:
  5856.    Returns the current date (using the same format as `CTIME()') in
  5857. DATE.
  5858.    Equivalent to:
  5859.      CALL CTIME(DATE, TIME8())
  5860.    *Note CTime Intrinsic (subroutine)::.
  5861.    Some non-GNU implementations of Fortran provide this intrinsic as
  5862. only a function, not as a subroutine.
  5863.    For information on other intrinsics with the same name: *Note Fdate
  5864. Intrinsic (function)::.
  5865. File: g77.info,  Node: Fdate Intrinsic (function),  Next: FGet Intrinsic (subroutine),  Prev: Fdate Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5866. Fdate Intrinsic (function)
  5867. ..........................
  5868.      Fdate()
  5869. Fdate: `CHARACTER*(*)' function.
  5870. Intrinsic groups: `unix'.
  5871. Description:
  5872.    Returns the current date (using the same format as `CTIME()').
  5873.    Equivalent to:
  5874.      CTIME(TIME8())
  5875.    *Note CTime Intrinsic (function)::.
  5876.    For information on other intrinsics with the same name: *Note Fdate
  5877. Intrinsic (subroutine)::.
  5878. File: g77.info,  Node: FGet Intrinsic (subroutine),  Next: FGetC Intrinsic (subroutine),  Prev: Fdate Intrinsic (function),  Up: Table of Intrinsic Functions
  5879. FGet Intrinsic (subroutine)
  5880. ...........................
  5881.      CALL FGet(C, STATUS)
  5882. C: `CHARACTER'; scalar; INTENT(OUT).
  5883. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  5884. Intrinsic groups: `unix'.
  5885. Description:
  5886.    Reads a single character into C in stream mode from unit 5
  5887. (by-passing normal formatted output) using `getc(3)'.  Returns in
  5888. STATUS 0 on success, -1 on end-of-file, and the error code from
  5889. `ferror(3)' otherwise.
  5890.    Stream I/O should not be mixed with normal record-oriented
  5891. (formatted or unformatted) I/O on the same unit; the results are
  5892. unpredictable.
  5893.    For information on other intrinsics with the same name: *Note FGet
  5894. Intrinsic (function)::.
  5895. File: g77.info,  Node: FGetC Intrinsic (subroutine),  Next: Float Intrinsic,  Prev: FGet Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5896. FGetC Intrinsic (subroutine)
  5897. ............................
  5898.      CALL FGetC(UNIT, C, STATUS)
  5899. UNIT: `INTEGER'; scalar; INTENT(IN).
  5900. C: `CHARACTER'; scalar; INTENT(OUT).
  5901. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  5902. Intrinsic groups: `unix'.
  5903. Description:
  5904.    Reads a single character into C in stream mode from unit UNIT
  5905. (by-passing normal formatted output) using `getc(3)'.  Returns in
  5906. STATUS 0 on success, -1 on end-of-file, and the error code from
  5907. `ferror(3)' otherwise.
  5908.    Stream I/O should not be mixed with normal record-oriented
  5909. (formatted or unformatted) I/O on the same unit; the results are
  5910. unpredictable.
  5911.    For information on other intrinsics with the same name: *Note FGetC
  5912. Intrinsic (function)::.
  5913. File: g77.info,  Node: Float Intrinsic,  Next: Floor Intrinsic,  Prev: FGetC Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5914. Float Intrinsic
  5915. ...............
  5916.      Float(A)
  5917. Float: `REAL(KIND=1)' function.
  5918. A: `INTEGER'; scalar; INTENT(IN).
  5919. Intrinsic groups: (standard FORTRAN 77).
  5920. Description:
  5921.    Archaic form of `REAL()' that is specific to one type for A.  *Note
  5922. Real Intrinsic::.
  5923. File: g77.info,  Node: Floor Intrinsic,  Next: Flush Intrinsic,  Prev: Float Intrinsic,  Up: Table of Intrinsic Functions
  5924. Floor Intrinsic
  5925. ...............
  5926.    This intrinsic is not yet implemented.  The name is, however,
  5927. reserved as an intrinsic.  Use `EXTERNAL Floor' to use this name for an
  5928. external procedure.
  5929. File: g77.info,  Node: Flush Intrinsic,  Next: FNum Intrinsic,  Prev: Floor Intrinsic,  Up: Table of Intrinsic Functions
  5930. Flush Intrinsic
  5931. ...............
  5932.      CALL Flush(UNIT)
  5933. UNIT: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
  5934. Intrinsic groups: `unix'.
  5935. Description:
  5936.    Flushes Fortran unit(s) currently open for output.  Without the
  5937. optional argument, all such units are flushed, otherwise just the unit
  5938. specified by UNIT.
  5939.    Some non-GNU implementations of Fortran provide this intrinsic as a
  5940. library procedure that might or might not support the (optional) UNIT
  5941. argument.
  5942. File: g77.info,  Node: FNum Intrinsic,  Next: FPut Intrinsic (subroutine),  Prev: Flush Intrinsic,  Up: Table of Intrinsic Functions
  5943. FNum Intrinsic
  5944. ..............
  5945.      FNum(UNIT)
  5946. FNum: `INTEGER(KIND=1)' function.
  5947. UNIT: `INTEGER'; scalar; INTENT(IN).
  5948. Intrinsic groups: `unix'.
  5949. Description:
  5950.    Returns the Unix file descriptor number corresponding to the open
  5951. Fortran I/O unit UNIT.  This could be passed to an interface to C I/O
  5952. routines.
  5953. File: g77.info,  Node: FPut Intrinsic (subroutine),  Next: FPutC Intrinsic (subroutine),  Prev: FNum Intrinsic,  Up: Table of Intrinsic Functions
  5954. FPut Intrinsic (subroutine)
  5955. ...........................
  5956.      CALL FPut(C, STATUS)
  5957. C: `CHARACTER'; scalar; INTENT(IN).
  5958. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  5959. Intrinsic groups: `unix'.
  5960. Description:
  5961.    Writes the single character C in stream mode to unit 6 (by-passing
  5962. normal formatted output) using `putc(3)'.  Returns in STATUS 0 on
  5963. success, the error code from `ferror(3)' otherwise.
  5964.    Stream I/O should not be mixed with normal record-oriented
  5965. (formatted or unformatted) I/O on the same unit; the results are
  5966. unpredictable.
  5967.    For information on other intrinsics with the same name: *Note FPut
  5968. Intrinsic (function)::.
  5969. File: g77.info,  Node: FPutC Intrinsic (subroutine),  Next: Fraction Intrinsic,  Prev: FPut Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5970. FPutC Intrinsic (subroutine)
  5971. ............................
  5972.      CALL FPutC(UNIT, C, STATUS)
  5973. UNIT: `INTEGER'; scalar; INTENT(IN).
  5974. C: `CHARACTER'; scalar; INTENT(IN).
  5975. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  5976. Intrinsic groups: `unix'.
  5977. Description:
  5978.    Writes the single character UNIT in stream mode to unit 6
  5979. (by-passing normal formatted output) using `putc(3)'.  Returns in C 0
  5980. on success, the error code from `ferror(3)' otherwise.
  5981.    Stream I/O should not be mixed with normal record-oriented
  5982. (formatted or unformatted) I/O on the same unit; the results are
  5983. unpredictable.
  5984.    For information on other intrinsics with the same name: *Note FPutC
  5985. Intrinsic (function)::.
  5986. File: g77.info,  Node: Fraction Intrinsic,  Next: FSeek Intrinsic,  Prev: FPutC Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  5987. Fraction Intrinsic
  5988. ..................
  5989.    This intrinsic is not yet implemented.  The name is, however,
  5990. reserved as an intrinsic.  Use `EXTERNAL Fraction' to use this name for
  5991. an external procedure.
  5992. File: g77.info,  Node: FSeek Intrinsic,  Next: FStat Intrinsic (subroutine),  Prev: Fraction Intrinsic,  Up: Table of Intrinsic Functions
  5993. FSeek Intrinsic
  5994. ...............
  5995.      CALL FSeek(UNIT, OFFSET, WHENCE, ERRLAB)
  5996. UNIT: `INTEGER'; scalar; INTENT(IN).
  5997. OFFSET: `INTEGER'; scalar; INTENT(IN).
  5998. WHENCE: `INTEGER'; scalar; INTENT(IN).
  5999. ERRLAB: `*LABEL', where LABEL is the label of an executable statement;
  6000. OPTIONAL.
  6001. Intrinsic groups: `unix'.
  6002. Description:
  6003.    Attempts to move Fortran unit UNIT to the specified OFFSET: absolute
  6004. offset if OFFSET=0; relative to the current offset if OFFSET=1;
  6005. relative to the end of the file if OFFSET=2.  It branches to label
  6006. WHENCE if UNIT is not open or if the call otherwise fails.
  6007. File: g77.info,  Node: FStat Intrinsic (subroutine),  Next: FStat Intrinsic (function),  Prev: FSeek Intrinsic,  Up: Table of Intrinsic Functions
  6008. FStat Intrinsic (subroutine)
  6009. ............................
  6010.      CALL FStat(UNIT, SARRAY, STATUS)
  6011. UNIT: `INTEGER'; scalar; INTENT(IN).
  6012. SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
  6013. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  6014. Intrinsic groups: `unix'.
  6015. Description:
  6016.    Obtains data about the file open on Fortran I/O unit UNIT and places
  6017. them in the array SARRAY.  The values in this array are extracted from
  6018. the `stat' structure as returned by `fstat(2)' q.v., as follows:
  6019.   1. File mode
  6020.   2. Inode number
  6021.   3. ID of device containing directory entry for file
  6022.   4. Device id (if relevant)
  6023.   5. Number of links
  6024.   6. Owner's uid
  6025.   7. Owner's gid
  6026.   8. File size (bytes)
  6027.   9. Last access time
  6028.  10. Last modification time
  6029.  11. Last file status change time
  6030.  12. Preferred I/O block size
  6031.  13. Number of blocks allocated
  6032.    Not all these elements are relevant on all systems.  If an element
  6033. is not relevant, it is returned as 0.
  6034.    If the STATUS argument is supplied, it contains 0 on success or a
  6035. non-zero error code upon return.
  6036.    Some non-GNU implementations of Fortran provide this intrinsic as
  6037. only a function, not as a subroutine, or do not support the (optional)
  6038. STATUS argument.
  6039.    For information on other intrinsics with the same name: *Note FStat
  6040. Intrinsic (function)::.
  6041. File: g77.info,  Node: FStat Intrinsic (function),  Next: FTell Intrinsic (subroutine),  Prev: FStat Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6042. FStat Intrinsic (function)
  6043. ..........................
  6044.      FStat(UNIT, SARRAY)
  6045. FStat: `INTEGER(KIND=1)' function.
  6046. UNIT: `INTEGER'; scalar; INTENT(IN).
  6047. SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
  6048. Intrinsic groups: `unix'.
  6049. Description:
  6050.    Obtains data about the file open on Fortran I/O unit UNIT and places
  6051. them in the array SARRAY.  The values in this array are extracted from
  6052. the `stat' structure as returned by `fstat(2)' q.v., as follows:
  6053.   1. File mode
  6054.   2. Inode number
  6055.   3. ID of device containing directory entry for file
  6056.   4. Device id (if relevant)
  6057.   5. Number of links
  6058.   6. Owner's uid
  6059.   7. Owner's gid
  6060.   8. File size (bytes)
  6061.   9. Last access time
  6062.  10. Last modification time
  6063.  11. Last file status change time
  6064.  12. Preferred I/O block size
  6065.  13. Number of blocks allocated
  6066.    Not all these elements are relevant on all systems.  If an element
  6067. is not relevant, it is returned as 0.
  6068.    Returns 0 on success or a non-zero error code.
  6069.    For information on other intrinsics with the same name: *Note FStat
  6070. Intrinsic (subroutine)::.
  6071. File: g77.info,  Node: FTell Intrinsic (subroutine),  Next: FTell Intrinsic (function),  Prev: FStat Intrinsic (function),  Up: Table of Intrinsic Functions
  6072. FTell Intrinsic (subroutine)
  6073. ............................
  6074.      CALL FTell(UNIT, OFFSET)
  6075. UNIT: `INTEGER'; scalar; INTENT(IN).
  6076. OFFSET: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  6077. Intrinsic groups: `unix'.
  6078. Description:
  6079.    Sets OFFSET to the current offset of Fortran unit UNIT (or to -1 if
  6080. UNIT is not open).
  6081.    Some non-GNU implementations of Fortran provide this intrinsic as
  6082. only a function, not as a subroutine.
  6083.    For information on other intrinsics with the same name: *Note FTell
  6084. Intrinsic (function)::.
  6085. File: g77.info,  Node: FTell Intrinsic (function),  Next: GError Intrinsic,  Prev: FTell Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6086. FTell Intrinsic (function)
  6087. ..........................
  6088.      FTell(UNIT)
  6089. FTell: `INTEGER(KIND=1)' function.
  6090. UNIT: `INTEGER'; scalar; INTENT(IN).
  6091. Intrinsic groups: `unix'.
  6092. Description:
  6093.    Returns the current offset of Fortran unit UNIT (or -1 if UNIT is
  6094. not open).
  6095.    For information on other intrinsics with the same name: *Note FTell
  6096. Intrinsic (subroutine)::.
  6097. File: g77.info,  Node: GError Intrinsic,  Next: GetArg Intrinsic,  Prev: FTell Intrinsic (function),  Up: Table of Intrinsic Functions
  6098. GError Intrinsic
  6099. ................
  6100.      CALL GError(MESSAGE)
  6101. MESSAGE: `CHARACTER'; scalar; INTENT(OUT).
  6102. Intrinsic groups: `unix'.
  6103. Description:
  6104.    Returns the system error message corresponding to the last system
  6105. error (C `errno').
  6106. File: g77.info,  Node: GetArg Intrinsic,  Next: GetCWD Intrinsic (subroutine),  Prev: GError Intrinsic,  Up: Table of Intrinsic Functions
  6107. GetArg Intrinsic
  6108. ................
  6109.      CALL GetArg(POS, VALUE)
  6110. POS: `INTEGER'; scalar; INTENT(IN).
  6111. VALUE: `CHARACTER'; scalar; INTENT(OUT).
  6112. Intrinsic groups: `unix'.
  6113. Description:
  6114.    Sets VALUE to the POS-th command-line argument (or to all blanks if
  6115. there are fewer than VALUE command-line arguments); `CALL GETARG(0,
  6116. VALUE)' sets VALUE to the name of the program (on systems that support
  6117. this feature).
  6118.    *Note IArgC Intrinsic::, for information on how to get the number of
  6119. arguments.
  6120. File: g77.info,  Node: GetCWD Intrinsic (subroutine),  Next: GetCWD Intrinsic (function),  Prev: GetArg Intrinsic,  Up: Table of Intrinsic Functions
  6121. GetCWD Intrinsic (subroutine)
  6122. .............................
  6123.      CALL GetCWD(NAME, STATUS)
  6124. NAME: `CHARACTER'; scalar; INTENT(OUT).
  6125. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  6126. Intrinsic groups: `unix'.
  6127. Description:
  6128.    Places the current working directory in NAME.  If the STATUS
  6129. argument is supplied, it contains 0 success or a non-zero error code
  6130. upon return (`ENOSYS' if the system does not provide `getcwd(3)' or
  6131. `getwd(3)').
  6132.    Some non-GNU implementations of Fortran provide this intrinsic as
  6133. only a function, not as a subroutine, or do not support the (optional)
  6134. STATUS argument.
  6135.    For information on other intrinsics with the same name: *Note GetCWD
  6136. Intrinsic (function)::.
  6137. File: g77.info,  Node: GetCWD Intrinsic (function),  Next: GetEnv Intrinsic,  Prev: GetCWD Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6138. GetCWD Intrinsic (function)
  6139. ...........................
  6140.      GetCWD(NAME)
  6141. GetCWD: `INTEGER(KIND=1)' function.
  6142. NAME: `CHARACTER'; scalar; INTENT(OUT).
  6143. Intrinsic groups: `unix'.
  6144. Description:
  6145.    Places the current working directory in NAME.  Returns 0 on success,
  6146. otherwise a non-zero error code (`ENOSYS' if the system does not
  6147. provide `getcwd(3)' or `getwd(3)').
  6148.    For information on other intrinsics with the same name: *Note GetCWD
  6149. Intrinsic (subroutine)::.
  6150. File: g77.info,  Node: GetEnv Intrinsic,  Next: GetGId Intrinsic,  Prev: GetCWD Intrinsic (function),  Up: Table of Intrinsic Functions
  6151. GetEnv Intrinsic
  6152. ................
  6153.      CALL GetEnv(NAME, VALUE)
  6154. NAME: `CHARACTER'; scalar; INTENT(IN).
  6155. VALUE: `CHARACTER'; scalar; INTENT(OUT).
  6156. Intrinsic groups: `unix'.
  6157. Description:
  6158.    Sets VALUE to the value of environment variable given by the value
  6159. of NAME (`$name' in shell terms) or to blanks if `$name' has not been
  6160. set.  A null character (`CHAR(0)') marks the end of the name in
  6161. NAME--otherwise, trailing blanks in NAME are ignored.
  6162. File: g77.info,  Node: GetGId Intrinsic,  Next: GetLog Intrinsic,  Prev: GetEnv Intrinsic,  Up: Table of Intrinsic Functions
  6163. GetGId Intrinsic
  6164. ................
  6165.      GetGId()
  6166. GetGId: `INTEGER(KIND=1)' function.
  6167. Intrinsic groups: `unix'.
  6168. Description:
  6169.    Returns the group id for the current process.
  6170. File: g77.info,  Node: GetLog Intrinsic,  Next: GetPId Intrinsic,  Prev: GetGId Intrinsic,  Up: Table of Intrinsic Functions
  6171. GetLog Intrinsic
  6172. ................
  6173.      CALL GetLog(LOGIN)
  6174. LOGIN: `CHARACTER'; scalar; INTENT(OUT).
  6175. Intrinsic groups: `unix'.
  6176. Description:
  6177.    Returns the login name for the process in LOGIN.
  6178.    *Caution:* On some systems, the `getlogin(3)' function, which this
  6179. intrinsic calls at run time, is either not implemented or returns a
  6180. null pointer.  In the latter case, this intrinsic returns blanks in
  6181. LOGIN.
  6182. File: g77.info,  Node: GetPId Intrinsic,  Next: GetUId Intrinsic,  Prev: GetLog Intrinsic,  Up: Table of Intrinsic Functions
  6183. GetPId Intrinsic
  6184. ................
  6185.      GetPId()
  6186. GetPId: `INTEGER(KIND=1)' function.
  6187. Intrinsic groups: `unix'.
  6188. Description:
  6189.    Returns the process id for the current process.
  6190. File: g77.info,  Node: GetUId Intrinsic,  Next: GMTime Intrinsic,  Prev: GetPId Intrinsic,  Up: Table of Intrinsic Functions
  6191. GetUId Intrinsic
  6192. ................
  6193.      GetUId()
  6194. GetUId: `INTEGER(KIND=1)' function.
  6195. Intrinsic groups: `unix'.
  6196. Description:
  6197.    Returns the user id for the current process.
  6198. File: g77.info,  Node: GMTime Intrinsic,  Next: HostNm Intrinsic (subroutine),  Prev: GetUId Intrinsic,  Up: Table of Intrinsic Functions
  6199. GMTime Intrinsic
  6200. ................
  6201.      CALL GMTime(STIME, TARRAY)
  6202. STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6203. TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).
  6204. Intrinsic groups: `unix'.
  6205. Description:
  6206.    Given a system time value STIME, fills TARRAY with values extracted
  6207. from it appropriate to the GMT time zone using `gmtime(3)'.
  6208.    The array elements are as follows:
  6209.   1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
  6210.      seconds
  6211.   2. Minutes after the hour, range 0-59
  6212.   3. Hours past midnight, range 0-23
  6213.   4. Day of month, range 0-31
  6214.   5. Number of months since January, range 0-12
  6215.   6. Years since 1900
  6216.   7. Number of days since Sunday, range 0-6
  6217.   8. Days since January 1
  6218.   9. Daylight savings indicator: positive if daylight savings is in
  6219.      effect, zero if not, and negative if the information isn't
  6220.      available.
  6221. File: g77.info,  Node: HostNm Intrinsic (subroutine),  Next: HostNm Intrinsic (function),  Prev: GMTime Intrinsic,  Up: Table of Intrinsic Functions
  6222. HostNm Intrinsic (subroutine)
  6223. .............................
  6224.      CALL HostNm(NAME, STATUS)
  6225. NAME: `CHARACTER'; scalar; INTENT(OUT).
  6226. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  6227. Intrinsic groups: `unix'.
  6228. Description:
  6229.    Fills NAME with the system's host name returned by `gethostname(2)'.
  6230. If the STATUS argument is supplied, it contains 0 on success or a
  6231. non-zero error code upon return (`ENOSYS' if the system does not
  6232. provide `gethostname(2)').
  6233.    Some non-GNU implementations of Fortran provide this intrinsic as
  6234. only a function, not as a subroutine, or do not support the (optional)
  6235. STATUS argument.
  6236.    For information on other intrinsics with the same name: *Note HostNm
  6237. Intrinsic (function)::.
  6238. File: g77.info,  Node: HostNm Intrinsic (function),  Next: Huge Intrinsic,  Prev: HostNm Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6239. HostNm Intrinsic (function)
  6240. ...........................
  6241.      HostNm(NAME)
  6242. HostNm: `INTEGER(KIND=1)' function.
  6243. NAME: `CHARACTER'; scalar; INTENT(OUT).
  6244. Intrinsic groups: `unix'.
  6245. Description:
  6246.    Fills NAME with the system's host name returned by `gethostname(2)',
  6247. returning 0 on success or a non-zero error code (`ENOSYS' if the system
  6248. does not provide `gethostname(2)').
  6249.    For information on other intrinsics with the same name: *Note HostNm
  6250. Intrinsic (subroutine)::.
  6251. File: g77.info,  Node: Huge Intrinsic,  Next: IAbs Intrinsic,  Prev: HostNm Intrinsic (function),  Up: Table of Intrinsic Functions
  6252. Huge Intrinsic
  6253. ..............
  6254.    This intrinsic is not yet implemented.  The name is, however,
  6255. reserved as an intrinsic.  Use `EXTERNAL Huge' to use this name for an
  6256. external procedure.
  6257. File: g77.info,  Node: IAbs Intrinsic,  Next: IAChar Intrinsic,  Prev: Huge Intrinsic,  Up: Table of Intrinsic Functions
  6258. IAbs Intrinsic
  6259. ..............
  6260.      IAbs(A)
  6261. IAbs: `INTEGER(KIND=1)' function.
  6262. A: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6263. Intrinsic groups: (standard FORTRAN 77).
  6264. Description:
  6265.    Archaic form of `ABS()' that is specific to one type for A.  *Note
  6266. Abs Intrinsic::.
  6267. File: g77.info,  Node: IAChar Intrinsic,  Next: IAnd Intrinsic,  Prev: IAbs Intrinsic,  Up: Table of Intrinsic Functions
  6268. IAChar Intrinsic
  6269. ................
  6270.      IAChar(C)
  6271. IAChar: `INTEGER(KIND=1)' function.
  6272. C: `CHARACTER'; scalar; INTENT(IN).
  6273. Intrinsic groups: `f2c', `f90'.
  6274. Description:
  6275.    Returns the code for the ASCII character in the first character
  6276. position of C.
  6277.    *Note AChar Intrinsic::, for the inverse of this function.
  6278.    *Note IChar Intrinsic::, for the function corresponding to the
  6279. system's native character set.
  6280. File: g77.info,  Node: IAnd Intrinsic,  Next: IArgC Intrinsic,  Prev: IAChar Intrinsic,  Up: Table of Intrinsic Functions
  6281. IAnd Intrinsic
  6282. ..............
  6283.      IAnd(I, J)
  6284. IAnd: `INTEGER' function, the exact type being the result of
  6285. cross-promoting the types of all the arguments.
  6286. I: `INTEGER'; scalar; INTENT(IN).
  6287. J: `INTEGER'; scalar; INTENT(IN).
  6288. Intrinsic groups: `mil', `f90', `vxt'.
  6289. Description:
  6290.    Returns value resulting from boolean AND of pair of bits in each of
  6291. I and J.
  6292. File: g77.info,  Node: IArgC Intrinsic,  Next: IBClr Intrinsic,  Prev: IAnd Intrinsic,  Up: Table of Intrinsic Functions
  6293. IArgC Intrinsic
  6294. ...............
  6295.      IArgC()
  6296. IArgC: `INTEGER(KIND=1)' function.
  6297. Intrinsic groups: `unix'.
  6298. Description:
  6299.    Returns the number of command-line arguments.
  6300.    This count does not include the specification of the program name
  6301. itself.
  6302. File: g77.info,  Node: IBClr Intrinsic,  Next: IBits Intrinsic,  Prev: IArgC Intrinsic,  Up: Table of Intrinsic Functions
  6303. IBClr Intrinsic
  6304. ...............
  6305.      IBClr(I, POS)
  6306. IBClr: `INTEGER' function, the `KIND=' value of the type being that of
  6307. argument I.
  6308. I: `INTEGER'; scalar; INTENT(IN).
  6309. POS: `INTEGER'; scalar; INTENT(IN).
  6310. Intrinsic groups: `mil', `f90', `vxt'.
  6311. Description:
  6312.    Returns the value of I with bit POS cleared (set to zero).  *Note
  6313. BTest Intrinsic:: for information on bit positions.
  6314. File: g77.info,  Node: IBits Intrinsic,  Next: IBSet Intrinsic,  Prev: IBClr Intrinsic,  Up: Table of Intrinsic Functions
  6315. IBits Intrinsic
  6316. ...............
  6317.      IBits(I, POS, LEN)
  6318. IBits: `INTEGER' function, the `KIND=' value of the type being that of
  6319. argument I.
  6320. I: `INTEGER'; scalar; INTENT(IN).
  6321. POS: `INTEGER'; scalar; INTENT(IN).
  6322. LEN: `INTEGER'; scalar; INTENT(IN).
  6323. Intrinsic groups: `mil', `f90', `vxt'.
  6324. Description:
  6325.    Extracts a subfield of length LEN from I, starting from bit position
  6326. POS and extending left for LEN bits.  The result is right-justified and
  6327. the remaining bits are zeroed.  The value of `POS+LEN' must be less
  6328. than or equal to the value `BIT_SIZE(I)'.  *Note Bit_Size Intrinsic::.
  6329. File: g77.info,  Node: IBSet Intrinsic,  Next: IChar Intrinsic,  Prev: IBits Intrinsic,  Up: Table of Intrinsic Functions
  6330. IBSet Intrinsic
  6331. ...............
  6332.      IBSet(I, POS)
  6333. IBSet: `INTEGER' function, the `KIND=' value of the type being that of
  6334. argument I.
  6335. I: `INTEGER'; scalar; INTENT(IN).
  6336. POS: `INTEGER'; scalar; INTENT(IN).
  6337. Intrinsic groups: `mil', `f90', `vxt'.
  6338. Description:
  6339.    Returns the value of I with bit POS set (to one).  *Note BTest
  6340. Intrinsic:: for information on bit positions.
  6341. File: g77.info,  Node: IChar Intrinsic,  Next: IDate Intrinsic (UNIX),  Prev: IBSet Intrinsic,  Up: Table of Intrinsic Functions
  6342. IChar Intrinsic
  6343. ...............
  6344.      IChar(C)
  6345. IChar: `INTEGER(KIND=1)' function.
  6346. C: `CHARACTER'; scalar; INTENT(IN).
  6347. Intrinsic groups: (standard FORTRAN 77).
  6348. Description:
  6349.    Returns the code for the character in the first character position
  6350. of C.
  6351.    Because the system's native character set is used, the
  6352. correspondence between character and their codes is not necessarily the
  6353. same between GNU Fortran implementations.
  6354.    Note that no intrinsic exists to convert a printable character
  6355. string to a numerical value.  For example, there is no intrinsic that,
  6356. given the `CHARACTER' value `'154'', returns an `INTEGER' or `REAL'
  6357. value with the value `154'.
  6358.    Instead, you can use internal-file I/O to do this kind of conversion.
  6359. For example:
  6360.      INTEGER VALUE
  6361.      CHARACTER*10 STRING
  6362.      STRING = '154'
  6363.      READ (STRING, '(I10)'), VALUE
  6364.      PRINT *, VALUE
  6365.      END
  6366.    The above program, when run, prints:
  6367.       154
  6368.    *Note Char Intrinsic::, for the inverse of the `ICHAR' function.
  6369.    *Note IAChar Intrinsic::, for the function corresponding to the
  6370. ASCII character set.
  6371. File: g77.info,  Node: IDate Intrinsic (UNIX),  Next: IDiM Intrinsic,  Prev: IChar Intrinsic,  Up: Table of Intrinsic Functions
  6372. IDate Intrinsic (UNIX)
  6373. ......................
  6374.      CALL IDate(TARRAY)
  6375. TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).
  6376. Intrinsic groups: `unix'.
  6377. Description:
  6378.    Fills TARRAY with the numerical values at the current local time of
  6379. day, month (in the range 1-12), and year in elements 1, 2, and 3,
  6380. respectively.  The year has four significant digits.
  6381.    For information on other intrinsics with the same name: *Note IDate
  6382. Intrinsic (VXT)::.
  6383. File: g77.info,  Node: IDiM Intrinsic,  Next: IDInt Intrinsic,  Prev: IDate Intrinsic (UNIX),  Up: Table of Intrinsic Functions
  6384. IDiM Intrinsic
  6385. ..............
  6386.      IDiM(X, Y)
  6387. IDiM: `INTEGER(KIND=1)' function.
  6388. X: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6389. Y: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6390. Intrinsic groups: (standard FORTRAN 77).
  6391. Description:
  6392.    Archaic form of `DIM()' that is specific to one type for X and Y.
  6393. *Note DiM Intrinsic::.
  6394. File: g77.info,  Node: IDInt Intrinsic,  Next: IDNInt Intrinsic,  Prev: IDiM Intrinsic,  Up: Table of Intrinsic Functions
  6395. IDInt Intrinsic
  6396. ...............
  6397.      IDInt(A)
  6398. IDInt: `INTEGER(KIND=1)' function.
  6399. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  6400. Intrinsic groups: (standard FORTRAN 77).
  6401. Description:
  6402.    Archaic form of `INT()' that is specific to one type for A.  *Note
  6403. Int Intrinsic::.
  6404. File: g77.info,  Node: IDNInt Intrinsic,  Next: IEOr Intrinsic,  Prev: IDInt Intrinsic,  Up: Table of Intrinsic Functions
  6405. IDNInt Intrinsic
  6406. ................
  6407.      IDNInt(A)
  6408. IDNInt: `INTEGER(KIND=1)' function.
  6409. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  6410. Intrinsic groups: (standard FORTRAN 77).
  6411. Description:
  6412.    Archaic form of `NINT()' that is specific to one type for A.  *Note
  6413. NInt Intrinsic::.
  6414. File: g77.info,  Node: IEOr Intrinsic,  Next: IErrNo Intrinsic,  Prev: IDNInt Intrinsic,  Up: Table of Intrinsic Functions
  6415. IEOr Intrinsic
  6416. ..............
  6417.      IEOr(I, J)
  6418. IEOr: `INTEGER' function, the exact type being the result of
  6419. cross-promoting the types of all the arguments.
  6420. I: `INTEGER'; scalar; INTENT(IN).
  6421. J: `INTEGER'; scalar; INTENT(IN).
  6422. Intrinsic groups: `mil', `f90', `vxt'.
  6423. Description:
  6424.    Returns value resulting from boolean exclusive-OR of pair of bits in
  6425. each of I and J.
  6426. File: g77.info,  Node: IErrNo Intrinsic,  Next: IFix Intrinsic,  Prev: IEOr Intrinsic,  Up: Table of Intrinsic Functions
  6427. IErrNo Intrinsic
  6428. ................
  6429.      IErrNo()
  6430. IErrNo: `INTEGER(KIND=1)' function.
  6431. Intrinsic groups: `unix'.
  6432. Description:
  6433.    Returns the last system error number (corresponding to the C
  6434. `errno').
  6435. File: g77.info,  Node: IFix Intrinsic,  Next: Imag Intrinsic,  Prev: IErrNo Intrinsic,  Up: Table of Intrinsic Functions
  6436. IFix Intrinsic
  6437. ..............
  6438.      IFix(A)
  6439. IFix: `INTEGER(KIND=1)' function.
  6440. A: `REAL(KIND=1)'; scalar; INTENT(IN).
  6441. Intrinsic groups: (standard FORTRAN 77).
  6442. Description:
  6443.    Archaic form of `INT()' that is specific to one type for A.  *Note
  6444. Int Intrinsic::.
  6445. File: g77.info,  Node: Imag Intrinsic,  Next: ImagPart Intrinsic,  Prev: IFix Intrinsic,  Up: Table of Intrinsic Functions
  6446. Imag Intrinsic
  6447. ..............
  6448.      Imag(Z)
  6449. Imag: `REAL' function, the `KIND=' value of the type being that of
  6450. argument Z.
  6451. Z: `COMPLEX'; scalar; INTENT(IN).
  6452. Intrinsic groups: `f2c'.
  6453. Description:
  6454.    The imaginary part of Z is returned, without conversion.
  6455.    *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
  6456. However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
  6457. something different for some compilers that are not true Fortran 90
  6458. compilers but offer some extensions standardized by Fortran 90 (such as
  6459. the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
  6460.    The advantage of `IMAG()' is that, while not necessarily more or
  6461. less portable than `AIMAG()', it is more likely to cause a compiler
  6462. that doesn't support it to produce a diagnostic than generate incorrect
  6463. code.
  6464.    *Note REAL() and AIMAG() of Complex::, for more information.
  6465. File: g77.info,  Node: ImagPart Intrinsic,  Next: Index Intrinsic,  Prev: Imag Intrinsic,  Up: Table of Intrinsic Functions
  6466. ImagPart Intrinsic
  6467. ..................
  6468.      ImagPart(Z)
  6469. ImagPart: `REAL' function, the `KIND=' value of the type being that of
  6470. argument Z.
  6471. Z: `COMPLEX'; scalar; INTENT(IN).
  6472. Intrinsic groups: `gnu'.
  6473. Description:
  6474.    The imaginary part of Z is returned, without conversion.
  6475.    *Note:* The way to do this in standard Fortran 90 is `AIMAG(Z)'.
  6476. However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means
  6477. something different for some compilers that are not true Fortran 90
  6478. compilers but offer some extensions standardized by Fortran 90 (such as
  6479. the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
  6480.    The advantage of `IMAGPART()' is that, while not necessarily more or
  6481. less portable than `AIMAG()', it is more likely to cause a compiler
  6482. that doesn't support it to produce a diagnostic than generate incorrect
  6483. code.
  6484.    *Note REAL() and AIMAG() of Complex::, for more information.
  6485. File: g77.info,  Node: Index Intrinsic,  Next: Int Intrinsic,  Prev: ImagPart Intrinsic,  Up: Table of Intrinsic Functions
  6486. Index Intrinsic
  6487. ...............
  6488.      Index(STRING, SUBSTRING)
  6489. Index: `INTEGER(KIND=1)' function.
  6490. STRING: `CHARACTER'; scalar; INTENT(IN).
  6491. SUBSTRING: `CHARACTER'; scalar; INTENT(IN).
  6492. Intrinsic groups: (standard FORTRAN 77).
  6493. Description:
  6494.    Returns the position of the start of the first occurrence of string
  6495. SUBSTRING as a substring in STRING, counting from one.  If SUBSTRING
  6496. doesn't occur in STRING, zero is returned.
  6497. File: g77.info,  Node: Int Intrinsic,  Next: Int2 Intrinsic,  Prev: Index Intrinsic,  Up: Table of Intrinsic Functions
  6498. Int Intrinsic
  6499. .............
  6500.      Int(A)
  6501. Int: `INTEGER(KIND=1)' function.
  6502. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  6503. Intrinsic groups: (standard FORTRAN 77).
  6504. Description:
  6505.    Returns A with the fractional portion of its magnitude truncated and
  6506. its sign preserved, converted to type `INTEGER(KIND=1)'.
  6507.    If A is type `COMPLEX', its real part is truncated and converted,
  6508. and its imaginary part is disregarded.
  6509.    *Note NInt Intrinsic::, for how to convert, rounded to nearest whole
  6510. number.
  6511.    *Note AInt Intrinsic::, for how to truncate to whole number without
  6512. converting.
  6513. File: g77.info,  Node: Int2 Intrinsic,  Next: Int8 Intrinsic,  Prev: Int Intrinsic,  Up: Table of Intrinsic Functions
  6514. Int2 Intrinsic
  6515. ..............
  6516.      Int2(A)
  6517. Int2: `INTEGER(KIND=6)' function.
  6518. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  6519. Intrinsic groups: `gnu'.
  6520. Description:
  6521.    Returns A with the fractional portion of its magnitude truncated and
  6522. its sign preserved, converted to type `INTEGER(KIND=6)'.
  6523.    If A is type `COMPLEX', its real part is truncated and converted,
  6524. and its imaginary part is disgregarded.
  6525.    *Note Int Intrinsic::.
  6526.    The precise meaning of this intrinsic might change in a future
  6527. version of the GNU Fortran language, as more is learned about how it is
  6528. used.
  6529. File: g77.info,  Node: Int8 Intrinsic,  Next: IOr Intrinsic,  Prev: Int2 Intrinsic,  Up: Table of Intrinsic Functions
  6530. Int8 Intrinsic
  6531. ..............
  6532.      Int8(A)
  6533. Int8: `INTEGER(KIND=2)' function.
  6534. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  6535. Intrinsic groups: `gnu'.
  6536. Description:
  6537.    Returns A with the fractional portion of its magnitude truncated and
  6538. its sign preserved, converted to type `INTEGER(KIND=2)'.
  6539.    If A is type `COMPLEX', its real part is truncated and converted,
  6540. and its imaginary part is disgregarded.
  6541.    *Note Int Intrinsic::.
  6542.    The precise meaning of this intrinsic might change in a future
  6543. version of the GNU Fortran language, as more is learned about how it is
  6544. used.
  6545. File: g77.info,  Node: IOr Intrinsic,  Next: IRand Intrinsic,  Prev: Int8 Intrinsic,  Up: Table of Intrinsic Functions
  6546. IOr Intrinsic
  6547. .............
  6548.      IOr(I, J)
  6549. IOr: `INTEGER' function, the exact type being the result of
  6550. cross-promoting the types of all the arguments.
  6551. I: `INTEGER'; scalar; INTENT(IN).
  6552. J: `INTEGER'; scalar; INTENT(IN).
  6553. Intrinsic groups: `mil', `f90', `vxt'.
  6554. Description:
  6555.    Returns value resulting from boolean OR of pair of bits in each of I
  6556. and J.
  6557. File: g77.info,  Node: IRand Intrinsic,  Next: IsaTty Intrinsic,  Prev: IOr Intrinsic,  Up: Table of Intrinsic Functions
  6558. IRand Intrinsic
  6559. ...............
  6560.      IRand(FLAG)
  6561. IRand: `INTEGER(KIND=1)' function.
  6562. FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
  6563. Intrinsic groups: `unix'.
  6564. Description:
  6565.    Returns a uniform quasi-random number up to a system-dependent limit.
  6566. If FLAG is 0, the next number in sequence is returned; if FLAG is 1,
  6567. the generator is restarted by calling the UNIX function `srand(0)'; if
  6568. FLAG has any other value, it is used as a new seed with `srand()'.
  6569.    *Note SRand Intrinsic::.
  6570.    *Note:* As typically implemented (by the routine of the same name in
  6571. the C library), this random number generator is a very poor one, though
  6572. the BSD and GNU libraries provide a much better implementation than the
  6573. `traditional' one.  On a different system you almost certainly want to
  6574. use something better.
  6575. File: g77.info,  Node: IsaTty Intrinsic,  Next: IShft Intrinsic,  Prev: IRand Intrinsic,  Up: Table of Intrinsic Functions
  6576. IsaTty Intrinsic
  6577. ................
  6578.      IsaTty(UNIT)
  6579. IsaTty: `LOGICAL(KIND=1)' function.
  6580. UNIT: `INTEGER'; scalar; INTENT(IN).
  6581. Intrinsic groups: `unix'.
  6582. Description:
  6583.    Returns `.TRUE.' if and only if the Fortran I/O unit specified by
  6584. UNIT is connected to a terminal device.  See `isatty(3)'.
  6585. File: g77.info,  Node: IShft Intrinsic,  Next: IShftC Intrinsic,  Prev: IsaTty Intrinsic,  Up: Table of Intrinsic Functions
  6586. IShft Intrinsic
  6587. ...............
  6588.      IShft(I, SHIFT)
  6589. IShft: `INTEGER' function, the `KIND=' value of the type being that of
  6590. argument I.
  6591. I: `INTEGER'; scalar; INTENT(IN).
  6592. SHIFT: `INTEGER'; scalar; INTENT(IN).
  6593. Intrinsic groups: `mil', `f90', `vxt'.
  6594. Description:
  6595.    All bits representing I are shifted SHIFT places.  `SHIFT.GT.0'
  6596. indicates a left shift, `SHIFT.EQ.0' indicates no shift and
  6597. `SHIFT.LT.0' indicates a right shift.  If the absolute value of the
  6598. shift count is greater than `BIT_SIZE(I)', the result is undefined.
  6599. Bits shifted out from the left end or the right end, as the case may be,
  6600. are lost.  Zeros are shifted in from the opposite end.
  6601.    *Note IShftC Intrinsic:: for the circular-shift equivalent.
  6602. File: g77.info,  Node: IShftC Intrinsic,  Next: ISign Intrinsic,  Prev: IShft Intrinsic,  Up: Table of Intrinsic Functions
  6603. IShftC Intrinsic
  6604. ................
  6605.      IShftC(I, SHIFT, SIZE)
  6606. IShftC: `INTEGER' function, the `KIND=' value of the type being that of
  6607. argument I.
  6608. I: `INTEGER'; scalar; INTENT(IN).
  6609. SHIFT: `INTEGER'; scalar; INTENT(IN).
  6610. SIZE: `INTEGER'; scalar; INTENT(IN).
  6611. Intrinsic groups: `mil', `f90', `vxt'.
  6612. Description:
  6613.    The rightmost SIZE bits of the argument I are shifted circularly
  6614. SHIFT places, i.e. the bits shifted out of one end are shifted into the
  6615. opposite end.  No bits are lost.  The unshifted bits of the result are
  6616. the same as the unshifted bits of I.  The  absolute value of the
  6617. argument SHIFT must be less than or equal to SIZE.  The value of SIZE
  6618. must be greater than or equal to one and less than or equal to
  6619. `BIT_SIZE(I)'.
  6620.    *Note IShft Intrinsic:: for the logical shift equivalent.
  6621. File: g77.info,  Node: ISign Intrinsic,  Next: ITime Intrinsic,  Prev: IShftC Intrinsic,  Up: Table of Intrinsic Functions
  6622. ISign Intrinsic
  6623. ...............
  6624.      ISign(A, B)
  6625. ISign: `INTEGER(KIND=1)' function.
  6626. A: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6627. B: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6628. Intrinsic groups: (standard FORTRAN 77).
  6629. Description:
  6630.    Archaic form of `SIGN()' that is specific to one type for A and B.
  6631. *Note Sign Intrinsic::.
  6632. File: g77.info,  Node: ITime Intrinsic,  Next: Kill Intrinsic (subroutine),  Prev: ISign Intrinsic,  Up: Table of Intrinsic Functions
  6633. ITime Intrinsic
  6634. ...............
  6635.      CALL ITime(TARRAY)
  6636. TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT).
  6637. Intrinsic groups: `unix'.
  6638. Description:
  6639.    Returns the current local time hour, minutes, and seconds in elements
  6640. 1, 2, and 3 of TARRAY, respectively.
  6641. File: g77.info,  Node: Kill Intrinsic (subroutine),  Next: Kind Intrinsic,  Prev: ITime Intrinsic,  Up: Table of Intrinsic Functions
  6642. Kill Intrinsic (subroutine)
  6643. ...........................
  6644.      CALL Kill(PID, SIGNAL, STATUS)
  6645. PID: `INTEGER'; scalar; INTENT(IN).
  6646. SIGNAL: `INTEGER'; scalar; INTENT(IN).
  6647. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  6648. Intrinsic groups: `unix'.
  6649. Description:
  6650.    Sends the signal specified by SIGNAL to the process PID.  If the
  6651. STATUS argument is supplied, it contains 0 on success or a non-zero
  6652. error code upon return.  See `kill(2)'.
  6653.    Some non-GNU implementations of Fortran provide this intrinsic as
  6654. only a function, not as a subroutine, or do not support the (optional)
  6655. STATUS argument.
  6656.    For information on other intrinsics with the same name: *Note Kill
  6657. Intrinsic (function)::.
  6658. File: g77.info,  Node: Kind Intrinsic,  Next: LBound Intrinsic,  Prev: Kill Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6659. Kind Intrinsic
  6660. ..............
  6661.    This intrinsic is not yet implemented.  The name is, however,
  6662. reserved as an intrinsic.  Use `EXTERNAL Kind' to use this name for an
  6663. external procedure.
  6664. File: g77.info,  Node: LBound Intrinsic,  Next: Len Intrinsic,  Prev: Kind Intrinsic,  Up: Table of Intrinsic Functions
  6665. LBound Intrinsic
  6666. ................
  6667.    This intrinsic is not yet implemented.  The name is, however,
  6668. reserved as an intrinsic.  Use `EXTERNAL LBound' to use this name for an
  6669. external procedure.
  6670. File: g77.info,  Node: Len Intrinsic,  Next: Len_Trim Intrinsic,  Prev: LBound Intrinsic,  Up: Table of Intrinsic Functions
  6671. Len Intrinsic
  6672. .............
  6673.      Len(STRING)
  6674. Len: `INTEGER(KIND=1)' function.
  6675. STRING: `CHARACTER'; scalar.
  6676. Intrinsic groups: (standard FORTRAN 77).
  6677. Description:
  6678.    Returns the length of STRING.
  6679.    If STRING is an array, the length of an element of STRING is
  6680. returned.
  6681.    Note that STRING need not be defined when this intrinsic is invoked,
  6682. since only the length, not the content, of STRING is needed.
  6683.    *Note Bit_Size Intrinsic::, for the function that determines the
  6684. size of its argument in bits.
  6685. File: g77.info,  Node: Len_Trim Intrinsic,  Next: LGe Intrinsic,  Prev: Len Intrinsic,  Up: Table of Intrinsic Functions
  6686. Len_Trim Intrinsic
  6687. ..................
  6688.      Len_Trim(STRING)
  6689. Len_Trim: `INTEGER(KIND=1)' function.
  6690. STRING: `CHARACTER'; scalar; INTENT(IN).
  6691. Intrinsic groups: `f90'.
  6692. Description:
  6693.    Returns the index of the last non-blank character in STRING.
  6694. `LNBLNK' and `LEN_TRIM' are equivalent.
  6695. File: g77.info,  Node: LGe Intrinsic,  Next: LGt Intrinsic,  Prev: Len_Trim Intrinsic,  Up: Table of Intrinsic Functions
  6696. LGe Intrinsic
  6697. .............
  6698.      LGe(STRING_A, STRING_B)
  6699. LGe: `LOGICAL(KIND=1)' function.
  6700. STRING_A: `CHARACTER'; scalar; INTENT(IN).
  6701. STRING_B: `CHARACTER'; scalar; INTENT(IN).
  6702. Intrinsic groups: (standard FORTRAN 77).
  6703. Description:
  6704.    Returns `.TRUE.' if `STRING_A.GE.STRING_B', `.FALSE.' otherwise.
  6705. STRING_A and STRING_B are interpreted as containing ASCII character
  6706. codes.  If either value contains a character not in the ASCII character
  6707. set, the result is processor dependent.
  6708.    If the STRING_A and STRING_B are not the same length, the shorter is
  6709. compared as if spaces were appended to it to form a value that has the
  6710. same length as the longer.
  6711.    The lexical comparison intrinsics `LGe', `LGt', `LLe', and `LLt'
  6712. differ from the corresponding intrinsic operators `.GE.', `.GT.',
  6713. `.LE.', `.LT.'.  Because the ASCII collating sequence is assumed, the
  6714. following expressions always return `.TRUE.':
  6715.      LGE ('0', ' ')
  6716.      LGE ('A', '0')
  6717.      LGE ('a', 'A')
  6718.    The following related expressions do *not* always return `.TRUE.',
  6719. as they are not necessarily evaluated assuming the arguments use ASCII
  6720. encoding:
  6721.      '0' .GE. ' '
  6722.      'A' .GE. '0'
  6723.      'a' .GE. 'A'
  6724.    The same difference exists between `LGt' and `.GT.'; between `LLe'
  6725. and `.LE.'; and between `LLt' and `.LT.'.
  6726. File: g77.info,  Node: LGt Intrinsic,  Next: Link Intrinsic (subroutine),  Prev: LGe Intrinsic,  Up: Table of Intrinsic Functions
  6727. LGt Intrinsic
  6728. .............
  6729.      LGt(STRING_A, STRING_B)
  6730. LGt: `LOGICAL(KIND=1)' function.
  6731. STRING_A: `CHARACTER'; scalar; INTENT(IN).
  6732. STRING_B: `CHARACTER'; scalar; INTENT(IN).
  6733. Intrinsic groups: (standard FORTRAN 77).
  6734. Description:
  6735.    Returns `.TRUE.' if `STRING_A.GT.STRING_B', `.FALSE.' otherwise.
  6736. STRING_A and STRING_B are interpreted as containing ASCII character
  6737. codes.  If either value contains a character not in the ASCII character
  6738. set, the result is processor dependent.
  6739.    If the STRING_A and STRING_B are not the same length, the shorter is
  6740. compared as if spaces were appended to it to form a value that has the
  6741. same length as the longer.
  6742.    *Note LGe Intrinsic::, for information on the distinction between
  6743. the `LGT' intrinsic and the `.GT.'  operator.
  6744. File: g77.info,  Node: Link Intrinsic (subroutine),  Next: LLe Intrinsic,  Prev: LGt Intrinsic,  Up: Table of Intrinsic Functions
  6745. Link Intrinsic (subroutine)
  6746. ...........................
  6747.      CALL Link(PATH1, PATH2, STATUS)
  6748. PATH1: `CHARACTER'; scalar; INTENT(IN).
  6749. PATH2: `CHARACTER'; scalar; INTENT(IN).
  6750. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  6751. Intrinsic groups: `unix'.
  6752. Description:
  6753.    Makes a (hard) link from file PATH1 to PATH2.  A null character
  6754. (`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
  6755. trailing blanks in PATH1 and PATH2 are ignored.  If the STATUS argument
  6756. is supplied, it contains 0 on success or a non-zero error code upon
  6757. return.  See `link(2)'.
  6758.    Some non-GNU implementations of Fortran provide this intrinsic as
  6759. only a function, not as a subroutine, or do not support the (optional)
  6760. STATUS argument.
  6761.    For information on other intrinsics with the same name: *Note Link
  6762. Intrinsic (function)::.
  6763. File: g77.info,  Node: LLe Intrinsic,  Next: LLt Intrinsic,  Prev: Link Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6764. LLe Intrinsic
  6765. .............
  6766.      LLe(STRING_A, STRING_B)
  6767. LLe: `LOGICAL(KIND=1)' function.
  6768. STRING_A: `CHARACTER'; scalar; INTENT(IN).
  6769. STRING_B: `CHARACTER'; scalar; INTENT(IN).
  6770. Intrinsic groups: (standard FORTRAN 77).
  6771. Description:
  6772.    Returns `.TRUE.' if `STRING_A.LE.STRING_B', `.FALSE.' otherwise.
  6773. STRING_A and STRING_B are interpreted as containing ASCII character
  6774. codes.  If either value contains a character not in the ASCII character
  6775. set, the result is processor dependent.
  6776.    If the STRING_A and STRING_B are not the same length, the shorter is
  6777. compared as if spaces were appended to it to form a value that has the
  6778. same length as the longer.
  6779.    *Note LGe Intrinsic::, for information on the distinction between
  6780. the `LLE' intrinsic and the `.LE.'  operator.
  6781. File: g77.info,  Node: LLt Intrinsic,  Next: LnBlnk Intrinsic,  Prev: LLe Intrinsic,  Up: Table of Intrinsic Functions
  6782. LLt Intrinsic
  6783. .............
  6784.      LLt(STRING_A, STRING_B)
  6785. LLt: `LOGICAL(KIND=1)' function.
  6786. STRING_A: `CHARACTER'; scalar; INTENT(IN).
  6787. STRING_B: `CHARACTER'; scalar; INTENT(IN).
  6788. Intrinsic groups: (standard FORTRAN 77).
  6789. Description:
  6790.    Returns `.TRUE.' if `STRING_A.LT.STRING_B', `.FALSE.' otherwise.
  6791. STRING_A and STRING_B are interpreted as containing ASCII character
  6792. codes.  If either value contains a character not in the ASCII character
  6793. set, the result is processor dependent.
  6794.    If the STRING_A and STRING_B are not the same length, the shorter is
  6795. compared as if spaces were appended to it to form a value that has the
  6796. same length as the longer.
  6797.    *Note LGe Intrinsic::, for information on the distinction between
  6798. the `LLT' intrinsic and the `.LT.'  operator.
  6799. File: g77.info,  Node: LnBlnk Intrinsic,  Next: Loc Intrinsic,  Prev: LLt Intrinsic,  Up: Table of Intrinsic Functions
  6800. LnBlnk Intrinsic
  6801. ................
  6802.      LnBlnk(STRING)
  6803. LnBlnk: `INTEGER(KIND=1)' function.
  6804. STRING: `CHARACTER'; scalar; INTENT(IN).
  6805. Intrinsic groups: `unix'.
  6806. Description:
  6807.    Returns the index of the last non-blank character in STRING.
  6808. `LNBLNK' and `LEN_TRIM' are equivalent.
  6809. File: g77.info,  Node: Loc Intrinsic,  Next: Log Intrinsic,  Prev: LnBlnk Intrinsic,  Up: Table of Intrinsic Functions
  6810. Loc Intrinsic
  6811. .............
  6812.      Loc(ENTITY)
  6813. Loc: `INTEGER(KIND=7)' function.
  6814. ENTITY: Any type; cannot be a constant or expression.
  6815. Intrinsic groups: `unix'.
  6816. Description:
  6817.    The `LOC()' intrinsic works the same way as the `%LOC()' construct.
  6818. *Note The `%LOC()' Construct: %LOC(), for more information.
  6819. File: g77.info,  Node: Log Intrinsic,  Next: Log10 Intrinsic,  Prev: Loc Intrinsic,  Up: Table of Intrinsic Functions
  6820. Log Intrinsic
  6821. .............
  6822.      Log(X)
  6823. Log: `REAL' or `COMPLEX' function, the exact type being that of
  6824. argument X.
  6825. X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
  6826. Intrinsic groups: (standard FORTRAN 77).
  6827. Description:
  6828.    Returns the natural logarithm of X, which must be greater than zero
  6829. or, if type `COMPLEX', must not be zero.
  6830.    *Note Exp Intrinsic::, for the inverse of this function.
  6831.    *Note Log10 Intrinsic::, for the base-10 logarithm function.
  6832. File: g77.info,  Node: Log10 Intrinsic,  Next: Logical Intrinsic,  Prev: Log Intrinsic,  Up: Table of Intrinsic Functions
  6833. Log10 Intrinsic
  6834. ...............
  6835.      Log10(X)
  6836. Log10: `REAL' function, the `KIND=' value of the type being that of
  6837. argument X.
  6838. X: `REAL'; scalar; INTENT(IN).
  6839. Intrinsic groups: (standard FORTRAN 77).
  6840. Description:
  6841.    Returns the natural logarithm of X, which must be greater than zero
  6842. or, if type `COMPLEX', must not be zero.
  6843.    The inverse of this function is `10. ** LOG10(X)'.
  6844.    *Note Log Intrinsic::, for the natural logarithm function.
  6845. File: g77.info,  Node: Logical Intrinsic,  Next: Long Intrinsic,  Prev: Log10 Intrinsic,  Up: Table of Intrinsic Functions
  6846. Logical Intrinsic
  6847. .................
  6848.    This intrinsic is not yet implemented.  The name is, however,
  6849. reserved as an intrinsic.  Use `EXTERNAL Logical' to use this name for
  6850. an external procedure.
  6851. File: g77.info,  Node: Long Intrinsic,  Next: LShift Intrinsic,  Prev: Logical Intrinsic,  Up: Table of Intrinsic Functions
  6852. Long Intrinsic
  6853. ..............
  6854.      Long(A)
  6855. Long: `INTEGER(KIND=1)' function.
  6856. A: `INTEGER(KIND=6)'; scalar; INTENT(IN).
  6857. Intrinsic groups: `unix'.
  6858. Description:
  6859.    Archaic form of `INT()' that is specific to one type for A.  *Note
  6860. Int Intrinsic::.
  6861.    The precise meaning of this intrinsic might change in a future
  6862. version of the GNU Fortran language, as more is learned about how it is
  6863. used.
  6864. File: g77.info,  Node: LShift Intrinsic,  Next: LStat Intrinsic (subroutine),  Prev: Long Intrinsic,  Up: Table of Intrinsic Functions
  6865. LShift Intrinsic
  6866. ................
  6867.      LShift(I, SHIFT)
  6868. LShift: `INTEGER' function, the `KIND=' value of the type being that of
  6869. argument I.
  6870. I: `INTEGER'; scalar; INTENT(IN).
  6871. SHIFT: `INTEGER'; scalar; INTENT(IN).
  6872. Intrinsic groups: `f2c'.
  6873. Description:
  6874.    Returns I shifted to the left SHIFT bits.
  6875.    Although similar to the expression `I*(2**SHIFT)', there are
  6876. important differences.  For example, the sign of the result is not
  6877. necessarily the same as the sign of I.
  6878.    Currently this intrinsic is defined assuming the underlying
  6879. representation of I is as a two's-complement integer.  It is unclear at
  6880. this point whether that definition will apply when a different
  6881. representation is involved.
  6882.    *Note LShift Intrinsic::, for the inverse of this function.
  6883.    *Note IShft Intrinsic::, for information on a more widely available
  6884. left-shifting intrinsic that is also more precisely defined.
  6885. File: g77.info,  Node: LStat Intrinsic (subroutine),  Next: LStat Intrinsic (function),  Prev: LShift Intrinsic,  Up: Table of Intrinsic Functions
  6886. LStat Intrinsic (subroutine)
  6887. ............................
  6888.      CALL LStat(FILE, SARRAY, STATUS)
  6889. FILE: `CHARACTER'; scalar; INTENT(IN).
  6890. SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
  6891. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  6892. Intrinsic groups: `unix'.
  6893. Description:
  6894.    Obtains data about the given file FILE and places them in the array
  6895. SARRAY.  A null character (`CHAR(0)') marks the end of the name in
  6896. FILE--otherwise, trailing blanks in FILE are ignored.  If FILE is a
  6897. symbolic link it returns data on the link itself, so the routine is
  6898. available only on systems that support symbolic links.  The values in
  6899. this array are extracted from the `stat' structure as returned by
  6900. `fstat(2)' q.v., as follows:
  6901.   1. File mode
  6902.   2. Inode number
  6903.   3. ID of device containing directory entry for file
  6904.   4. Device id (if relevant)
  6905.   5. Number of links
  6906.   6. Owner's uid
  6907.   7. Owner's gid
  6908.   8. File size (bytes)
  6909.   9. Last access time
  6910.  10. Last modification time
  6911.  11. Last file status change time
  6912.  12. Preferred I/O block size
  6913.  13. Number of blocks allocated
  6914.    Not all these elements are relevant on all systems.  If an element
  6915. is not relevant, it is returned as 0.
  6916.    If the STATUS argument is supplied, it contains 0 on success or a
  6917. non-zero error code upon return (`ENOSYS' if the system does not
  6918. provide `lstat(2)').
  6919.    Some non-GNU implementations of Fortran provide this intrinsic as
  6920. only a function, not as a subroutine, or do not support the (optional)
  6921. STATUS argument.
  6922.    For information on other intrinsics with the same name: *Note LStat
  6923. Intrinsic (function)::.
  6924. File: g77.info,  Node: LStat Intrinsic (function),  Next: LTime Intrinsic,  Prev: LStat Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  6925. LStat Intrinsic (function)
  6926. ..........................
  6927.      LStat(FILE, SARRAY)
  6928. LStat: `INTEGER(KIND=1)' function.
  6929. FILE: `CHARACTER'; scalar; INTENT(IN).
  6930. SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
  6931. Intrinsic groups: `unix'.
  6932. Description:
  6933.    Obtains data about the given file FILE and places them in the array
  6934. SARRAY.  A null character (`CHAR(0)') marks the end of the name in
  6935. FILE--otherwise, trailing blanks in FILE are ignored.  If FILE is a
  6936. symbolic link it returns data on the link itself, so the routine is
  6937. available only on systems that support symbolic links.  The values in
  6938. this array are extracted from the `stat' structure as returned by
  6939. `fstat(2)' q.v., as follows:
  6940.   1. File mode
  6941.   2. Inode number
  6942.   3. ID of device containing directory entry for file
  6943.   4. Device id (if relevant)
  6944.   5. Number of links
  6945.   6. Owner's uid
  6946.   7. Owner's gid
  6947.   8. File size (bytes)
  6948.   9. Last access time
  6949.  10. Last modification time
  6950.  11. Last file status change time
  6951.  12. Preferred I/O block size
  6952.  13. Number of blocks allocated
  6953.    Not all these elements are relevant on all systems.  If an element
  6954. is not relevant, it is returned as 0.
  6955.    Returns 0 on success or a non-zero error code (`ENOSYS' if the
  6956. system does not provide `lstat(2)').
  6957.    For information on other intrinsics with the same name: *Note LStat
  6958. Intrinsic (subroutine)::.
  6959. File: g77.info,  Node: LTime Intrinsic,  Next: MatMul Intrinsic,  Prev: LStat Intrinsic (function),  Up: Table of Intrinsic Functions
  6960. LTime Intrinsic
  6961. ...............
  6962.      CALL LTime(STIME, TARRAY)
  6963. STIME: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  6964. TARRAY: `INTEGER(KIND=1)'; DIMENSION(9); INTENT(OUT).
  6965. Intrinsic groups: `unix'.
  6966. Description:
  6967.    Given a system time value STIME, fills TARRAY with values extracted
  6968. from it appropriate to the GMT time zone using `localtime(3)'.
  6969.    The array elements are as follows:
  6970.   1. Seconds after the minute, range 0-59 or 0-61 to allow for leap
  6971.      seconds
  6972.   2. Minutes after the hour, range 0-59
  6973.   3. Hours past midnight, range 0-23
  6974.   4. Day of month, range 0-31
  6975.   5. Number of months since January, range 0-12
  6976.   6. Years since 1900
  6977.   7. Number of days since Sunday, range 0-6
  6978.   8. Days since January 1
  6979.   9. Daylight savings indicator: positive if daylight savings is in
  6980.      effect, zero if not, and negative if the information isn't
  6981.      available.
  6982. File: g77.info,  Node: MatMul Intrinsic,  Next: Max Intrinsic,  Prev: LTime Intrinsic,  Up: Table of Intrinsic Functions
  6983. MatMul Intrinsic
  6984. ................
  6985.    This intrinsic is not yet implemented.  The name is, however,
  6986. reserved as an intrinsic.  Use `EXTERNAL MatMul' to use this name for an
  6987. external procedure.
  6988. File: g77.info,  Node: Max Intrinsic,  Next: Max0 Intrinsic,  Prev: MatMul Intrinsic,  Up: Table of Intrinsic Functions
  6989. Max Intrinsic
  6990. .............
  6991.      Max(A-1, A-2, ..., A-n)
  6992. Max: `INTEGER' or `REAL' function, the exact type being the result of
  6993. cross-promoting the types of all the arguments.
  6994. A: `INTEGER' or `REAL'; at least two such arguments must be provided;
  6995. scalar; INTENT(IN).
  6996. Intrinsic groups: (standard FORTRAN 77).
  6997. Description:
  6998.    Returns the argument with the largest value.
  6999.    *Note Min Intrinsic::, for the opposite function.
  7000. File: g77.info,  Node: Max0 Intrinsic,  Next: Max1 Intrinsic,  Prev: Max Intrinsic,  Up: Table of Intrinsic Functions
  7001. Max0 Intrinsic
  7002. ..............
  7003.      Max0(A-1, A-2, ..., A-n)
  7004. Max0: `INTEGER(KIND=1)' function.
  7005. A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
  7006. scalar; INTENT(IN).
  7007. Intrinsic groups: (standard FORTRAN 77).
  7008. Description:
  7009.    Archaic form of `MAX()' that is specific to one type for A.  *Note
  7010. Max Intrinsic::.
  7011. File: g77.info,  Node: Max1 Intrinsic,  Next: MaxExponent Intrinsic,  Prev: Max0 Intrinsic,  Up: Table of Intrinsic Functions
  7012. Max1 Intrinsic
  7013. ..............
  7014.      Max1(A-1, A-2, ..., A-n)
  7015. Max1: `INTEGER(KIND=1)' function.
  7016. A: `REAL(KIND=1)'; at least two such arguments must be provided;
  7017. scalar; INTENT(IN).
  7018. Intrinsic groups: (standard FORTRAN 77).
  7019. Description:
  7020.    Archaic form of `MAX()' that is specific to one type for A and a
  7021. different return type.  *Note Max Intrinsic::.
  7022. File: g77.info,  Node: MaxExponent Intrinsic,  Next: MaxLoc Intrinsic,  Prev: Max1 Intrinsic,  Up: Table of Intrinsic Functions
  7023. MaxExponent Intrinsic
  7024. .....................
  7025.    This intrinsic is not yet implemented.  The name is, however,
  7026. reserved as an intrinsic.  Use `EXTERNAL MaxExponent' to use this name
  7027. for an external procedure.
  7028. File: g77.info,  Node: MaxLoc Intrinsic,  Next: MaxVal Intrinsic,  Prev: MaxExponent Intrinsic,  Up: Table of Intrinsic Functions
  7029. MaxLoc Intrinsic
  7030. ................
  7031.    This intrinsic is not yet implemented.  The name is, however,
  7032. reserved as an intrinsic.  Use `EXTERNAL MaxLoc' to use this name for an
  7033. external procedure.
  7034. File: g77.info,  Node: MaxVal Intrinsic,  Next: MClock Intrinsic,  Prev: MaxLoc Intrinsic,  Up: Table of Intrinsic Functions
  7035. MaxVal Intrinsic
  7036. ................
  7037.    This intrinsic is not yet implemented.  The name is, however,
  7038. reserved as an intrinsic.  Use `EXTERNAL MaxVal' to use this name for an
  7039. external procedure.
  7040. File: g77.info,  Node: MClock Intrinsic,  Next: MClock8 Intrinsic,  Prev: MaxVal Intrinsic,  Up: Table of Intrinsic Functions
  7041. MClock Intrinsic
  7042. ................
  7043.      MClock()
  7044. MClock: `INTEGER(KIND=1)' function.
  7045. Intrinsic groups: `unix'.
  7046. Description:
  7047.    Returns the number of clock ticks since the start of the process.
  7048. Supported on systems with `clock(3)' (q.v.).
  7049.    This intrinsic is not fully portable, such as to systems with 32-bit
  7050. `INTEGER' types but supporting times wider than 32 bits.  *Note MClock8
  7051. Intrinsic::, for information on a similar intrinsic that might be
  7052. portable to more GNU Fortran implementations, though to fewer Fortran
  7053. compilers.
  7054.    If the system does not support `clock(3)', -1 is returned.
  7055. File: g77.info,  Node: MClock8 Intrinsic,  Next: Merge Intrinsic,  Prev: MClock Intrinsic,  Up: Table of Intrinsic Functions
  7056. MClock8 Intrinsic
  7057. .................
  7058.      MClock8()
  7059. MClock8: `INTEGER(KIND=2)' function.
  7060. Intrinsic groups: `unix'.
  7061. Description:
  7062.    Returns the number of clock ticks since the start of the process.
  7063. Supported on systems with `clock(3)' (q.v.).
  7064.    No Fortran implementations other than GNU Fortran are known to
  7065. support this intrinsic at the time of this writing.  *Note MClock
  7066. Intrinsic::, for information on a similar intrinsic that might be
  7067. portable to more Fortran compilers, though to fewer GNU Fortran
  7068. implementations.
  7069.    If the system does not support `clock(3)', -1 is returned.
  7070. File: g77.info,  Node: Merge Intrinsic,  Next: Min Intrinsic,  Prev: MClock8 Intrinsic,  Up: Table of Intrinsic Functions
  7071. Merge Intrinsic
  7072. ...............
  7073.    This intrinsic is not yet implemented.  The name is, however,
  7074. reserved as an intrinsic.  Use `EXTERNAL Merge' to use this name for an
  7075. external procedure.
  7076. File: g77.info,  Node: Min Intrinsic,  Next: Min0 Intrinsic,  Prev: Merge Intrinsic,  Up: Table of Intrinsic Functions
  7077. Min Intrinsic
  7078. .............
  7079.      Min(A-1, A-2, ..., A-n)
  7080. Min: `INTEGER' or `REAL' function, the exact type being the result of
  7081. cross-promoting the types of all the arguments.
  7082. A: `INTEGER' or `REAL'; at least two such arguments must be provided;
  7083. scalar; INTENT(IN).
  7084. Intrinsic groups: (standard FORTRAN 77).
  7085. Description:
  7086.    Returns the argument with the smallest value.
  7087.    *Note Max Intrinsic::, for the opposite function.
  7088. File: g77.info,  Node: Min0 Intrinsic,  Next: Min1 Intrinsic,  Prev: Min Intrinsic,  Up: Table of Intrinsic Functions
  7089. Min0 Intrinsic
  7090. ..............
  7091.      Min0(A-1, A-2, ..., A-n)
  7092. Min0: `INTEGER(KIND=1)' function.
  7093. A: `INTEGER(KIND=1)'; at least two such arguments must be provided;
  7094. scalar; INTENT(IN).
  7095. Intrinsic groups: (standard FORTRAN 77).
  7096. Description:
  7097.    Archaic form of `MIN()' that is specific to one type for A.  *Note
  7098. Min Intrinsic::.
  7099. File: g77.info,  Node: Min1 Intrinsic,  Next: MinExponent Intrinsic,  Prev: Min0 Intrinsic,  Up: Table of Intrinsic Functions
  7100. Min1 Intrinsic
  7101. ..............
  7102.      Min1(A-1, A-2, ..., A-n)
  7103. Min1: `INTEGER(KIND=1)' function.
  7104. A: `REAL(KIND=1)'; at least two such arguments must be provided;
  7105. scalar; INTENT(IN).
  7106. Intrinsic groups: (standard FORTRAN 77).
  7107. Description:
  7108.    Archaic form of `MIN()' that is specific to one type for A and a
  7109. different return type.  *Note Min Intrinsic::.
  7110. File: g77.info,  Node: MinExponent Intrinsic,  Next: MinLoc Intrinsic,  Prev: Min1 Intrinsic,  Up: Table of Intrinsic Functions
  7111. MinExponent Intrinsic
  7112. .....................
  7113.    This intrinsic is not yet implemented.  The name is, however,
  7114. reserved as an intrinsic.  Use `EXTERNAL MinExponent' to use this name
  7115. for an external procedure.
  7116. File: g77.info,  Node: MinLoc Intrinsic,  Next: MinVal Intrinsic,  Prev: MinExponent Intrinsic,  Up: Table of Intrinsic Functions
  7117. MinLoc Intrinsic
  7118. ................
  7119.    This intrinsic is not yet implemented.  The name is, however,
  7120. reserved as an intrinsic.  Use `EXTERNAL MinLoc' to use this name for an
  7121. external procedure.
  7122. File: g77.info,  Node: MinVal Intrinsic,  Next: Mod Intrinsic,  Prev: MinLoc Intrinsic,  Up: Table of Intrinsic Functions
  7123. MinVal Intrinsic
  7124. ................
  7125.    This intrinsic is not yet implemented.  The name is, however,
  7126. reserved as an intrinsic.  Use `EXTERNAL MinVal' to use this name for an
  7127. external procedure.
  7128. File: g77.info,  Node: Mod Intrinsic,  Next: Modulo Intrinsic,  Prev: MinVal Intrinsic,  Up: Table of Intrinsic Functions
  7129. Mod Intrinsic
  7130. .............
  7131.      Mod(A, P)
  7132. Mod: `INTEGER' or `REAL' function, the exact type being the result of
  7133. cross-promoting the types of all the arguments.
  7134. A: `INTEGER' or `REAL'; scalar; INTENT(IN).
  7135. P: `INTEGER' or `REAL'; scalar; INTENT(IN).
  7136. Intrinsic groups: (standard FORTRAN 77).
  7137. Description:
  7138.    Returns remainder calculated as:
  7139.      A - (INT(A / P) * P)
  7140.    P must not be zero.
  7141. File: g77.info,  Node: Modulo Intrinsic,  Next: MvBits Intrinsic,  Prev: Mod Intrinsic,  Up: Table of Intrinsic Functions
  7142. Modulo Intrinsic
  7143. ................
  7144.    This intrinsic is not yet implemented.  The name is, however,
  7145. reserved as an intrinsic.  Use `EXTERNAL Modulo' to use this name for an
  7146. external procedure.
  7147. File: g77.info,  Node: MvBits Intrinsic,  Next: Nearest Intrinsic,  Prev: Modulo Intrinsic,  Up: Table of Intrinsic Functions
  7148. MvBits Intrinsic
  7149. ................
  7150.      CALL MvBits(FROM, FROMPOS, LEN, TO, TOPOS)
  7151. FROM: `INTEGER'; scalar; INTENT(IN).
  7152. FROMPOS: `INTEGER'; scalar; INTENT(IN).
  7153. LEN: `INTEGER'; scalar; INTENT(IN).
  7154. TO: `INTEGER' with same `KIND=' value as for FROM; scalar;
  7155. INTENT(INOUT).
  7156. TOPOS: `INTEGER'; scalar; INTENT(IN).
  7157. Intrinsic groups: `mil', `f90', `vxt'.
  7158. Description:
  7159.    Moves LEN bits from positions FROMPOS through `FROMPOS+LEN-1' of
  7160. FROM to positions TOPOS through `FROMPOS+LEN-1' of TO.  The portion of
  7161. argument TO not affected by the movement of bits is unchanged.
  7162. Arguments FROM and TO are permitted to be the same numeric storage
  7163. unit.  The values of `FROMPOS+LEN' and `TOPOS+LEN' must be less than or
  7164. equal to `BIT_SIZE(FROM)'.
  7165. File: g77.info,  Node: Nearest Intrinsic,  Next: NInt Intrinsic,  Prev: MvBits Intrinsic,  Up: Table of Intrinsic Functions
  7166. Nearest Intrinsic
  7167. .................
  7168.    This intrinsic is not yet implemented.  The name is, however,
  7169. reserved as an intrinsic.  Use `EXTERNAL Nearest' to use this name for
  7170. an external procedure.
  7171. File: g77.info,  Node: NInt Intrinsic,  Next: Not Intrinsic,  Prev: Nearest Intrinsic,  Up: Table of Intrinsic Functions
  7172. NInt Intrinsic
  7173. ..............
  7174.      NInt(A)
  7175. NInt: `INTEGER(KIND=1)' function.
  7176. A: `REAL'; scalar; INTENT(IN).
  7177. Intrinsic groups: (standard FORTRAN 77).
  7178. Description:
  7179.    Returns A with the fractional portion of its magnitude eliminated by
  7180. rounding to the nearest whole number and with its sign preserved,
  7181. converted to type `INTEGER(KIND=1)'.
  7182.    If A is type `COMPLEX', its real part is rounded and converted.
  7183.    A fractional portion exactly equal to `.5' is rounded to the whole
  7184. number that is larger in magnitude.  (Also called "Fortran round".)
  7185.    *Note Int Intrinsic::, for how to convert, truncate to whole number.
  7186.    *Note ANInt Intrinsic::, for how to round to nearest whole number
  7187. without converting.
  7188. File: g77.info,  Node: Not Intrinsic,  Next: Or Intrinsic,  Prev: NInt Intrinsic,  Up: Table of Intrinsic Functions
  7189. Not Intrinsic
  7190. .............
  7191.      Not(I)
  7192. Not: `INTEGER' function, the `KIND=' value of the type being that of
  7193. argument I.
  7194. I: `INTEGER'; scalar; INTENT(IN).
  7195. Intrinsic groups: `mil', `f90', `vxt'.
  7196. Description:
  7197.    Returns value resulting from boolean NOT of each bit in I.
  7198. File: g77.info,  Node: Or Intrinsic,  Next: Pack Intrinsic,  Prev: Not Intrinsic,  Up: Table of Intrinsic Functions
  7199. Or Intrinsic
  7200. ............
  7201.      Or(I, J)
  7202. Or: `INTEGER' or `LOGICAL' function, the exact type being the result of
  7203. cross-promoting the types of all the arguments.
  7204. I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
  7205. J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
  7206. Intrinsic groups: `f2c'.
  7207. Description:
  7208.    Returns value resulting from boolean OR of pair of bits in each of I
  7209. and J.
  7210. File: g77.info,  Node: Pack Intrinsic,  Next: PError Intrinsic,  Prev: Or Intrinsic,  Up: Table of Intrinsic Functions
  7211. Pack Intrinsic
  7212. ..............
  7213.    This intrinsic is not yet implemented.  The name is, however,
  7214. reserved as an intrinsic.  Use `EXTERNAL Pack' to use this name for an
  7215. external procedure.
  7216. File: g77.info,  Node: PError Intrinsic,  Next: Precision Intrinsic,  Prev: Pack Intrinsic,  Up: Table of Intrinsic Functions
  7217. PError Intrinsic
  7218. ................
  7219.      CALL PError(STRING)
  7220. STRING: `CHARACTER'; scalar; INTENT(IN).
  7221. Intrinsic groups: `unix'.
  7222. Description:
  7223.    Prints (on the C `stderr' stream) a newline-terminated error message
  7224. corresponding to the last system error.  This is prefixed by STRING, a
  7225. colon and a space.  See `perror(3)'.
  7226. File: g77.info,  Node: Precision Intrinsic,  Next: Present Intrinsic,  Prev: PError Intrinsic,  Up: Table of Intrinsic Functions
  7227. Precision Intrinsic
  7228. ...................
  7229.    This intrinsic is not yet implemented.  The name is, however,
  7230. reserved as an intrinsic.  Use `EXTERNAL Precision' to use this name
  7231. for an external procedure.
  7232. File: g77.info,  Node: Present Intrinsic,  Next: Product Intrinsic,  Prev: Precision Intrinsic,  Up: Table of Intrinsic Functions
  7233. Present Intrinsic
  7234. .................
  7235.    This intrinsic is not yet implemented.  The name is, however,
  7236. reserved as an intrinsic.  Use `EXTERNAL Present' to use this name for
  7237. an external procedure.
  7238. File: g77.info,  Node: Product Intrinsic,  Next: Radix Intrinsic,  Prev: Present Intrinsic,  Up: Table of Intrinsic Functions
  7239. Product Intrinsic
  7240. .................
  7241.    This intrinsic is not yet implemented.  The name is, however,
  7242. reserved as an intrinsic.  Use `EXTERNAL Product' to use this name for
  7243. an external procedure.
  7244. File: g77.info,  Node: Radix Intrinsic,  Next: Rand Intrinsic,  Prev: Product Intrinsic,  Up: Table of Intrinsic Functions
  7245. Radix Intrinsic
  7246. ...............
  7247.    This intrinsic is not yet implemented.  The name is, however,
  7248. reserved as an intrinsic.  Use `EXTERNAL Radix' to use this name for an
  7249. external procedure.
  7250. File: g77.info,  Node: Rand Intrinsic,  Next: Random_Number Intrinsic,  Prev: Radix Intrinsic,  Up: Table of Intrinsic Functions
  7251. Rand Intrinsic
  7252. ..............
  7253.      Rand(FLAG)
  7254. Rand: `REAL(KIND=1)' function.
  7255. FLAG: `INTEGER'; OPTIONAL; scalar; INTENT(IN).
  7256. Intrinsic groups: `unix'.
  7257. Description:
  7258.    Returns a uniform quasi-random number between 0 and 1.  If FLAG is
  7259. 0, the next number in sequence is returned; if FLAG is 1, the generator
  7260. is restarted by calling `srand(0)'; if FLAG has any other value, it is
  7261. used as a new seed with `srand'.
  7262.    *Note SRand Intrinsic::.
  7263.    *Note:* As typically implemented (by the routine of the same name in
  7264. the C library), this random number generator is a very poor one, though
  7265. the BSD and GNU libraries provide a much better implementation than the
  7266. `traditional' one.  On a different system you almost certainly want to
  7267. use something better.
  7268. File: g77.info,  Node: Random_Number Intrinsic,  Next: Random_Seed Intrinsic,  Prev: Rand Intrinsic,  Up: Table of Intrinsic Functions
  7269. Random_Number Intrinsic
  7270. .......................
  7271.    This intrinsic is not yet implemented.  The name is, however,
  7272. reserved as an intrinsic.  Use `EXTERNAL Random_Number' to use this
  7273. name for an external procedure.
  7274. File: g77.info,  Node: Random_Seed Intrinsic,  Next: Range Intrinsic,  Prev: Random_Number Intrinsic,  Up: Table of Intrinsic Functions
  7275. Random_Seed Intrinsic
  7276. .....................
  7277.    This intrinsic is not yet implemented.  The name is, however,
  7278. reserved as an intrinsic.  Use `EXTERNAL Random_Seed' to use this name
  7279. for an external procedure.
  7280. File: g77.info,  Node: Range Intrinsic,  Next: Real Intrinsic,  Prev: Random_Seed Intrinsic,  Up: Table of Intrinsic Functions
  7281. Range Intrinsic
  7282. ...............
  7283.    This intrinsic is not yet implemented.  The name is, however,
  7284. reserved as an intrinsic.  Use `EXTERNAL Range' to use this name for an
  7285. external procedure.
  7286. File: g77.info,  Node: Real Intrinsic,  Next: RealPart Intrinsic,  Prev: Range Intrinsic,  Up: Table of Intrinsic Functions
  7287. Real Intrinsic
  7288. ..............
  7289.      Real(A)
  7290. Real: `REAL' function.  The exact type is `REAL(KIND=1)' when argument
  7291. A is any type other than `COMPLEX', or when it is `COMPLEX(KIND=1)'.
  7292. When A is any `COMPLEX' type other than `COMPLEX(KIND=1)', this
  7293. intrinsic is valid only when used as the argument to `REAL()', as
  7294. explained below.
  7295. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  7296. Intrinsic groups: (standard FORTRAN 77).
  7297. Description:
  7298.    Converts A to `REAL(KIND=1)'.
  7299.    Use of `REAL()' with a `COMPLEX' argument (other than
  7300. `COMPLEX(KIND=1)') is restricted to the following case:
  7301.      REAL(REAL(A))
  7302. This expression converts the real part of A to `REAL(KIND=1)'.
  7303.    *Note RealPart Intrinsic::, for information on a GNU Fortran
  7304. intrinsic that extracts the real part of an arbitrary `COMPLEX' value.
  7305.    *Note REAL() and AIMAG() of Complex::, for more information.
  7306. File: g77.info,  Node: RealPart Intrinsic,  Next: Rename Intrinsic (subroutine),  Prev: Real Intrinsic,  Up: Table of Intrinsic Functions
  7307. RealPart Intrinsic
  7308. ..................
  7309.      RealPart(Z)
  7310. RealPart: `REAL' function, the `KIND=' value of the type being that of
  7311. argument Z.
  7312. Z: `COMPLEX'; scalar; INTENT(IN).
  7313. Intrinsic groups: `gnu'.
  7314. Description:
  7315.    The real part of Z is returned, without conversion.
  7316.    *Note:* The way to do this in standard Fortran 90 is `REAL(Z)'.
  7317. However, when, for example, Z is `COMPLEX(KIND=2)', `REAL(Z)' means
  7318. something different for some compilers that are not true Fortran 90
  7319. compilers but offer some extensions standardized by Fortran 90 (such as
  7320. the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)').
  7321.    The advantage of `REALPART()' is that, while not necessarily more or
  7322. less portable than `REAL()', it is more likely to cause a compiler that
  7323. doesn't support it to produce a diagnostic than generate incorrect code.
  7324.    *Note REAL() and AIMAG() of Complex::, for more information.
  7325. File: g77.info,  Node: Rename Intrinsic (subroutine),  Next: Repeat Intrinsic,  Prev: RealPart Intrinsic,  Up: Table of Intrinsic Functions
  7326. Rename Intrinsic (subroutine)
  7327. .............................
  7328.      CALL Rename(PATH1, PATH2, STATUS)
  7329. PATH1: `CHARACTER'; scalar; INTENT(IN).
  7330. PATH2: `CHARACTER'; scalar; INTENT(IN).
  7331. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  7332. Intrinsic groups: `unix'.
  7333. Description:
  7334.    Renames the file PATH1 to PATH2.  A null character (`CHAR(0)') marks
  7335. the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
  7336. PATH1 and PATH2 are ignored.  See `rename(2)'.  If the STATUS argument
  7337. is supplied, it contains 0 on success or a non-zero error code upon
  7338. return.
  7339.    Some non-GNU implementations of Fortran provide this intrinsic as
  7340. only a function, not as a subroutine, or do not support the (optional)
  7341. STATUS argument.
  7342.    For information on other intrinsics with the same name: *Note Rename
  7343. Intrinsic (function)::.
  7344. File: g77.info,  Node: Repeat Intrinsic,  Next: Reshape Intrinsic,  Prev: Rename Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7345. Repeat Intrinsic
  7346. ................
  7347.    This intrinsic is not yet implemented.  The name is, however,
  7348. reserved as an intrinsic.  Use `EXTERNAL Repeat' to use this name for an
  7349. external procedure.
  7350. File: g77.info,  Node: Reshape Intrinsic,  Next: RRSpacing Intrinsic,  Prev: Repeat Intrinsic,  Up: Table of Intrinsic Functions
  7351. Reshape Intrinsic
  7352. .................
  7353.    This intrinsic is not yet implemented.  The name is, however,
  7354. reserved as an intrinsic.  Use `EXTERNAL Reshape' to use this name for
  7355. an external procedure.
  7356. File: g77.info,  Node: RRSpacing Intrinsic,  Next: RShift Intrinsic,  Prev: Reshape Intrinsic,  Up: Table of Intrinsic Functions
  7357. RRSpacing Intrinsic
  7358. ...................
  7359.    This intrinsic is not yet implemented.  The name is, however,
  7360. reserved as an intrinsic.  Use `EXTERNAL RRSpacing' to use this name
  7361. for an external procedure.
  7362. File: g77.info,  Node: RShift Intrinsic,  Next: Scale Intrinsic,  Prev: RRSpacing Intrinsic,  Up: Table of Intrinsic Functions
  7363. RShift Intrinsic
  7364. ................
  7365.      RShift(I, SHIFT)
  7366. RShift: `INTEGER' function, the `KIND=' value of the type being that of
  7367. argument I.
  7368. I: `INTEGER'; scalar; INTENT(IN).
  7369. SHIFT: `INTEGER'; scalar; INTENT(IN).
  7370. Intrinsic groups: `f2c'.
  7371. Description:
  7372.    Returns I shifted to the right SHIFT bits.
  7373.    Although similar to the expression `I/(2**SHIFT)', there are
  7374. important differences.  For example, the sign of the result is
  7375. undefined.
  7376.    Currently this intrinsic is defined assuming the underlying
  7377. representation of I is as a two's-complement integer.  It is unclear at
  7378. this point whether that definition will apply when a different
  7379. representation is involved.
  7380.    *Note RShift Intrinsic::, for the inverse of this function.
  7381.    *Note IShft Intrinsic::, for information on a more widely available
  7382. right-shifting intrinsic that is also more precisely defined.
  7383. File: g77.info,  Node: Scale Intrinsic,  Next: Scan Intrinsic,  Prev: RShift Intrinsic,  Up: Table of Intrinsic Functions
  7384. Scale Intrinsic
  7385. ...............
  7386.    This intrinsic is not yet implemented.  The name is, however,
  7387. reserved as an intrinsic.  Use `EXTERNAL Scale' to use this name for an
  7388. external procedure.
  7389. File: g77.info,  Node: Scan Intrinsic,  Next: Second Intrinsic (function),  Prev: Scale Intrinsic,  Up: Table of Intrinsic Functions
  7390. Scan Intrinsic
  7391. ..............
  7392.    This intrinsic is not yet implemented.  The name is, however,
  7393. reserved as an intrinsic.  Use `EXTERNAL Scan' to use this name for an
  7394. external procedure.
  7395. File: g77.info,  Node: Second Intrinsic (function),  Next: Second Intrinsic (subroutine),  Prev: Scan Intrinsic,  Up: Table of Intrinsic Functions
  7396. Second Intrinsic (function)
  7397. ...........................
  7398.      Second()
  7399. Second: `REAL(KIND=1)' function.
  7400. Intrinsic groups: `unix'.
  7401. Description:
  7402.    Returns the process's runtime in seconds--the same value as the UNIX
  7403. function `etime' returns.
  7404.    For information on other intrinsics with the same name: *Note Second
  7405. Intrinsic (subroutine)::.
  7406. File: g77.info,  Node: Second Intrinsic (subroutine),  Next: Selected_Int_Kind Intrinsic,  Prev: Second Intrinsic (function),  Up: Table of Intrinsic Functions
  7407. Second Intrinsic (subroutine)
  7408. .............................
  7409.      CALL Second(SECONDS)
  7410. SECONDS: `REAL'; scalar; INTENT(OUT).
  7411. Intrinsic groups: `unix'.
  7412. Description:
  7413.    Returns the process's runtime in seconds in SECONDS--the same value
  7414. as the UNIX function `etime' returns.
  7415.    This routine is known from Cray Fortran.  *Note CPU_Time Intrinsic::
  7416. for a standard equivalent.
  7417.    For information on other intrinsics with the same name: *Note Second
  7418. Intrinsic (function)::.
  7419. File: g77.info,  Node: Selected_Int_Kind Intrinsic,  Next: Selected_Real_Kind Intrinsic,  Prev: Second Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7420. Selected_Int_Kind Intrinsic
  7421. ...........................
  7422.    This intrinsic is not yet implemented.  The name is, however,
  7423. reserved as an intrinsic.  Use `EXTERNAL Selected_Int_Kind' to use this
  7424. name for an external procedure.
  7425. File: g77.info,  Node: Selected_Real_Kind Intrinsic,  Next: Set_Exponent Intrinsic,  Prev: Selected_Int_Kind Intrinsic,  Up: Table of Intrinsic Functions
  7426. Selected_Real_Kind Intrinsic
  7427. ............................
  7428.    This intrinsic is not yet implemented.  The name is, however,
  7429. reserved as an intrinsic.  Use `EXTERNAL Selected_Real_Kind' to use
  7430. this name for an external procedure.
  7431. File: g77.info,  Node: Set_Exponent Intrinsic,  Next: Shape Intrinsic,  Prev: Selected_Real_Kind Intrinsic,  Up: Table of Intrinsic Functions
  7432. Set_Exponent Intrinsic
  7433. ......................
  7434.    This intrinsic is not yet implemented.  The name is, however,
  7435. reserved as an intrinsic.  Use `EXTERNAL Set_Exponent' to use this name
  7436. for an external procedure.
  7437. File: g77.info,  Node: Shape Intrinsic,  Next: Short Intrinsic,  Prev: Set_Exponent Intrinsic,  Up: Table of Intrinsic Functions
  7438. Shape Intrinsic
  7439. ...............
  7440.    This intrinsic is not yet implemented.  The name is, however,
  7441. reserved as an intrinsic.  Use `EXTERNAL Shape' to use this name for an
  7442. external procedure.
  7443. File: g77.info,  Node: Short Intrinsic,  Next: Sign Intrinsic,  Prev: Shape Intrinsic,  Up: Table of Intrinsic Functions
  7444. Short Intrinsic
  7445. ...............
  7446.      Short(A)
  7447. Short: `INTEGER(KIND=6)' function.
  7448. A: `INTEGER'; scalar; INTENT(IN).
  7449. Intrinsic groups: `unix'.
  7450. Description:
  7451.    Returns A with the fractional portion of its magnitude truncated and
  7452. its sign preserved, converted to type `INTEGER(KIND=6)'.
  7453.    If A is type `COMPLEX', its real part is truncated and converted,
  7454. and its imaginary part is disgregarded.
  7455.    *Note Int Intrinsic::.
  7456.    The precise meaning of this intrinsic might change in a future
  7457. version of the GNU Fortran language, as more is learned about how it is
  7458. used.
  7459. File: g77.info,  Node: Sign Intrinsic,  Next: Signal Intrinsic (subroutine),  Prev: Short Intrinsic,  Up: Table of Intrinsic Functions
  7460. Sign Intrinsic
  7461. ..............
  7462.      Sign(A, B)
  7463. Sign: `INTEGER' or `REAL' function, the exact type being the result of
  7464. cross-promoting the types of all the arguments.
  7465. A: `INTEGER' or `REAL'; scalar; INTENT(IN).
  7466. B: `INTEGER' or `REAL'; scalar; INTENT(IN).
  7467. Intrinsic groups: (standard FORTRAN 77).
  7468. Description:
  7469.    Returns `ABS(A)*S', where S is +1 if `B.GE.0', -1 otherwise.
  7470.    *Note Abs Intrinsic::, for the function that returns the magnitude
  7471. of a value.
  7472. File: g77.info,  Node: Signal Intrinsic (subroutine),  Next: Sin Intrinsic,  Prev: Sign Intrinsic,  Up: Table of Intrinsic Functions
  7473. Signal Intrinsic (subroutine)
  7474. .............................
  7475.      CALL Signal(NUMBER, HANDLER, STATUS)
  7476. NUMBER: `INTEGER'; scalar; INTENT(IN).
  7477. HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
  7478. dummy/global `INTEGER(KIND=1)' scalar.
  7479. STATUS: `INTEGER(KIND=7)'; OPTIONAL; scalar; INTENT(OUT).
  7480. Intrinsic groups: `unix'.
  7481. Description:
  7482.    If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked
  7483. with a single integer argument (of system-dependent length) when signal
  7484. NUMBER occurs.  If HANDLER is an integer, it can be used to turn off
  7485. handling of signal NUMBER or revert to its default action.  See
  7486. `signal(2)'.
  7487.    Note that HANDLER will be called using C conventions, so the value
  7488. of its argument in Fortran terms Fortran terms is obtained by applying
  7489. `%LOC()' (or LOC()) to it.
  7490.    The value returned by `signal(2)' is written to STATUS, if that
  7491. argument is supplied.  Otherwise the return value is ignored.
  7492.    Some non-GNU implementations of Fortran provide this intrinsic as
  7493. only a function, not as a subroutine, or do not support the (optional)
  7494. STATUS argument.
  7495.    *Warning:* Use of the `libf2c' run-time library function `signal_'
  7496. directly (such as via `EXTERNAL SIGNAL') requires use of the `%VAL()'
  7497. construct to pass an `INTEGER' value (such as `SIG_IGN' or `SIG_DFL')
  7498. for the HANDLER argument.
  7499.    However, while `CALL SIGNAL(SIGNUM, %VAL(SIG_IGN))' works when
  7500. `SIGNAL' is treated as an external procedure (and resolves, at link
  7501. time, to `libf2c''s `signal_' routine), this construct is not valid
  7502. when `SIGNAL' is recognized as the intrinsic of that name.
  7503.    Therefore, for maximum portability and reliability, code such
  7504. references to the `SIGNAL' facility as follows:
  7505.      INTRINSIC SIGNAL
  7506.      ...
  7507.      CALL SIGNAL(SIGNUM, SIG_IGN)
  7508.    `g77' will compile such a call correctly, while other compilers will
  7509. generally either do so as well or reject the `INTRINSIC SIGNAL'
  7510. statement via a diagnostic, allowing you to take appropriate action.
  7511.    For information on other intrinsics with the same name: *Note Signal
  7512. Intrinsic (function)::.
  7513. File: g77.info,  Node: Sin Intrinsic,  Next: SinH Intrinsic,  Prev: Signal Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7514. Sin Intrinsic
  7515. .............
  7516.      Sin(X)
  7517. Sin: `REAL' or `COMPLEX' function, the exact type being that of
  7518. argument X.
  7519. X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
  7520. Intrinsic groups: (standard FORTRAN 77).
  7521. Description:
  7522.    Returns the sine of X, an angle measured in radians.
  7523.    *Note ASin Intrinsic::, for the inverse of this function.
  7524. File: g77.info,  Node: SinH Intrinsic,  Next: Sleep Intrinsic,  Prev: Sin Intrinsic,  Up: Table of Intrinsic Functions
  7525. SinH Intrinsic
  7526. ..............
  7527.      SinH(X)
  7528. SinH: `REAL' function, the `KIND=' value of the type being that of
  7529. argument X.
  7530. X: `REAL'; scalar; INTENT(IN).
  7531. Intrinsic groups: (standard FORTRAN 77).
  7532. Description:
  7533.    Returns the hyperbolic sine of X.
  7534. File: g77.info,  Node: Sleep Intrinsic,  Next: Sngl Intrinsic,  Prev: SinH Intrinsic,  Up: Table of Intrinsic Functions
  7535. Sleep Intrinsic
  7536. ...............
  7537.      CALL Sleep(SECONDS)
  7538. SECONDS: `INTEGER(KIND=1)'; scalar; INTENT(IN).
  7539. Intrinsic groups: `unix'.
  7540. Description:
  7541.    Causes the process to pause for SECONDS seconds.  See `sleep(2)'.
  7542. File: g77.info,  Node: Sngl Intrinsic,  Next: Spacing Intrinsic,  Prev: Sleep Intrinsic,  Up: Table of Intrinsic Functions
  7543. Sngl Intrinsic
  7544. ..............
  7545.      Sngl(A)
  7546. Sngl: `REAL(KIND=1)' function.
  7547. A: `REAL(KIND=2)'; scalar; INTENT(IN).
  7548. Intrinsic groups: (standard FORTRAN 77).
  7549. Description:
  7550.    Archaic form of `REAL()' that is specific to one type for A.  *Note
  7551. Real Intrinsic::.
  7552. File: g77.info,  Node: Spacing Intrinsic,  Next: Spread Intrinsic,  Prev: Sngl Intrinsic,  Up: Table of Intrinsic Functions
  7553. Spacing Intrinsic
  7554. .................
  7555.    This intrinsic is not yet implemented.  The name is, however,
  7556. reserved as an intrinsic.  Use `EXTERNAL Spacing' to use this name for
  7557. an external procedure.
  7558. File: g77.info,  Node: Spread Intrinsic,  Next: SqRt Intrinsic,  Prev: Spacing Intrinsic,  Up: Table of Intrinsic Functions
  7559. Spread Intrinsic
  7560. ................
  7561.    This intrinsic is not yet implemented.  The name is, however,
  7562. reserved as an intrinsic.  Use `EXTERNAL Spread' to use this name for an
  7563. external procedure.
  7564. File: g77.info,  Node: SqRt Intrinsic,  Next: SRand Intrinsic,  Prev: Spread Intrinsic,  Up: Table of Intrinsic Functions
  7565. SqRt Intrinsic
  7566. ..............
  7567.      SqRt(X)
  7568. SqRt: `REAL' or `COMPLEX' function, the exact type being that of
  7569. argument X.
  7570. X: `REAL' or `COMPLEX'; scalar; INTENT(IN).
  7571. Intrinsic groups: (standard FORTRAN 77).
  7572. Description:
  7573.    Returns the square root of X, which must not be negative.
  7574.    To calculate and represent the square root of a negative number,
  7575. complex arithmetic must be used.  For example, `SQRT(COMPLEX(X))'.
  7576.    The inverse of this function is `SQRT(X) * SQRT(X)'.
  7577. File: g77.info,  Node: SRand Intrinsic,  Next: Stat Intrinsic (subroutine),  Prev: SqRt Intrinsic,  Up: Table of Intrinsic Functions
  7578. SRand Intrinsic
  7579. ...............
  7580.      CALL SRand(SEED)
  7581. SEED: `INTEGER'; scalar; INTENT(IN).
  7582. Intrinsic groups: `unix'.
  7583. Description:
  7584.    Reinitialises the generator with the seed in SEED.  *Note IRand
  7585. Intrinsic::.  *Note Rand Intrinsic::.
  7586. File: g77.info,  Node: Stat Intrinsic (subroutine),  Next: Stat Intrinsic (function),  Prev: SRand Intrinsic,  Up: Table of Intrinsic Functions
  7587. Stat Intrinsic (subroutine)
  7588. ...........................
  7589.      CALL Stat(FILE, SARRAY, STATUS)
  7590. FILE: `CHARACTER'; scalar; INTENT(IN).
  7591. SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
  7592. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  7593. Intrinsic groups: `unix'.
  7594. Description:
  7595.    Obtains data about the given file FILE and places them in the array
  7596. SARRAY.  A null character (`CHAR(0)') marks the end of the name in
  7597. FILE--otherwise, trailing blanks in FILE are ignored.  The values in
  7598. this array are extracted from the `stat' structure as returned by
  7599. `fstat(2)' q.v., as follows:
  7600.   1. File mode
  7601.   2. Inode number
  7602.   3. ID of device containing directory entry for file
  7603.   4. Device id (if relevant)
  7604.   5. Number of links
  7605.   6. Owner's uid
  7606.   7. Owner's gid
  7607.   8. File size (bytes)
  7608.   9. Last access time
  7609.  10. Last modification time
  7610.  11. Last file status change time
  7611.  12. Preferred I/O block size
  7612.  13. Number of blocks allocated
  7613.    Not all these elements are relevant on all systems.  If an element
  7614. is not relevant, it is returned as 0.
  7615.    If the STATUS argument is supplied, it contains 0 on success or a
  7616. non-zero error code upon return.
  7617.    Some non-GNU implementations of Fortran provide this intrinsic as
  7618. only a function, not as a subroutine, or do not support the (optional)
  7619. STATUS argument.
  7620.    For information on other intrinsics with the same name: *Note Stat
  7621. Intrinsic (function)::.
  7622. File: g77.info,  Node: Stat Intrinsic (function),  Next: Sum Intrinsic,  Prev: Stat Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7623. Stat Intrinsic (function)
  7624. .........................
  7625.      Stat(FILE, SARRAY)
  7626. Stat: `INTEGER(KIND=1)' function.
  7627. FILE: `CHARACTER'; scalar; INTENT(IN).
  7628. SARRAY: `INTEGER(KIND=1)'; DIMENSION(13); INTENT(OUT).
  7629. Intrinsic groups: `unix'.
  7630. Description:
  7631.    Obtains data about the given file FILE and places them in the array
  7632. SARRAY.  A null character (`CHAR(0)') marks the end of the name in
  7633. FILE--otherwise, trailing blanks in FILE are ignored.  The values in
  7634. this array are extracted from the `stat' structure as returned by
  7635. `fstat(2)' q.v., as follows:
  7636.   1. File mode
  7637.   2. Inode number
  7638.   3. ID of device containing directory entry for file
  7639.   4. Device id (if relevant)
  7640.   5. Number of links
  7641.   6. Owner's uid
  7642.   7. Owner's gid
  7643.   8. File size (bytes)
  7644.   9. Last access time
  7645.  10. Last modification time
  7646.  11. Last file status change time
  7647.  12. Preferred I/O block size
  7648.  13. Number of blocks allocated
  7649.    Not all these elements are relevant on all systems.  If an element
  7650. is not relevant, it is returned as 0.
  7651.    Returns 0 on success or a non-zero error code.
  7652.    For information on other intrinsics with the same name: *Note Stat
  7653. Intrinsic (subroutine)::.
  7654. File: g77.info,  Node: Sum Intrinsic,  Next: SymLnk Intrinsic (subroutine),  Prev: Stat Intrinsic (function),  Up: Table of Intrinsic Functions
  7655. Sum Intrinsic
  7656. .............
  7657.    This intrinsic is not yet implemented.  The name is, however,
  7658. reserved as an intrinsic.  Use `EXTERNAL Sum' to use this name for an
  7659. external procedure.
  7660. File: g77.info,  Node: SymLnk Intrinsic (subroutine),  Next: System Intrinsic (subroutine),  Prev: Sum Intrinsic,  Up: Table of Intrinsic Functions
  7661. SymLnk Intrinsic (subroutine)
  7662. .............................
  7663.      CALL SymLnk(PATH1, PATH2, STATUS)
  7664. PATH1: `CHARACTER'; scalar; INTENT(IN).
  7665. PATH2: `CHARACTER'; scalar; INTENT(IN).
  7666. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  7667. Intrinsic groups: `unix'.
  7668. Description:
  7669.    Makes a symbolic link from file PATH1 to PATH2.  A null character
  7670. (`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
  7671. trailing blanks in PATH1 and PATH2 are ignored.  If the STATUS argument
  7672. is supplied, it contains 0 on success or a non-zero error code upon
  7673. return (`ENOSYS' if the system does not provide `symlink(2)').
  7674.    Some non-GNU implementations of Fortran provide this intrinsic as
  7675. only a function, not as a subroutine, or do not support the (optional)
  7676. STATUS argument.
  7677.    For information on other intrinsics with the same name: *Note SymLnk
  7678. Intrinsic (function)::.
  7679. File: g77.info,  Node: System Intrinsic (subroutine),  Next: System_Clock Intrinsic,  Prev: SymLnk Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7680. System Intrinsic (subroutine)
  7681. .............................
  7682.      CALL System(COMMAND, STATUS)
  7683. COMMAND: `CHARACTER'; scalar; INTENT(IN).
  7684. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  7685. Intrinsic groups: `unix'.
  7686. Description:
  7687.    Passes the command COMMAND to a shell (see `system(3)').  If
  7688. argument STATUS is present, it contains the value returned by
  7689. `system(3)', presumably 0 if the shell command succeeded.  Note that
  7690. which shell is used to invoke the command is system-dependent and
  7691. environment-dependent.
  7692.    Some non-GNU implementations of Fortran provide this intrinsic as
  7693. only a function, not as a subroutine, or do not support the (optional)
  7694. STATUS argument.
  7695.    For information on other intrinsics with the same name: *Note System
  7696. Intrinsic (function)::.
  7697. File: g77.info,  Node: System_Clock Intrinsic,  Next: Tan Intrinsic,  Prev: System Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7698. System_Clock Intrinsic
  7699. ......................
  7700.      CALL System_Clock(COUNT, RATE, MAX)
  7701. COUNT: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  7702. RATE: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  7703. MAX: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  7704. Intrinsic groups: `f90'.
  7705. Description:
  7706.    Returns in COUNT the current value of the system clock; this is the
  7707. value returned by the UNIX function `times(2)' in this implementation,
  7708. but isn't in general.  RATE is the number of clock ticks per second and
  7709. MAX is the maximum value this can take, which isn't very useful in this
  7710. implementation since it's just the maximum C `unsigned int' value.
  7711. File: g77.info,  Node: Tan Intrinsic,  Next: TanH Intrinsic,  Prev: System_Clock Intrinsic,  Up: Table of Intrinsic Functions
  7712. Tan Intrinsic
  7713. .............
  7714.      Tan(X)
  7715. Tan: `REAL' function, the `KIND=' value of the type being that of
  7716. argument X.
  7717. X: `REAL'; scalar; INTENT(IN).
  7718. Intrinsic groups: (standard FORTRAN 77).
  7719. Description:
  7720.    Returns the tangent of X, an angle measured in radians.
  7721.    *Note ATan Intrinsic::, for the inverse of this function.
  7722. File: g77.info,  Node: TanH Intrinsic,  Next: Time Intrinsic (UNIX),  Prev: Tan Intrinsic,  Up: Table of Intrinsic Functions
  7723. TanH Intrinsic
  7724. ..............
  7725.      TanH(X)
  7726. TanH: `REAL' function, the `KIND=' value of the type being that of
  7727. argument X.
  7728. X: `REAL'; scalar; INTENT(IN).
  7729. Intrinsic groups: (standard FORTRAN 77).
  7730. Description:
  7731.    Returns the hyperbolic tangent of X.
  7732. File: g77.info,  Node: Time Intrinsic (UNIX),  Next: Time8 Intrinsic,  Prev: TanH Intrinsic,  Up: Table of Intrinsic Functions
  7733. Time Intrinsic (UNIX)
  7734. .....................
  7735.      Time()
  7736. Time: `INTEGER(KIND=1)' function.
  7737. Intrinsic groups: `unix'.
  7738. Description:
  7739.    Returns the current time encoded as an integer (in the manner of the
  7740. UNIX function `time(3)').  This value is suitable for passing to
  7741. `CTIME', `GMTIME', and `LTIME'.
  7742.    This intrinsic is not fully portable, such as to systems with 32-bit
  7743. `INTEGER' types but supporting times wider than 32 bits.  *Note Time8
  7744. Intrinsic::, for information on a similar intrinsic that might be
  7745. portable to more GNU Fortran implementations, though to fewer Fortran
  7746. compilers.
  7747.    For information on other intrinsics with the same name: *Note Time
  7748. Intrinsic (VXT)::.
  7749. File: g77.info,  Node: Time8 Intrinsic,  Next: Tiny Intrinsic,  Prev: Time Intrinsic (UNIX),  Up: Table of Intrinsic Functions
  7750. Time8 Intrinsic
  7751. ...............
  7752.      Time8()
  7753. Time8: `INTEGER(KIND=2)' function.
  7754. Intrinsic groups: `unix'.
  7755. Description:
  7756.    Returns the current time encoded as a long integer (in the manner of
  7757. the UNIX function `time(3)').  This value is suitable for passing to
  7758. `CTIME', `GMTIME', and `LTIME'.
  7759.    No Fortran implementations other than GNU Fortran are known to
  7760. support this intrinsic at the time of this writing.  *Note Time
  7761. Intrinsic (UNIX)::, for information on a similar intrinsic that might
  7762. be portable to more Fortran compilers, though to fewer GNU Fortran
  7763. implementations.
  7764. File: g77.info,  Node: Tiny Intrinsic,  Next: Transfer Intrinsic,  Prev: Time8 Intrinsic,  Up: Table of Intrinsic Functions
  7765. Tiny Intrinsic
  7766. ..............
  7767.    This intrinsic is not yet implemented.  The name is, however,
  7768. reserved as an intrinsic.  Use `EXTERNAL Tiny' to use this name for an
  7769. external procedure.
  7770. File: g77.info,  Node: Transfer Intrinsic,  Next: Transpose Intrinsic,  Prev: Tiny Intrinsic,  Up: Table of Intrinsic Functions
  7771. Transfer Intrinsic
  7772. ..................
  7773.    This intrinsic is not yet implemented.  The name is, however,
  7774. reserved as an intrinsic.  Use `EXTERNAL Transfer' to use this name for
  7775. an external procedure.
  7776. File: g77.info,  Node: Transpose Intrinsic,  Next: Trim Intrinsic,  Prev: Transfer Intrinsic,  Up: Table of Intrinsic Functions
  7777. Transpose Intrinsic
  7778. ...................
  7779.    This intrinsic is not yet implemented.  The name is, however,
  7780. reserved as an intrinsic.  Use `EXTERNAL Transpose' to use this name
  7781. for an external procedure.
  7782. File: g77.info,  Node: Trim Intrinsic,  Next: TtyNam Intrinsic (subroutine),  Prev: Transpose Intrinsic,  Up: Table of Intrinsic Functions
  7783. Trim Intrinsic
  7784. ..............
  7785.    This intrinsic is not yet implemented.  The name is, however,
  7786. reserved as an intrinsic.  Use `EXTERNAL Trim' to use this name for an
  7787. external procedure.
  7788. File: g77.info,  Node: TtyNam Intrinsic (subroutine),  Next: TtyNam Intrinsic (function),  Prev: Trim Intrinsic,  Up: Table of Intrinsic Functions
  7789. TtyNam Intrinsic (subroutine)
  7790. .............................
  7791.      CALL TtyNam(NAME, UNIT)
  7792. NAME: `CHARACTER'; scalar; INTENT(OUT).
  7793. UNIT: `INTEGER'; scalar; INTENT(IN).
  7794. Intrinsic groups: `unix'.
  7795. Description:
  7796.    Sets NAME to the name of the terminal device open on logical unit
  7797. UNIT or a blank string if UNIT is not connected to a terminal.
  7798.    Some non-GNU implementations of Fortran provide this intrinsic as
  7799. only a function, not as a subroutine.
  7800.    For information on other intrinsics with the same name: *Note TtyNam
  7801. Intrinsic (function)::.
  7802. File: g77.info,  Node: TtyNam Intrinsic (function),  Next: UBound Intrinsic,  Prev: TtyNam Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7803. TtyNam Intrinsic (function)
  7804. ...........................
  7805.      TtyNam(UNIT)
  7806. TtyNam: `CHARACTER*(*)' function.
  7807. UNIT: `INTEGER'; scalar; INTENT(IN).
  7808. Intrinsic groups: `unix'.
  7809. Description:
  7810.    Returns the name of the terminal device open on logical unit UNIT or
  7811. a blank string if UNIT is not connected to a terminal.
  7812.    For information on other intrinsics with the same name: *Note TtyNam
  7813. Intrinsic (subroutine)::.
  7814. File: g77.info,  Node: UBound Intrinsic,  Next: UMask Intrinsic (subroutine),  Prev: TtyNam Intrinsic (function),  Up: Table of Intrinsic Functions
  7815. UBound Intrinsic
  7816. ................
  7817.    This intrinsic is not yet implemented.  The name is, however,
  7818. reserved as an intrinsic.  Use `EXTERNAL UBound' to use this name for an
  7819. external procedure.
  7820. File: g77.info,  Node: UMask Intrinsic (subroutine),  Next: Unlink Intrinsic (subroutine),  Prev: UBound Intrinsic,  Up: Table of Intrinsic Functions
  7821. UMask Intrinsic (subroutine)
  7822. ............................
  7823.      CALL UMask(MASK, OLD)
  7824. MASK: `INTEGER'; scalar; INTENT(IN).
  7825. OLD: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  7826. Intrinsic groups: `unix'.
  7827. Description:
  7828.    Sets the file creation mask to MASK and returns the old value in
  7829. argument OLD if it is supplied.  See `umask(2)'.
  7830.    Some non-GNU implementations of Fortran provide this intrinsic as
  7831. only a function, not as a subroutine.
  7832.    For information on other intrinsics with the same name: *Note UMask
  7833. Intrinsic (function)::.
  7834. File: g77.info,  Node: Unlink Intrinsic (subroutine),  Next: Unpack Intrinsic,  Prev: UMask Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7835. Unlink Intrinsic (subroutine)
  7836. .............................
  7837.      CALL Unlink(FILE, STATUS)
  7838. FILE: `CHARACTER'; scalar; INTENT(IN).
  7839. STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT).
  7840. Intrinsic groups: `unix'.
  7841. Description:
  7842.    Unlink the file FILE.  A null character (`CHAR(0)') marks the end of
  7843. the name in FILE--otherwise, trailing blanks in FILE are ignored.  If
  7844. the STATUS argument is supplied, it contains 0 on success or a non-zero
  7845. error code upon return.  See `unlink(2)'.
  7846.    Some non-GNU implementations of Fortran provide this intrinsic as
  7847. only a function, not as a subroutine, or do not support the (optional)
  7848. STATUS argument.
  7849.    For information on other intrinsics with the same name: *Note Unlink
  7850. Intrinsic (function)::.
  7851. File: g77.info,  Node: Unpack Intrinsic,  Next: Verify Intrinsic,  Prev: Unlink Intrinsic (subroutine),  Up: Table of Intrinsic Functions
  7852. Unpack Intrinsic
  7853. ................
  7854.    This intrinsic is not yet implemented.  The name is, however,
  7855. reserved as an intrinsic.  Use `EXTERNAL Unpack' to use this name for an
  7856. external procedure.
  7857. File: g77.info,  Node: Verify Intrinsic,  Next: XOr Intrinsic,  Prev: Unpack Intrinsic,  Up: Table of Intrinsic Functions
  7858. Verify Intrinsic
  7859. ................
  7860.    This intrinsic is not yet implemented.  The name is, however,
  7861. reserved as an intrinsic.  Use `EXTERNAL Verify' to use this name for an
  7862. external procedure.
  7863. File: g77.info,  Node: XOr Intrinsic,  Next: ZAbs Intrinsic,  Prev: Verify Intrinsic,  Up: Table of Intrinsic Functions
  7864. XOr Intrinsic
  7865. .............
  7866.      XOr(I, J)
  7867. XOr: `INTEGER' or `LOGICAL' function, the exact type being the result
  7868. of cross-promoting the types of all the arguments.
  7869. I: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
  7870. J: `INTEGER' or `LOGICAL'; scalar; INTENT(IN).
  7871. Intrinsic groups: `f2c'.
  7872. Description:
  7873.    Returns value resulting from boolean exclusive-OR of pair of bits in
  7874. each of I and J.
  7875. File: g77.info,  Node: ZAbs Intrinsic,  Next: ZCos Intrinsic,  Prev: XOr Intrinsic,  Up: Table of Intrinsic Functions
  7876. ZAbs Intrinsic
  7877. ..............
  7878.      ZAbs(A)
  7879. ZAbs: `REAL(KIND=2)' function.
  7880. A: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  7881. Intrinsic groups: `f2c'.
  7882. Description:
  7883.    Archaic form of `ABS()' that is specific to one type for A.  *Note
  7884. Abs Intrinsic::.
  7885. File: g77.info,  Node: ZCos Intrinsic,  Next: ZExp Intrinsic,  Prev: ZAbs Intrinsic,  Up: Table of Intrinsic Functions
  7886. ZCos Intrinsic
  7887. ..............
  7888.      ZCos(X)
  7889. ZCos: `COMPLEX(KIND=2)' function.
  7890. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  7891. Intrinsic groups: `f2c'.
  7892. Description:
  7893.    Archaic form of `COS()' that is specific to one type for X.  *Note
  7894. Cos Intrinsic::.
  7895. File: g77.info,  Node: ZExp Intrinsic,  Next: ZLog Intrinsic,  Prev: ZCos Intrinsic,  Up: Table of Intrinsic Functions
  7896. ZExp Intrinsic
  7897. ..............
  7898.      ZExp(X)
  7899. ZExp: `COMPLEX(KIND=2)' function.
  7900. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  7901. Intrinsic groups: `f2c'.
  7902. Description:
  7903.    Archaic form of `EXP()' that is specific to one type for X.  *Note
  7904. Exp Intrinsic::.
  7905. File: g77.info,  Node: ZLog Intrinsic,  Next: ZSin Intrinsic,  Prev: ZExp Intrinsic,  Up: Table of Intrinsic Functions
  7906. ZLog Intrinsic
  7907. ..............
  7908.      ZLog(X)
  7909. ZLog: `COMPLEX(KIND=2)' function.
  7910. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  7911. Intrinsic groups: `f2c'.
  7912. Description:
  7913.    Archaic form of `LOG()' that is specific to one type for X.  *Note
  7914. Log Intrinsic::.
  7915. File: g77.info,  Node: ZSin Intrinsic,  Next: ZSqRt Intrinsic,  Prev: ZLog Intrinsic,  Up: Table of Intrinsic Functions
  7916. ZSin Intrinsic
  7917. ..............
  7918.      ZSin(X)
  7919. ZSin: `COMPLEX(KIND=2)' function.
  7920. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  7921. Intrinsic groups: `f2c'.
  7922. Description:
  7923.    Archaic form of `SIN()' that is specific to one type for X.  *Note
  7924. Sin Intrinsic::.
  7925. File: g77.info,  Node: ZSqRt Intrinsic,  Prev: ZSin Intrinsic,  Up: Table of Intrinsic Functions
  7926. ZSqRt Intrinsic
  7927. ...............
  7928.      ZSqRt(X)
  7929. ZSqRt: `COMPLEX(KIND=2)' function.
  7930. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  7931. Intrinsic groups: `f2c'.
  7932. Description:
  7933.    Archaic form of `SQRT()' that is specific to one type for X.  *Note
  7934. SqRt Intrinsic::.
  7935. File: g77.info,  Node: Scope and Classes of Names,  Prev: Functions and Subroutines,  Up: Language
  7936. Scope and Classes of Symbolic Names
  7937. ===================================
  7938.    (The following information augments or overrides the information in
  7939. Chapter 18 of ANSI X3.9-1978 FORTRAN 77 in specifying the GNU Fortran
  7940. language.  Chapter 18 of that document otherwise serves as the basis
  7941. for the relevant aspects of GNU Fortran.)
  7942. * Menu:
  7943. * Underscores in Symbol Names::
  7944. File: g77.info,  Node: Underscores in Symbol Names,  Up: Scope and Classes of Names
  7945. Underscores in Symbol Names
  7946. ---------------------------
  7947.    Underscores (`_') are accepted in symbol names after the first
  7948. character (which must be a letter).
  7949. File: g77.info,  Node: Other Dialects,  Next: Other Compilers,  Prev: Compiler,  Up: Top
  7950. Other Dialects
  7951. **************
  7952.    GNU Fortran supports a variety of features that are not considered
  7953. part of the GNU Fortran language itself, but are representative of
  7954. various dialects of Fortran that `g77' supports in whole or in part.
  7955.    Any of the features listed below might be disallowed by `g77' unless
  7956. some command-line option is specified.  Currently, some of the features
  7957. are accepted using the default invocation of `g77', but that might
  7958. change in the future.
  7959.    *Note: This portion of the documentation definitely needs a lot of
  7960. work!*
  7961. * Menu:
  7962. * Source Form::       Details of fixed-form and free-form source.
  7963. * Trailing Comment::  Use of `/*' to start a comment.
  7964. * Debug Line::        Use of `D' in column 1.
  7965. * Dollar Signs::      Use of `$' in symbolic names.
  7966. * Case Sensitivity::  Uppercase and lowercase in source files.
  7967. * VXT Fortran::       ...versus the GNU Fortran language.
  7968. * Fortran 90::        ...versus the GNU Fortran language.
  7969. * Pedantic Compilation::  Enforcing the standard.
  7970. * Distensions::       Misfeatures supported by GNU Fortran.
  7971. File: g77.info,  Node: Source Form,  Next: Trailing Comment,  Up: Other Dialects
  7972. Source Form
  7973. ===========
  7974.    GNU Fortran accepts programs written in either fixed form or free
  7975. form.
  7976.    Fixed form corresponds to ANSI FORTRAN 77 (plus popular extensions,
  7977. such as allowing tabs) and Fortran 90's fixed form.
  7978.    Free form corresponds to Fortran 90's free form (though possibly not
  7979. entirely up-to-date, and without complaining about some things that for
  7980. which Fortran 90 requires diagnostics, such as the spaces in the
  7981. constant in `R = 3 . 1').
  7982.    The way a Fortran compiler views source files depends entirely on the
  7983. implementation choices made for the compiler, since those choices are
  7984. explicitly left to the implementation by the published Fortran
  7985. standards.  GNU Fortran currently tries to be somewhat like a few
  7986. popular compilers (`f2c', Digital ("DEC") Fortran, and so on), though a
  7987. cleaner default definition along with more flexibility offered by
  7988. command-line options is likely to be offered in version 0.6.
  7989.    This section describes how `g77' interprets source lines.
  7990. * Menu:
  7991. * Carriage Returns::  Carriage returns ignored.
  7992. * Tabs::              Tabs converted to spaces.
  7993. * Short Lines::       Short lines padded with spaces (fixed-form only).
  7994. * Long Lines::        Long lines truncated.
  7995. * Ampersands::        Special Continuation Lines.
  7996. File: g77.info,  Node: Carriage Returns,  Next: Tabs,  Up: Source Form
  7997. Carriage Returns
  7998. ----------------
  7999.    Carriage returns (`\r') in source lines are ignored.  This is
  8000. somewhat different from `f2c', which seems to treat them as spaces
  8001. outside character/Hollerith constants, and encodes them as `\r' inside
  8002. such constants.
  8003. File: g77.info,  Node: Tabs,  Next: Short Lines,  Prev: Carriage Returns,  Up: Source Form
  8004.    A source line with a <TAB> character anywhere in it is treated as
  8005. entirely significant--however long it is--instead of ending in column
  8006. 72 (for fixed-form source) or 132 (for free-form source).  This also is
  8007. different from `f2c', which encodes tabs as `\t' (the ASCII <TAB>
  8008. character) inside character and Hollerith constants, but nevertheless
  8009. seems to treat the column position as if it had been affected by the
  8010. canonical tab positioning.
  8011.    `g77' effectively translates tabs to the appropriate number of
  8012. spaces (a la the default for the UNIX `expand' command) before doing
  8013. any other processing, other than (currently) noting whether a tab was
  8014. found on a line and using this information to decide how to interpret
  8015. the length of the line and continued constants.
  8016.    Note that this default behavior probably will change for version 0.6,
  8017. when it will presumably be available via a command-line option.  The
  8018. default as of version 0.6 is planned to be a "pure visual" model, where
  8019. tabs are immediately converted to spaces and otherwise have no effect,
  8020. so the way a typical user sees source lines produces a consistent
  8021. result no matter how the spacing in those source lines is actually
  8022. implemented via tabs, spaces, and trailing tabs/spaces before newline.
  8023. Command-line options are likely to be added to specify whether all or
  8024. just-tabbed lines are to be extended to 132 or full input-line length,
  8025. and perhaps even an option will be added to specify the truncated-line
  8026. behavior to which some Digital compilers default (and which affects the
  8027. way continued character/Hollerith constants are interpreted).
  8028. File: g77.info,  Node: Short Lines,  Next: Long Lines,  Prev: Tabs,  Up: Source Form
  8029. Short Lines
  8030. -----------
  8031.    Source lines shorter than the applicable fixed-form length are
  8032. treated as if they were padded with spaces to that length.  (None of
  8033. this is relevant to source files written in free form.)
  8034.    This affects only continued character and Hollerith constants, and
  8035. is a different interpretation than provided by some other popular
  8036. compilers (although a bit more consistent with the traditional
  8037. punched-card basis of Fortran and the way the Fortran standard
  8038. expressed fixed source form).
  8039.    `g77' might someday offer an option to warn about cases where
  8040. differences might be seen as a result of this treatment, and perhaps an
  8041. option to specify the alternate behavior as well.
  8042.    Note that this padding cannot apply to lines that are effectively of
  8043. infinite length--such lines are specified using command-line options
  8044. like `-ffixed-line-length-none', for example.
  8045. File: g77.info,  Node: Long Lines,  Next: Ampersands,  Prev: Short Lines,  Up: Source Form
  8046. Long Lines
  8047. ----------
  8048.    Source lines longer than the applicable length are truncated to that
  8049. length.  Currently, `g77' does not warn if the truncated characters are
  8050. not spaces, to accommodate existing code written for systems that
  8051. treated truncated text as commentary (especially in columns 73 through
  8052.    *Note Options Controlling Fortran Dialect: Fortran Dialect Options,
  8053. for information on the `-ffixed-line-length-N' option, which can be
  8054. used to set the line length applicable to fixed-form source files.
  8055. File: g77.info,  Node: Ampersands,  Prev: Long Lines,  Up: Source Form
  8056. Ampersand Continuation Line
  8057. ---------------------------
  8058.    A `&' in column 1 of fixed-form source denotes an arbitrary-length
  8059. continuation line, imitating the behavior of `f2c'.
  8060. File: g77.info,  Node: Trailing Comment,  Next: Debug Line,  Prev: Source Form,  Up: Other Dialects
  8061. Trailing Comment
  8062. ================
  8063.    `g77' supports use of `/*' to start a trailing comment.  In the GNU
  8064. Fortran language, `!' is used for this purpose.
  8065.    `/*' is not in the GNU Fortran language because the use of `/*' in a
  8066. program might suggest to some readers that a block, not trailing,
  8067. comment is started (and thus ended by `*/', not end of line), since
  8068. that is the meaning of `/*' in C.
  8069.    Also, such readers might think they can use `//' to start a trailing
  8070. comment as an alternative to `/*', but `//' already denotes
  8071. concatenation, and such a "comment" might actually result in a program
  8072. that compiles without error (though it would likely behave incorrectly).
  8073. File: g77.info,  Node: Debug Line,  Next: Dollar Signs,  Prev: Trailing Comment,  Up: Other Dialects
  8074. Debug Line
  8075. ==========
  8076.    Use of `D' or `d' as the first character (column 1) of a source line
  8077. denotes a debug line.
  8078.    In turn, a debug line is treated as either a comment line or a
  8079. normal line, depending on whether debug lines are enabled.
  8080.    When treated as a comment line, a line beginning with `D' or `d' is
  8081. treated as if it the first character was `C' or `c', respectively.
  8082. When treated as a normal line, such a line is treated as if the first
  8083. character was <SPC> (space).
  8084.    (Currently, `g77' provides no means for treating debug lines as
  8085. normal lines.)
  8086. File: g77.info,  Node: Dollar Signs,  Next: Case Sensitivity,  Prev: Debug Line,  Up: Other Dialects
  8087. Dollar Signs in Symbol Names
  8088. ============================
  8089.    Dollar signs (`$') are allowed in symbol names (after the first
  8090. character) when the `-fdollar-ok' option is specified.
  8091. File: g77.info,  Node: Case Sensitivity,  Next: VXT Fortran,  Prev: Dollar Signs,  Up: Other Dialects
  8092. Case Sensitivity
  8093. ================
  8094.    GNU Fortran offers the programmer way too much flexibility in
  8095. deciding how source files are to be treated vis-a-vis uppercase and
  8096. lowercase characters.  There are 66 useful settings that affect case
  8097. sensitivity, plus 10 settings that are nearly useless, with the
  8098. remaining 116 settings being either redundant or useless.
  8099.    None of these settings have any effect on the contents of comments
  8100. (the text after a `c' or `C' in Column 1, for example) or of character
  8101. or Hollerith constants.  Note that things like the `E' in the statement
  8102. `CALL FOO(3.2E10)' and the `TO' in `ASSIGN 10 TO LAB' are considered
  8103. built-in keywords, and so are affected by these settings.
  8104.    Low-level switches are identified in this section as follows:
  8105.      A Source Case Conversion:
  8106.           0 Preserve (see Note 1)
  8107.           1 Convert to Upper Case
  8108.           2 Convert to Lower Case
  8109.      B Built-in Keyword Matching:
  8110.           0 Match Any Case (per-character basis)
  8111.           1 Match Upper Case Only
  8112.           2 Match Lower Case Only
  8113.           3 Match InitialCaps Only (see tables for spellings)
  8114.      C Built-in Intrinsic Matching:
  8115.           0 Match Any Case (per-character basis)
  8116.           1 Match Upper Case Only
  8117.           2 Match Lower Case Only
  8118.           3 Match InitialCaps Only (see tables for spellings)
  8119.      D User-defined Symbol Possibilities (warnings only):
  8120.           0 Allow Any Case (per-character basis)
  8121.           1 Allow Upper Case Only
  8122.           2 Allow Lower Case Only
  8123.           3 Allow InitialCaps Only (see Note 2)
  8124.    Note 1: `g77' eventually will support `NAMELIST' in a manner that is
  8125. consistent with these source switches--in the sense that input will be
  8126. expected to meet the same requirements as source code in terms of
  8127. matching symbol names and keywords (for the exponent letters).
  8128.    Currently, however, `NAMELIST' is supported by `libf2c', which
  8129. uppercases `NAMELIST' input and symbol names for matching.  This means
  8130. not only that `NAMELIST' output currently shows symbol (and keyword)
  8131. names in uppercase even if lower-case source conversion (option A2) is
  8132. selected, but that `NAMELIST' cannot be adequately supported when
  8133. source case preservation (option A0) is selected.
  8134.    If A0 is selected, a warning message will be output for each
  8135. `NAMELIST' statement to this effect.  The behavior of the program is
  8136. undefined at run time if two or more symbol names appear in a given
  8137. `NAMELIST' such that the names are identical when converted to upper
  8138. case (e.g. `NAMELIST /X/ VAR, Var, var').  For complete and total
  8139. elegance, perhaps there should be a warning when option A2 is selected,
  8140. since the output of NAMELIST is currently in uppercase but will someday
  8141. be lowercase (when a `libg77' is written), but that seems to be
  8142. overkill for a product in beta test.
  8143.    Note 2: Rules for InitialCaps names are:
  8144.    - Must be a single uppercase letter, *or*
  8145.    - Must start with an uppercase letter and contain at least one
  8146.      lowercase letter.
  8147.    So `A', `Ab', `ABc', `AbC', and `Abc' are valid InitialCaps names,
  8148. but `AB', `A2', and `ABC' are not.  Note that most, but not all,
  8149. built-in names meet these requirements--the exceptions are some of the
  8150. two-letter format specifiers, such as `BN' and `BZ'.
  8151.    Here are the names of the corresponding command-line options:
  8152.      A0: -fsource-case-preserve
  8153.      A1: -fsource-case-upper
  8154.      A2: -fsource-case-lower
  8155.      
  8156.      B0: -fmatch-case-any
  8157.      B1: -fmatch-case-upper
  8158.      B2: -fmatch-case-lower
  8159.      B3: -fmatch-case-initcap
  8160.      
  8161.      C0: -fintrin-case-any
  8162.      C1: -fintrin-case-upper
  8163.      C2: -fintrin-case-lower
  8164.      C3: -fintrin-case-initcap
  8165.      
  8166.      D0: -fsymbol-case-any
  8167.      D1: -fsymbol-case-upper
  8168.      D2: -fsymbol-case-lower
  8169.      D3: -fsymbol-case-initcap
  8170.    Useful combinations of the above settings, along with abbreviated
  8171. option names that set some of these combinations all at once:
  8172.       1: A0--  B0---  C0---  D0---    -fcase-preserve
  8173.       2: A0--  B0---  C0---  D-1--
  8174.       3: A0--  B0---  C0---  D--2-
  8175.       4: A0--  B0---  C0---  D---3
  8176.       5: A0--  B0---  C-1--  D0---
  8177.       6: A0--  B0---  C-1--  D-1--
  8178.       7: A0--  B0---  C-1--  D--2-
  8179.       8: A0--  B0---  C-1--  D---3
  8180.       9: A0--  B0---  C--2-  D0---
  8181.      10: A0--  B0---  C--2-  D-1--
  8182.      11: A0--  B0---  C--2-  D--2-
  8183.      12: A0--  B0---  C--2-  D---3
  8184.      13: A0--  B0---  C---3  D0---
  8185.      14: A0--  B0---  C---3  D-1--
  8186.      15: A0--  B0---  C---3  D--2-
  8187.      16: A0--  B0---  C---3  D---3
  8188.      17: A0--  B-1--  C0---  D0---
  8189.      18: A0--  B-1--  C0---  D-1--
  8190.      19: A0--  B-1--  C0---  D--2-
  8191.      20: A0--  B-1--  C0---  D---3
  8192.      21: A0--  B-1--  C-1--  D0---
  8193.      22: A0--  B-1--  C-1--  D-1--    -fcase-strict-upper
  8194.      23: A0--  B-1--  C-1--  D--2-
  8195.      24: A0--  B-1--  C-1--  D---3
  8196.      25: A0--  B-1--  C--2-  D0---
  8197.      26: A0--  B-1--  C--2-  D-1--
  8198.      27: A0--  B-1--  C--2-  D--2-
  8199.      28: A0--  B-1--  C--2-  D---3
  8200.      29: A0--  B-1--  C---3  D0---
  8201.      30: A0--  B-1--  C---3  D-1--
  8202.      31: A0--  B-1--  C---3  D--2-
  8203.      32: A0--  B-1--  C---3  D---3
  8204.      33: A0--  B--2-  C0---  D0---
  8205.      34: A0--  B--2-  C0---  D-1--
  8206.      35: A0--  B--2-  C0---  D--2-
  8207.      36: A0--  B--2-  C0---  D---3
  8208.      37: A0--  B--2-  C-1--  D0---
  8209.      38: A0--  B--2-  C-1--  D-1--
  8210.      39: A0--  B--2-  C-1--  D--2-
  8211.      40: A0--  B--2-  C-1--  D---3
  8212.      41: A0--  B--2-  C--2-  D0---
  8213.      42: A0--  B--2-  C--2-  D-1--
  8214.      43: A0--  B--2-  C--2-  D--2-    -fcase-strict-lower
  8215.      44: A0--  B--2-  C--2-  D---3
  8216.      45: A0--  B--2-  C---3  D0---
  8217.      46: A0--  B--2-  C---3  D-1--
  8218.      47: A0--  B--2-  C---3  D--2-
  8219.      48: A0--  B--2-  C---3  D---3
  8220.      49: A0--  B---3  C0---  D0---
  8221.      50: A0--  B---3  C0---  D-1--
  8222.      51: A0--  B---3  C0---  D--2-
  8223.      52: A0--  B---3  C0---  D---3
  8224.      53: A0--  B---3  C-1--  D0---
  8225.      54: A0--  B---3  C-1--  D-1--
  8226.      55: A0--  B---3  C-1--  D--2-
  8227.      56: A0--  B---3  C-1--  D---3
  8228.      57: A0--  B---3  C--2-  D0---
  8229.      58: A0--  B---3  C--2-  D-1--
  8230.      59: A0--  B---3  C--2-  D--2-
  8231.      60: A0--  B---3  C--2-  D---3
  8232.      61: A0--  B---3  C---3  D0---
  8233.      62: A0--  B---3  C---3  D-1--
  8234.      63: A0--  B---3  C---3  D--2-
  8235.      64: A0--  B---3  C---3  D---3    -fcase-initcap
  8236.      65: A-1-  B01--  C01--  D01--    -fcase-upper
  8237.      66: A--2  B0-2-  C0-2-  D0-2-    -fcase-lower
  8238.    Number 22 is the "strict" ANSI FORTRAN 77 model wherein all input
  8239. (except comments, character constants, and Hollerith strings) must be
  8240. entered in uppercase.  Use `-fcase-strict-upper' to specify this
  8241. combination.
  8242.    Number 43 is like Number 22 except all input must be lowercase.  Use
  8243. `-fcase-strict-lower' to specify this combination.
  8244.    Number 65 is the "classic" ANSI FORTRAN 77 model as implemented on
  8245. many non-UNIX machines whereby all the source is translated to
  8246. uppercase.  Use `-fcase-upper' to specify this combination.
  8247.    Number 66 is the "canonical" UNIX model whereby all the source is
  8248. translated to lowercase.  Use `-fcase-lower' to specify this
  8249. combination.
  8250.    There are a few nearly useless combinations:
  8251.      67: A-1-  B01--  C01--  D--2-
  8252.      68: A-1-  B01--  C01--  D---3
  8253.      69: A-1-  B01--  C--23  D01--
  8254.      70: A-1-  B01--  C--23  D--2-
  8255.      71: A-1-  B01--  C--23  D---3
  8256.      72: A--2  B01--  C0-2-  D-1--
  8257.      73: A--2  B01--  C0-2-  D---3
  8258.      74: A--2  B01--  C-1-3  D0-2-
  8259.      75: A--2  B01--  C-1-3  D-1--
  8260.      76: A--2  B01--  C-1-3  D---3
  8261.    The above allow some programs to be compiled but with restrictions
  8262. that make most useful programs impossible: Numbers 67 and 72 warn about
  8263. *any* user-defined symbol names (such as `SUBROUTINE FOO'); Numbers 68
  8264. and 73 warn about any user-defined symbol names longer than one
  8265. character that don't have at least one non-alphabetic character after
  8266. the first; Numbers 69 and 74 disallow any references to intrinsics; and
  8267. Numbers 70, 71, 75, and 76 are combinations of the restrictions in
  8268. 67+69, 68+69, 72+74, and 73+74, respectively.
  8269.    All redundant combinations are shown in the above tables anyplace
  8270. where more than one setting is shown for a low-level switch.  For
  8271. example, `B0-2-' means either setting 0 or 2 is valid for switch B.
  8272. The "proper" setting in such a case is the one that copies the setting
  8273. of switch A--any other setting might slightly reduce the speed of the
  8274. compiler, though possibly to an unmeasurable extent.
  8275.    All remaining combinations are useless in that they prevent
  8276. successful compilation of non-null source files (source files with
  8277. something other than comments).
  8278. File: g77.info,  Node: VXT Fortran,  Next: Fortran 90,  Prev: Case Sensitivity,  Up: Other Dialects
  8279. VXT Fortran
  8280. ===========
  8281.    `g77' supports certain constructs that have different meanings in
  8282. VXT Fortran than they do in the GNU Fortran language.
  8283.    Generally, this manual uses the invented term VXT Fortran to refer
  8284. VAX FORTRAN (circa v4).  That compiler offered many popular features,
  8285. though not necessarily those that are specific to the VAX processor
  8286. architecture, the VMS operating system, or Digital Equipment
  8287. Corporation's Fortran product line.  (VAX and VMS probably are
  8288. trademarks of Digital Equipment Corporation.)
  8289.    An extension offered by a Digital Fortran product that also is
  8290. offered by several other Fortran products for different kinds of
  8291. systems is probably going to be considered for inclusion in `g77'
  8292. someday, and is considered a VXT Fortran feature.
  8293.    The `-fvxt' option generally specifies that, where the meaning of a
  8294. construct is ambiguous (means one thing in GNU Fortran and another in
  8295. VXT Fortran), the VXT Fortran meaning is to be assumed.
  8296. * Menu:
  8297. * Double Quote Meaning::  `"2000' as octal constant.
  8298. * Exclamation Point::     `!' in column 6.
  8299. File: g77.info,  Node: Double Quote Meaning,  Next: Exclamation Point,  Up: VXT Fortran
  8300. Meaning of Double Quote
  8301. -----------------------
  8302.    `g77' treats double-quote (`"') as beginning an octal constant of
  8303. `INTEGER(KIND=1)' type when the `-fvxt' option is specified.  The form
  8304. of this octal constant is
  8305.      "OCTAL-DIGITS
  8306. where OCTAL-DIGITS is a nonempty string of characters in the set
  8307. `01234567'.
  8308.    For example, the `-fvxt' option permits this:
  8309.      PRINT *, "20
  8310.      END
  8311. The above program would print the value `16'.
  8312.    *Note Integer Type::, for information on the preferred construct for
  8313. integer constants specified using GNU Fortran's octal notation.
  8314.    (In the GNU Fortran language, the double-quote character (`"')
  8315. delimits a character constant just as does apostrophe (`'').  There is
  8316. no way to allow both constructs in the general case, since statements
  8317. like `PRINT *,"2000 !comment?"' would be ambiguous.)
  8318. File: g77.info,  Node: Exclamation Point,  Prev: Double Quote Meaning,  Up: VXT Fortran
  8319. Meaning of Exclamation Point in Column 6
  8320. ----------------------------------------
  8321.    `g77' treats an exclamation point (`!') in column 6 of a fixed-form
  8322. source file as a continuation character rather than as the beginning of
  8323. a comment (as it does in any other column) when the `-fvxt' option is
  8324. specified.
  8325.    The following program, when run, prints a message indicating whether
  8326. it is interpreted according to GNU Fortran (and Fortran 90) rules or
  8327. VXT Fortran rules:
  8328.      C234567  (This line begins in column 1.)
  8329.            I = 0
  8330.           !1
  8331.            IF (I.EQ.0) PRINT *, ' I am a VXT Fortran program'
  8332.            IF (I.EQ.1) PRINT *, ' I am a Fortran 90 program'
  8333.            IF (I.LT.0 .OR. I.GT.1) PRINT *, ' I am a HAL 9000 computer'
  8334.            END
  8335.    (In the GNU Fortran and Fortran 90 languages, exclamation point is a
  8336. valid character and, unlike space (<SPC>) or zero (`0'), marks a line
  8337. as a continuation line when it appears in column 6.)
  8338. File: g77.info,  Node: Fortran 90,  Next: Pedantic Compilation,  Prev: VXT Fortran,  Up: Other Dialects
  8339. Fortran 90
  8340. ==========
  8341.    The GNU Fortran language includes a number of features that are part
  8342. of Fortran 90, even when the `-ff90' option is not specified.  The
  8343. features enabled by `-ff90' are intended to be those that, when `-ff90'
  8344. is not specified, would have another meaning to `g77'--usually meaning
  8345. something invalid in the GNU Fortran language.
  8346.    So, the purpose of `-ff90' is not to specify whether `g77' is to
  8347. gratuitously reject Fortran 90 constructs.  The `-pedantic' option
  8348. specified with `-fno-f90' is intended to do that, although its
  8349. implementation is certainly incomplete at this point.
  8350.    When `-ff90' is specified:
  8351.    * The type of `REAL(EXPR)' and `AIMAG(EXPR)', where EXPR is
  8352.      `COMPLEX' type, is the same type as the real part of EXPR.
  8353.      For example, assuming `Z' is type `COMPLEX(KIND=2)', `REAL(Z)'
  8354.      would return a value of type `REAL(KIND=2)', not of type
  8355.      `REAL(KIND=1)', since `-ff90' is specified.
  8356. File: g77.info,  Node: Pedantic Compilation,  Next: Distensions,  Prev: Fortran 90,  Up: Other Dialects
  8357. Pedantic Compilation
  8358. ====================
  8359.    The `-fpedantic' command-line option specifies that `g77' is to warn
  8360. about code that is not standard-conforming.  This is useful for finding
  8361. some extensions `g77' accepts that other compilers might not accept.
  8362. (Note that the `-pedantic' and `-pedantic-errors' options always imply
  8363. `-fpedantic'.)
  8364.    With `-fno-f90' in force, ANSI FORTRAN 77 is used as the standard
  8365. for conforming code.  With `-ff90' in force, Fortran 90 is used.
  8366.    The constructs for which `g77' issues diagnostics when `-fpedantic'
  8367. and `-fno-f90' are in force are:
  8368.    * Automatic arrays, as in
  8369.           SUBROUTINE X(N)
  8370.           REAL A(N)
  8371.           ...
  8372.      where `A' is not listed in any `ENTRY' statement, and thus is not
  8373.      a dummy argument.
  8374.    * The commas in `READ (5), I' and `WRITE (10), J'.
  8375.      These commas are disallowed by FORTRAN 77, but, while strictly
  8376.      superfluous, are syntactically elegant, especially given that
  8377.      commas are required in statements such as `READ 99, I' and `PRINT
  8378.      *, J'.  Many compilers permit the superfluous commas for this
  8379.      reason.
  8380.    * `DOUBLE COMPLEX', either explicitly or implicitly.
  8381.      An explicit use of this type is via a `DOUBLE COMPLEX' or
  8382.      `IMPLICIT DOUBLE COMPLEX' statement, for examples.
  8383.      An example of an implicit use is the expression `C*D', where `C'
  8384.      is `COMPLEX(KIND=1)' and `D' is `DOUBLE PRECISION'.  This
  8385.      expression is prohibited by ANSI FORTRAN 77 because the rules of
  8386.      promotion would suggest that it produce a `DOUBLE COMPLEX'
  8387.      result--a type not provided for by that standard.
  8388.    * Automatic conversion of numeric expressions to `INTEGER(KIND=1)'
  8389.      in contexts such as:
  8390.         - Array-reference indexes.
  8391.         - Alternate-return values.
  8392.         - Computed `GOTO'.
  8393.         - `FORMAT' run-time expressions (not yet supported).
  8394.         - Dimension lists in specification statements.
  8395.         - Numbers for I/O statements (such as `READ (UNIT=3.2), I')
  8396.         - Sizes of `CHARACTER' entities in specification statements.
  8397.         - Kind types in specification entities (a Fortran 90 feature).
  8398.         - Initial, terminal, and incrementation parameters for
  8399.           implied-`DO' constructs in `DATA' statements.
  8400.    * Automatic conversion of `LOGICAL' expressions to `INTEGER' in
  8401.      contexts such as arithmetic `IF' (where `COMPLEX' expressions are
  8402.      disallowed anyway).
  8403.    * Zero-size array dimensions, as in:
  8404.           INTEGER I(10,20,4:2)
  8405.    * Zero-length `CHARACTER' entities, as in:
  8406.           PRINT *, ''
  8407.    * Substring operators applied to character constants and named
  8408.      constants, as in:
  8409.           PRINT *, 'hello'(3:5)
  8410.    * Null arguments passed to statement function, as in:
  8411.           PRINT *, FOO(,3)
  8412.    * Disagreement among program units regarding whether a given `COMMON'
  8413.      area is `SAVE'd (for targets where program units in a single source
  8414.      file are "glued" together as they typically are for UNIX
  8415.      development environments).
  8416.    * Disagreement among program units regarding the size of a named
  8417.      `COMMON' block.
  8418.    * Specification statements following first `DATA' statement.
  8419.      (In the GNU Fortran language, `DATA I/1/' may be followed by
  8420.      `INTEGER J', but not `INTEGER I'.  The `-fpedantic' option
  8421.      disallows both of these.)
  8422.    * Semicolon as statement separator, as in:
  8423.           CALL FOO; CALL BAR
  8424.    * Use of `&' in column 1 of fixed-form source (to indicate
  8425.      continuation).
  8426.    * Use of `CHARACTER' constants to initialize numeric entities, and
  8427.      vice versa.
  8428.    * Expressions having two arithmetic operators in a row, such as
  8429.      `X*-Y'.
  8430.    If `-fpedantic' is specified along with `-ff90', the following
  8431. constructs result in diagnostics:
  8432.    * Use of semicolon as a statement separator on a line that has an
  8433.      `INCLUDE' directive.
  8434. File: g77.info,  Node: Distensions,  Prev: Pedantic Compilation,  Up: Other Dialects
  8435. Distensions
  8436. ===========
  8437.    The `-fugly-*' command-line options determine whether certain
  8438. features supported by VAX FORTRAN and other such compilers, but
  8439. considered too ugly to be in code that can be changed to use safer
  8440. and/or more portable constructs, are accepted.  These are humorously
  8441. referred to as "distensions", extensions that just plain look ugly in
  8442. the harsh light of day.
  8443.    *Note:* The `-fugly' option, which currently serves as shorthand to
  8444. enable all of the distensions below, is likely to be removed in a
  8445. future version of `g77'.  That's because it's likely new distensions
  8446. will be added that conflict with existing ones in terms of assigning
  8447. meaning to a given chunk of code.  (Also, it's pretty clear that users
  8448. should not use `-fugly' as shorthand when the next release of `g77'
  8449. might add a distension to that that causes their existing code, when
  8450. recompiled, to behave differently--perhaps even fail to compile or run
  8451. correctly.)
  8452. * Menu:
  8453. * Ugly Implicit Argument Conversion::  Disabled via `-fno-ugly-args'.
  8454. * Ugly Assumed-Size Arrays::           Enabled via `-fugly-assumed'.
  8455. * Ugly Null Arguments::                Enabled via `-fugly-comma'.
  8456. * Ugly Complex Part Extraction::       Enabled via `-fugly-complex'.
  8457. * Ugly Conversion of Initializers::    Disabled via `-fno-ugly-init'.
  8458. * Ugly Integer Conversions::           Enabled via `-fugly-logint'.
  8459. * Ugly Assigned Labels::               Enabled via `-fugly-assign'.
  8460. File: g77.info,  Node: Ugly Implicit Argument Conversion,  Next: Ugly Assumed-Size Arrays,  Up: Distensions
  8461. Implicit Argument Conversion
  8462. ----------------------------
  8463.    The `-fno-ugly-args' option disables passing typeless and Hollerith
  8464. constants as actual arguments in procedure invocations.  For example:
  8465.      CALL FOO(4HABCD)
  8466.      CALL BAR('123'O)
  8467. These constructs can be too easily used to create non-portable code,
  8468. but are not considered as "ugly" as others.  Further, they are widely
  8469. used in existing Fortran source code in ways that often are quite
  8470. portable.  Therefore, they are enabled by default.
  8471. File: g77.info,  Node: Ugly Assumed-Size Arrays,  Next: Ugly Null Arguments,  Prev: Ugly Implicit Argument Conversion,  Up: Distensions
  8472. Ugly Assumed-Size Arrays
  8473. ------------------------
  8474.    The `-fugly-assumed' option enables the treatment of any array with
  8475. a final dimension specified as `1' as an assumed-size array, as if `*'
  8476. had been specified instead.
  8477.    For example, `DIMENSION X(1)' is treated as if it had read
  8478. `DIMENSION X(*)' if `X' is listed as a dummy argument in a preceding
  8479. `SUBROUTINE', `FUNCTION', or `ENTRY' statement in the same program unit.
  8480.    Use an explicit lower bound to avoid this interpretation.  For
  8481. example, `DIMENSION X(1:1)' is never treated as if it had read
  8482. `DIMENSION X(*)' or `DIMENSION X(1:*)'.  Nor is `DIMENSION X(2-1)'
  8483. affected by this option, since that kind of expression is unlikely to
  8484. have been intended to designate an assumed-size array.
  8485.    This option is used to prevent warnings being issued about apparent
  8486. out-of-bounds reference such as `X(2) = 99'.
  8487.    It also prevents the array from being used in contexts that disallow
  8488. assumed-size arrays, such as `PRINT *,X'.  In such cases, a diagnostic
  8489. is generated and the source file is not compiled.
  8490.    The construct affected by this option is used only in old code that
  8491. pre-exists the widespread acceptance of adjustable and assumed-size
  8492. arrays in the Fortran community.
  8493.    *Note:* This option does not affect how `DIMENSION X(1)' is treated
  8494. if `X' is listed as a dummy argument only *after* the `DIMENSION'
  8495. statement (presumably in an `ENTRY' statement).  For example,
  8496. `-fugly-assumed' has no effect on the following program unit:
  8497.      SUBROUTINE X
  8498.      REAL A(1)
  8499.      RETURN
  8500.      ENTRY Y(A)
  8501.      PRINT *, A
  8502.      END
  8503. File: g77.info,  Node: Ugly Complex Part Extraction,  Next: Ugly Conversion of Initializers,  Prev: Ugly Null Arguments,  Up: Distensions
  8504. Ugly Complex Part Extraction
  8505. ----------------------------
  8506.    The `-fugly-complex' option enables use of the `REAL()' and `AIMAG()'
  8507. intrinsics with arguments that are `COMPLEX' types other than
  8508. `COMPLEX(KIND=1)'.
  8509.    With `-ff90' in effect, these intrinsics return the unconverted real
  8510. and imaginary parts (respectively) of their argument.
  8511.    With `-fno-f90' in effect, these intrinsics convert the real and
  8512. imaginary parts to `REAL(KIND=1)', and return the result of that
  8513. conversion.
  8514.    Due to this ambiguity, the GNU Fortran language defines these
  8515. constructs as invalid, except in the specific case where they are
  8516. entirely and solely passed as an argument to an invocation of the
  8517. `REAL()' intrinsic.  For example,
  8518.      REAL(REAL(Z))
  8519. is permitted even when `Z' is `COMPLEX(KIND=2)' and `-fno-ugly-complex'
  8520. is in effect, because the meaning is clear.
  8521.    `g77' enforces this restriction, unless `-fugly-complex' is
  8522. specified, in which case the appropriate interpretation is chosen and
  8523. no diagnostic is issued.
  8524.    *Note CMPAMBIG::, for information on how to cope with existing code
  8525. with unclear expectations of `REAL()' and `AIMAG()' with
  8526. `COMPLEX(KIND=2)' arguments.
  8527.    *Note RealPart Intrinsic::, for information on the `REALPART()'
  8528. intrinsic, used to extract the real part of a complex expression
  8529. without conversion.  *Note ImagPart Intrinsic::, for information on the
  8530. `IMAGPART()' intrinsic, used to extract the imaginary part of a complex
  8531. expression without conversion.
  8532. File: g77.info,  Node: Ugly Null Arguments,  Next: Ugly Complex Part Extraction,  Prev: Ugly Assumed-Size Arrays,  Up: Distensions
  8533. Ugly Null Arguments
  8534. -------------------
  8535.    The `-fugly-comma' option enables use of a single trailing comma to
  8536. mean "pass an extra trailing null argument" in a list of actual
  8537. arguments to an external procedure, and use of an empty list of
  8538. arguments to such a procedure to mean "pass a single null argument".
  8539.    (Null arguments often are used in some procedure-calling schemes to
  8540. indicate omitted arguments.)
  8541.    For example, `CALL FOO(,)' means "pass two null arguments", rather
  8542. than "pass one null argument".  Also, `CALL BAR()' means "pass one null
  8543. argument".
  8544.    This construct is considered "ugly" because it does not provide an
  8545. elegant way to pass a single null argument that is syntactically
  8546. distinct from passing no arguments.  That is, this construct changes
  8547. the meaning of code that makes no use of the construct.
  8548.    So, with `-fugly-comma' in force, `CALL FOO()' and `I = JFUNC()'
  8549. pass a single null argument, instead of passing no arguments as
  8550. required by the Fortran 77 and 90 standards.
  8551.    *Note:* Many systems gracefully allow the case where a procedure
  8552. call passes one extra argument that the called procedure does not
  8553. expect.
  8554.    So, in practice, there might be no difference in the behavior of a
  8555. program that does `CALL FOO()' or `I = JFUNC()' and is compiled with
  8556. `-fugly-comma' in force as compared to its behavior when compiled with
  8557. the default, `-fno-ugly-comma', in force, assuming `FOO' and `JFUNC' do
  8558. not expect any arguments to be passed.
  8559. File: g77.info,  Node: Ugly Conversion of Initializers,  Next: Ugly Integer Conversions,  Prev: Ugly Complex Part Extraction,  Up: Distensions
  8560. Ugly Conversion of Initializers
  8561. -------------------------------
  8562.    The constructs disabled by `-fno-ugly-init' are:
  8563.    * Use of Hollerith and typeless constants in contexts where they set
  8564.      initial (compile-time) values for variables, arrays, and named
  8565.      constants--that is, `DATA' and `PARAMETER' statements, plus
  8566.      type-declaration statements specifying initial values.
  8567.      Here are some sample initializations that are disabled by the
  8568.      `-fno-ugly-init' option:
  8569.           PARAMETER (VAL='9A304FFE'X)
  8570.           REAL*8 STRING/8HOUTPUT00/
  8571.           DATA VAR/4HABCD/
  8572.    * In the same contexts as above, use of character constants to
  8573.      initialize numeric items and vice versa (one constant per item).
  8574.      Here are more sample initializations that are disabled by the
  8575.      `-fno-ugly-init' option:
  8576.           INTEGER IA
  8577.           CHARACTER BELL
  8578.           PARAMETER (IA = 'A')
  8579.           PARAMETER (BELL = 7)
  8580.    * Use of Hollerith and typeless constants on the right-hand side of
  8581.      assignment statements to numeric types, and in other contexts
  8582.      (such as passing arguments in invocations of intrinsic procedures
  8583.      and statement functions) that are treated as assignments to known
  8584.      types (the dummy arguments, in these cases).
  8585.      Here are sample statements that are disabled by the
  8586.      `-fno-ugly-init' option:
  8587.           IVAR = 4HABCD
  8588.           PRINT *, IMAX0(2HAB, 2HBA)
  8589.    The above constructs, when used, can tend to result in non-portable
  8590. code.  But, they are widely used in existing Fortran code in ways that
  8591. often are quite portable.  Therefore, they are enabled by default.
  8592. File: g77.info,  Node: Ugly Integer Conversions,  Next: Ugly Assigned Labels,  Prev: Ugly Conversion of Initializers,  Up: Distensions
  8593. Ugly Integer Conversions
  8594. ------------------------
  8595.    The constructs enabled via `-fugly-logint' are:
  8596.    * Automatic conversion between `INTEGER' and `LOGICAL' as dictated by
  8597.      context (typically implies nonportable dependencies on how a
  8598.      particular implementation encodes `.TRUE.' and `.FALSE.').
  8599.    * Use of a `LOGICAL' variable in `ASSIGN' and assigned-`GOTO'
  8600.      statements.
  8601.    The above constructs are disabled by default because use of them
  8602. tends to lead to non-portable code.  Even existing Fortran code that
  8603. uses that often turns out to be non-portable, if not outright buggy.
  8604.    Some of this is due to differences among implementations as far as
  8605. how `.TRUE.' and `.FALSE.' are encoded as `INTEGER' values--Fortran
  8606. code that assumes a particular coding is likely to use one of the above
  8607. constructs, and is also likely to not work correctly on implementations
  8608. using different encodings.
  8609.    *Note Equivalence Versus Equality::, for more information.
  8610. File: g77.info,  Node: Ugly Assigned Labels,  Prev: Ugly Integer Conversions,  Up: Distensions
  8611. Ugly Assigned Labels
  8612. --------------------
  8613.    The `-fugly-assign' option forces `g77' to use the same storage for
  8614. assigned labels as it would for a normal assignment to the same
  8615. variable.
  8616.    For example, consider the following code fragment:
  8617.      I = 3
  8618.      ASSIGN 10 TO I
  8619. Normally, for portability and improved diagnostics, `g77' reserves
  8620. distinct storage for a "sibling" of `I', used only for `ASSIGN'
  8621. statements to that variable (along with the corresponding
  8622. assigned-`GOTO' and assigned-`FORMAT'-I/O statements that reference the
  8623. variable).
  8624.    However, some code (that violates the ANSI FORTRAN 77 standard)
  8625. attempts to copy assigned labels among variables involved with `ASSIGN'
  8626. statements, as in:
  8627.      ASSIGN 10 TO I
  8628.      ISTATE(5) = I
  8629.      ...
  8630.      J = ISTATE(ICUR)
  8631.      GOTO J
  8632. Such code doesn't work under `g77' unless `-fugly-assign' is specified
  8633. on the command-line, ensuring that the value of `I' referenced in the
  8634. second line is whatever value `g77' uses to designate statement label
  8635. `10', so the value may be copied into the `ISTATE' array, later
  8636. retrieved into a variable of the appropriate type (`J'), and used as
  8637. the target of an assigned-`GOTO' statement.
  8638.    *Note:* To avoid subtle program bugs, when `-fugly-assign' is
  8639. specified, `g77' requires the type of variables specified in
  8640. assigned-label contexts *must* be the same type returned by `%LOC()'.
  8641. On many systems, this type is effectively the same as
  8642. `INTEGER(KIND=1)', while, on others, it is effectively the same as
  8643. `INTEGER(KIND=2)'.
  8644.    Do *not* depend on `g77' actually writing valid pointers to these
  8645. variables, however.  While `g77' currently chooses that implementation,
  8646. it might be changed in the future.
  8647.    *Note Assigned Statement Labels (ASSIGN and GOTO): Assigned
  8648. Statement Labels, for implementation details on assigned-statement
  8649. labels.
  8650. File: g77.info,  Node: Compiler,  Next: Other Dialects,  Prev: Language,  Up: Top
  8651. The GNU Fortran Compiler
  8652. ************************
  8653.    The GNU Fortran compiler, `g77', supports programs written in the
  8654. GNU Fortran language and in some other dialects of Fortran.
  8655.    Some aspects of how `g77' works are universal regardless of dialect,
  8656. and yet are not properly part of the GNU Fortran language itself.
  8657. These are described below.
  8658.    *Note: This portion of the documentation definitely needs a lot of
  8659. work!*
  8660. * Menu:
  8661. * Compiler Limits::
  8662. * Compiler Types::
  8663. * Compiler Constants::
  8664. * Compiler Intrinsics::
  8665. File: g77.info,  Node: Compiler Limits,  Next: Compiler Types,  Up: Compiler
  8666. Compiler Limits
  8667. ===============
  8668.    `g77', as with GNU tools in general, imposes few arbitrary
  8669. restrictions on lengths of identifiers, number of continuation lines,
  8670. number of external symbols in a program, and so on.
  8671.    For example, some other Fortran compiler have an option (such as
  8672. `-NlX') to increase the limit on the number of continuation lines.
  8673. Also, some Fortran compilation systems have an option (such as `-NxX')
  8674. to increase the limit on the number of external symbols.
  8675.    `g77', `gcc', and GNU `ld' (the GNU linker) have no equivalent
  8676. options, since they do not impose arbitrary limits in these areas.
  8677.    `g77' does currently limit the number of dimensions in an array to
  8678. the same degree as do the Fortran standards--seven (7).  This
  8679. restriction might well be lifted in a future version.
  8680. File: g77.info,  Node: Compiler Types,  Next: Compiler Constants,  Prev: Compiler Limits,  Up: Compiler
  8681. Compiler Types
  8682. ==============
  8683.    Fortran implementations have a fair amount of freedom given them by
  8684. the standard as far as how much storage space is used and how much
  8685. precision and range is offered by the various types such as
  8686. `LOGICAL(KIND=1)', `INTEGER(KIND=1)', `REAL(KIND=1)', `REAL(KIND=2)',
  8687. `COMPLEX(KIND=1)', and `CHARACTER'.  Further, many compilers offer
  8688. so-called `*N' notation, but the interpretation of N varies across
  8689. compilers and target architectures.
  8690.    The standard requires that `LOGICAL(KIND=1)', `INTEGER(KIND=1)', and
  8691. `REAL(KIND=1)' occupy the same amount of storage space, and that
  8692. `COMPLEX(KIND=1)' and `REAL(KIND=2)' take twice as much storage space
  8693. as `REAL(KIND=1)'.  Further, it requires that `COMPLEX(KIND=1)'
  8694. entities be ordered such that when a `COMPLEX(KIND=1)' variable is
  8695. storage-associated (such as via `EQUIVALENCE') with a two-element
  8696. `REAL(KIND=1)' array named `R', `R(1)' corresponds to the real element
  8697. and `R(2)' to the imaginary element of the `COMPLEX(KIND=1)' variable.
  8698.    (Few requirements as to precision or ranges of any of these are
  8699. placed on the implementation, nor is the relationship of storage sizes
  8700. of these types to the `CHARACTER' type specified, by the standard.)
  8701.    `g77' follows the above requirements, warning when compiling a
  8702. program requires placement of items in memory that contradict the
  8703. requirements of the target architecture.  (For example, a program can
  8704. require placement of a `REAL(KIND=2)' on a boundary that is not an even
  8705. multiple of its size, but still an even multiple of the size of a
  8706. `REAL(KIND=1)' variable.  On some target architectures, using the
  8707. canonical mapping of Fortran types to underlying architectural types,
  8708. such placement is prohibited by the machine definition or the
  8709. Application Binary Interface (ABI) in force for the configuration
  8710. defined for building `gcc' and `g77'.  `g77' warns about such
  8711. situations when it encounters them.)
  8712.    `g77' follows consistent rules for configuring the mapping between
  8713. Fortran types, including the `*N' notation, and the underlying
  8714. architectural types as accessed by a similarly-configured applicable
  8715. version of the `gcc' compiler.  These rules offer a widely portable,
  8716. consistent Fortran/C environment, although they might well conflict
  8717. with the expectations of users of Fortran compilers designed and
  8718. written for particular architectures.
  8719.    These rules are based on the configuration that is in force for the
  8720. version of `gcc' built in the same release as `g77' (and which was
  8721. therefore used to build both the `g77' compiler components and the
  8722. `libf2c' run-time library):
  8723. `REAL(KIND=1)'
  8724.      Same as `float' type.
  8725. `REAL(KIND=2)'
  8726.      Same as whatever floating-point type that is twice the size of a
  8727.      `float'--usually, this is a `double'.
  8728. `INTEGER(KIND=1)'
  8729.      Same as an integral type that is occupies the same amount of
  8730.      memory storage as `float'--usually, this is either an `int' or a
  8731.      `long int'.
  8732. `LOGICAL(KIND=1)'
  8733.      Same `gcc' type as `INTEGER(KIND=1)'.
  8734. `INTEGER(KIND=2)'
  8735.      Twice the size, and usually nearly twice the range, as
  8736.      `INTEGER(KIND=1)'--usually, this is either a `long int' or a `long
  8737.      long int'.
  8738. `LOGICAL(KIND=2)'
  8739.      Same `gcc' type as `INTEGER(KIND=2)'.
  8740. `INTEGER(KIND=3)'
  8741.      Same `gcc' type as signed `char'.
  8742. `LOGICAL(KIND=3)'
  8743.      Same `gcc' type as `INTEGER(KIND=3)'.
  8744. `INTEGER(KIND=6)'
  8745.      Twice the size, and usually nearly twice the range, as
  8746.      `INTEGER(KIND=3)'--usually, this is a `short'.
  8747. `LOGICAL(KIND=6)'
  8748.      Same `gcc' type as `INTEGER(KIND=6)'.
  8749. `COMPLEX(KIND=1)'
  8750.      Two `REAL(KIND=1)' scalars (one for the real part followed by one
  8751.      for the imaginary part).
  8752. `COMPLEX(KIND=2)'
  8753.      Two `REAL(KIND=2)' scalars.
  8754. `NUMERIC-TYPE*N'
  8755.      (Where NUMERIC-TYPE is any type other than `CHARACTER'.)  Same as
  8756.      whatever `gcc' type occupies N times the storage space of a `gcc'
  8757.      `char' item.
  8758. `DOUBLE PRECISION'
  8759.      Same as `REAL(KIND=2)'.
  8760. `DOUBLE COMPLEX'
  8761.      Same as `COMPLEX(KIND=2)'.
  8762.    Note that the above are proposed correspondences and might change in
  8763. future versions of `g77'--avoid writing code depending on them.
  8764.    Other types supported by `g77' are derived from gcc types such as
  8765. `char', `short', `int', `long int', `long long int', `long double', and
  8766. so on.  That is, whatever types `gcc' already supports, `g77' supports
  8767. now or probably will support in a future version.  The rules for the
  8768. `NUMERIC-TYPE*N' notation apply to these types, and new values for
  8769. `NUMERIC-TYPE(KIND=N)' will be assigned in a way that encourages
  8770. clarity, consistency, and portability.
  8771. File: g77.info,  Node: Compiler Constants,  Next: Compiler Intrinsics,  Prev: Compiler Types,  Up: Compiler
  8772. Compiler Constants
  8773. ==================
  8774.    `g77' strictly assigns types to *all* constants not documented as
  8775. "typeless" (typeless constants including `'1'Z', for example).  Many
  8776. other Fortran compilers attempt to assign types to typed constants
  8777. based on their context.  This results in hard-to-find bugs, nonportable
  8778. code, and is not in the spirit (though it strictly follows the letter)
  8779. of the 77 and 90 standards.
  8780.    `g77' might offer, in a future release, explicit constructs by which
  8781. a wider variety of typeless constants may be specified, and/or
  8782. user-requested warnings indicating places where `g77' might differ from
  8783. how other compilers assign types to constants.
  8784.    *Note Context-Sensitive Constants::, for more information on this
  8785. issue.
  8786. File: g77.info,  Node: Compiler Intrinsics,  Prev: Compiler Constants,  Up: Compiler
  8787. Compiler Intrinsics
  8788. ===================
  8789.    `g77' offers an ever-widening set of intrinsics.  Currently these
  8790. all are procedures (functions and subroutines).
  8791.    Some of these intrinsics are unimplemented, but their names reserved
  8792. to reduce future problems with existing code as they are implemented.
  8793. Others are implemented as part of the GNU Fortran language, while yet
  8794. others are provided for compatibility with other dialects of Fortran
  8795. but are not part of the GNU Fortran language.
  8796.    To manage these distinctions, `g77' provides intrinsic *groups*, a
  8797. facility that is simply an extension of the intrinsic groups provided
  8798. by the GNU Fortran language.
  8799. * Menu:
  8800. * Intrinsic Groups::  How intrinsics are grouped for easy management.
  8801. * Other Intrinsics::  Intrinsics other than those in the GNU
  8802.                        Fortran language.
  8803. File: g77.info,  Node: Intrinsic Groups,  Next: Other Intrinsics,  Up: Compiler Intrinsics
  8804. Intrinsic Groups
  8805. ----------------
  8806.    A given specific intrinsic belongs in one or more groups.  Each
  8807. group is deleted, disabled, hidden, or enabled by default or a
  8808. command-line option.  The meaning of each term follows.
  8809. Deleted
  8810.      No intrinsics are recognized as belonging to that group.
  8811. Disabled
  8812.      Intrinsics are recognized as belonging to the group, but
  8813.      references to them (other than via the `INTRINSIC' statement) are
  8814.      disallowed through that group.
  8815. Hidden
  8816.      Intrinsics in that group are recognized and enabled (if
  8817.      implemented) *only* if the first mention of the actual name of an
  8818.      intrinsic in a program unit is in an `INTRINSIC' statement.
  8819. Enabled
  8820.      Intrinsics in that group are recognized and enabled (if
  8821.      implemented).
  8822.    The distinction between deleting and disabling a group is illustrated
  8823. by the following example.  Assume intrinsic `FOO' belongs only to group
  8824. `FGR'.  If group `FGR' is deleted, the following program unit will
  8825. successfully compile, because `FOO()' will be seen as a reference to an
  8826. external function named `FOO':
  8827.      PRINT *, FOO()
  8828.      END
  8829. If group `FGR' is disabled, compiling the above program will produce
  8830. diagnostics, either because the `FOO' intrinsic is improperly invoked
  8831. or, if properly invoked, it is not enabled.  To change the above
  8832. program so it references an external function `FOO' instead of the
  8833. disabled `FOO' intrinsic, add the following line to the top:
  8834.      EXTERNAL FOO
  8835. So, deleting a group tells `g77' to pretend as though the intrinsics in
  8836. that group do not exist at all, whereas disabling it tells `g77' to
  8837. recognize them as (disabled) intrinsics in intrinsic-like contexts.
  8838.    Hiding a group is like enabling it, but the intrinsic must be first
  8839. named in an `INTRINSIC' statement to be considered a reference to the
  8840. intrinsic rather than to an external procedure.  This might be the
  8841. "safest" way to treat a new group of intrinsics when compiling old
  8842. code, because it allows the old code to be generally written as if
  8843. those new intrinsics never existed, but to be changed to use them by
  8844. inserting `INTRINSIC' statements in the appropriate places.  However,
  8845. it should be the goal of development to use `EXTERNAL' for all names of
  8846. external procedures that might be intrinsic names.
  8847.    If an intrinsic is in more than one group, it is enabled if any of
  8848. its containing groups are enabled; if not so enabled, it is hidden if
  8849. any of its containing groups are hidden; if not so hidden, it is
  8850. disabled if any of its containing groups are disabled; if not so
  8851. disabled, it is deleted.  This extra complication is necessary because
  8852. some intrinsics, such as `IBITS', belong to more than one group, and
  8853. hence should be enabled if any of the groups to which they belong are
  8854. enabled, and so on.
  8855.    The groups are:
  8856. `badu77'
  8857.      UNIX intrinsics having inappropriate forms (usually functions that
  8858.      have intended side effects).
  8859. `gnu'
  8860.      Intrinsics the GNU Fortran language supports that are extensions to
  8861.      the Fortran standards (77 and 90).
  8862. `f2c'
  8863.      Intrinsics supported by AT&T's `f2c' converter and/or `libf2c'.
  8864. `f90'
  8865.      Fortran 90 intrinsics.
  8866. `mil'
  8867.      MIL-STD 1753 intrinsics (`MVBITS', `IAND', `BTEST', and so on).
  8868. `unix'
  8869.      UNIX intrinsics (`IARGC', `EXIT', `ERF', and so on).
  8870. `vxt'
  8871.      VAX/VMS FORTRAN (current as of v4) intrinsics.
  8872. File: g77.info,  Node: Other Intrinsics,  Prev: Intrinsic Groups,  Up: Compiler Intrinsics
  8873. Other Intrinsics
  8874. ----------------
  8875.    `g77' supports intrinsics other than those in the GNU Fortran
  8876. language proper.  This set of intrinsics is described below.
  8877.    (Note that the empty lines appearing in the menu below are not
  8878. intentional--they result from a bug in the `makeinfo' program.)
  8879. * Menu:
  8880. * ACosD Intrinsic::     (Reserved for future use.)
  8881. * AIMax0 Intrinsic::    (Reserved for future use.)
  8882. * AIMin0 Intrinsic::    (Reserved for future use.)
  8883. * AJMax0 Intrinsic::    (Reserved for future use.)
  8884. * AJMin0 Intrinsic::    (Reserved for future use.)
  8885. * ASinD Intrinsic::     (Reserved for future use.)
  8886. * ATan2D Intrinsic::    (Reserved for future use.)
  8887. * ATanD Intrinsic::     (Reserved for future use.)
  8888. * BITest Intrinsic::    (Reserved for future use.)
  8889. * BJTest Intrinsic::    (Reserved for future use.)
  8890. * CDAbs Intrinsic::     Absolute value (archaic).
  8891. * CDCos Intrinsic::     Cosine (archaic).
  8892. * CDExp Intrinsic::     Exponential (archaic).
  8893. * CDLog Intrinsic::     Natural logarithm (archaic).
  8894. * CDSin Intrinsic::     Sine (archaic).
  8895. * CDSqRt Intrinsic::    Square root (archaic).
  8896. * ChDir Intrinsic (function):: Change directory.
  8897. * ChMod Intrinsic (function):: Change file modes.
  8898. * CosD Intrinsic::      (Reserved for future use.)
  8899. * DACosD Intrinsic::    (Reserved for future use.)
  8900. * DASinD Intrinsic::    (Reserved for future use.)
  8901. * DATan2D Intrinsic::   (Reserved for future use.)
  8902. * DATanD Intrinsic::    (Reserved for future use.)
  8903. * Date Intrinsic::      Get current date as dd-Mon-yy.
  8904. * DbleQ Intrinsic::     (Reserved for future use.)
  8905. * DCmplx Intrinsic::    Construct `COMPLEX(KIND=2)' value.
  8906. * DConjg Intrinsic::    Complex conjugate (archaic).
  8907. * DCosD Intrinsic::     (Reserved for future use.)
  8908. * DFloat Intrinsic::    Conversion (archaic).
  8909. * DFlotI Intrinsic::    (Reserved for future use.)
  8910. * DFlotJ Intrinsic::    (Reserved for future use.)
  8911. * DImag Intrinsic::     Convert/extract imaginary part of complex (archaic).
  8912. * DReal Intrinsic::     Convert value to type `REAL(KIND=2)'.
  8913. * DSinD Intrinsic::     (Reserved for future use.)
  8914. * DTanD Intrinsic::     (Reserved for future use.)
  8915. * Dtime Intrinsic (function):: Get elapsed time since last time.
  8916. * FGet Intrinsic (function):: Read a character from unit 5 stream-wise.
  8917. * FGetC Intrinsic (function):: Read a character stream-wise.
  8918. * FloatI Intrinsic::    (Reserved for future use.)
  8919. * FloatJ Intrinsic::    (Reserved for future use.)
  8920. * FPut Intrinsic (function):: Write a character to unit 6 stream-wise.
  8921. * FPutC Intrinsic (function):: Write a character stream-wise.
  8922. * IDate Intrinsic (VXT):: Get local time info (VAX/VMS).
  8923. * IIAbs Intrinsic::     (Reserved for future use.)
  8924. * IIAnd Intrinsic::     (Reserved for future use.)
  8925. * IIBClr Intrinsic::    (Reserved for future use.)
  8926. * IIBits Intrinsic::    (Reserved for future use.)
  8927. * IIBSet Intrinsic::    (Reserved for future use.)
  8928. * IIDiM Intrinsic::     (Reserved for future use.)
  8929. * IIDInt Intrinsic::    (Reserved for future use.)
  8930. * IIDNnt Intrinsic::    (Reserved for future use.)
  8931. * IIEOr Intrinsic::     (Reserved for future use.)
  8932. * IIFix Intrinsic::     (Reserved for future use.)
  8933. * IInt Intrinsic::      (Reserved for future use.)
  8934. * IIOr Intrinsic::      (Reserved for future use.)
  8935. * IIQint Intrinsic::    (Reserved for future use.)
  8936. * IIQNnt Intrinsic::    (Reserved for future use.)
  8937. * IIShftC Intrinsic::   (Reserved for future use.)
  8938. * IISign Intrinsic::    (Reserved for future use.)
  8939. * IMax0 Intrinsic::     (Reserved for future use.)
  8940. * IMax1 Intrinsic::     (Reserved for future use.)
  8941. * IMin0 Intrinsic::     (Reserved for future use.)
  8942. * IMin1 Intrinsic::     (Reserved for future use.)
  8943. * IMod Intrinsic::      (Reserved for future use.)
  8944. * INInt Intrinsic::     (Reserved for future use.)
  8945. * INot Intrinsic::      (Reserved for future use.)
  8946. * IZExt Intrinsic::     (Reserved for future use.)
  8947. * JIAbs Intrinsic::     (Reserved for future use.)
  8948. * JIAnd Intrinsic::     (Reserved for future use.)
  8949. * JIBClr Intrinsic::    (Reserved for future use.)
  8950. * JIBits Intrinsic::    (Reserved for future use.)
  8951. * JIBSet Intrinsic::    (Reserved for future use.)
  8952. * JIDiM Intrinsic::     (Reserved for future use.)
  8953. * JIDInt Intrinsic::    (Reserved for future use.)
  8954. * JIDNnt Intrinsic::    (Reserved for future use.)
  8955. * JIEOr Intrinsic::     (Reserved for future use.)
  8956. * JIFix Intrinsic::     (Reserved for future use.)
  8957. * JInt Intrinsic::      (Reserved for future use.)
  8958. * JIOr Intrinsic::      (Reserved for future use.)
  8959. * JIQint Intrinsic::    (Reserved for future use.)
  8960. * JIQNnt Intrinsic::    (Reserved for future use.)
  8961. * JIShft Intrinsic::    (Reserved for future use.)
  8962. * JIShftC Intrinsic::   (Reserved for future use.)
  8963. * JISign Intrinsic::    (Reserved for future use.)
  8964. * JMax0 Intrinsic::     (Reserved for future use.)
  8965. * JMax1 Intrinsic::     (Reserved for future use.)
  8966. * JMin0 Intrinsic::     (Reserved for future use.)
  8967. * JMin1 Intrinsic::     (Reserved for future use.)
  8968. * JMod Intrinsic::      (Reserved for future use.)
  8969. * JNInt Intrinsic::     (Reserved for future use.)
  8970. * JNot Intrinsic::      (Reserved for future use.)
  8971. * JZExt Intrinsic::     (Reserved for future use.)
  8972. * Kill Intrinsic (function):: Signal a process.
  8973. * Link Intrinsic (function):: Make hard link in file system.
  8974. * QAbs Intrinsic::      (Reserved for future use.)
  8975. * QACos Intrinsic::     (Reserved for future use.)
  8976. * QACosD Intrinsic::    (Reserved for future use.)
  8977. * QASin Intrinsic::     (Reserved for future use.)
  8978. * QASinD Intrinsic::    (Reserved for future use.)
  8979. * QATan Intrinsic::     (Reserved for future use.)
  8980. * QATan2 Intrinsic::    (Reserved for future use.)
  8981. * QATan2D Intrinsic::   (Reserved for future use.)
  8982. * QATanD Intrinsic::    (Reserved for future use.)
  8983. * QCos Intrinsic::      (Reserved for future use.)
  8984. * QCosD Intrinsic::     (Reserved for future use.)
  8985. * QCosH Intrinsic::     (Reserved for future use.)
  8986. * QDiM Intrinsic::      (Reserved for future use.)
  8987. * QExp Intrinsic::      (Reserved for future use.)
  8988. * QExt Intrinsic::      (Reserved for future use.)
  8989. * QExtD Intrinsic::     (Reserved for future use.)
  8990. * QFloat Intrinsic::    (Reserved for future use.)
  8991. * QInt Intrinsic::      (Reserved for future use.)
  8992. * QLog Intrinsic::      (Reserved for future use.)
  8993. * QLog10 Intrinsic::    (Reserved for future use.)
  8994. * QMax1 Intrinsic::     (Reserved for future use.)
  8995. * QMin1 Intrinsic::     (Reserved for future use.)
  8996. * QMod Intrinsic::      (Reserved for future use.)
  8997. * QNInt Intrinsic::     (Reserved for future use.)
  8998. * QSin Intrinsic::      (Reserved for future use.)
  8999. * QSinD Intrinsic::     (Reserved for future use.)
  9000. * QSinH Intrinsic::     (Reserved for future use.)
  9001. * QSqRt Intrinsic::     (Reserved for future use.)
  9002. * QTan Intrinsic::      (Reserved for future use.)
  9003. * QTanD Intrinsic::     (Reserved for future use.)
  9004. * QTanH Intrinsic::     (Reserved for future use.)
  9005. * Rename Intrinsic (function):: Rename file.
  9006. * Secnds Intrinsic::    Get local time offset since midnight.
  9007. * Signal Intrinsic (function):: Muck with signal handling.
  9008. * SinD Intrinsic::      (Reserved for future use.)
  9009. * SnglQ Intrinsic::     (Reserved for future use.)
  9010. * SymLnk Intrinsic (function):: Make symbolic link in file system.
  9011. * System Intrinsic (function):: Invoke shell (system) command.
  9012. * TanD Intrinsic::      (Reserved for future use.)
  9013. * Time Intrinsic (VXT):: Get the time as a character value.
  9014. * UMask Intrinsic (function):: Set file creation permissions mask.
  9015. * Unlink Intrinsic (function):: Unlink file.
  9016. * ZExt Intrinsic::      (Reserved for future use.)
  9017. File: g77.info,  Node: ACosD Intrinsic,  Next: AIMax0 Intrinsic,  Up: Other Intrinsics
  9018. ACosD Intrinsic
  9019. ...............
  9020.    This intrinsic is not yet implemented.  The name is, however,
  9021. reserved as an intrinsic.  Use `EXTERNAL ACosD' to use this name for an
  9022. external procedure.
  9023. File: g77.info,  Node: AIMax0 Intrinsic,  Next: AIMin0 Intrinsic,  Prev: ACosD Intrinsic,  Up: Other Intrinsics
  9024. AIMax0 Intrinsic
  9025. ................
  9026.    This intrinsic is not yet implemented.  The name is, however,
  9027. reserved as an intrinsic.  Use `EXTERNAL AIMax0' to use this name for an
  9028. external procedure.
  9029. File: g77.info,  Node: AIMin0 Intrinsic,  Next: AJMax0 Intrinsic,  Prev: AIMax0 Intrinsic,  Up: Other Intrinsics
  9030. AIMin0 Intrinsic
  9031. ................
  9032.    This intrinsic is not yet implemented.  The name is, however,
  9033. reserved as an intrinsic.  Use `EXTERNAL AIMin0' to use this name for an
  9034. external procedure.
  9035. File: g77.info,  Node: AJMax0 Intrinsic,  Next: AJMin0 Intrinsic,  Prev: AIMin0 Intrinsic,  Up: Other Intrinsics
  9036. AJMax0 Intrinsic
  9037. ................
  9038.    This intrinsic is not yet implemented.  The name is, however,
  9039. reserved as an intrinsic.  Use `EXTERNAL AJMax0' to use this name for an
  9040. external procedure.
  9041. File: g77.info,  Node: AJMin0 Intrinsic,  Next: ASinD Intrinsic,  Prev: AJMax0 Intrinsic,  Up: Other Intrinsics
  9042. AJMin0 Intrinsic
  9043. ................
  9044.    This intrinsic is not yet implemented.  The name is, however,
  9045. reserved as an intrinsic.  Use `EXTERNAL AJMin0' to use this name for an
  9046. external procedure.
  9047. File: g77.info,  Node: ASinD Intrinsic,  Next: ATan2D Intrinsic,  Prev: AJMin0 Intrinsic,  Up: Other Intrinsics
  9048. ASinD Intrinsic
  9049. ...............
  9050.    This intrinsic is not yet implemented.  The name is, however,
  9051. reserved as an intrinsic.  Use `EXTERNAL ASinD' to use this name for an
  9052. external procedure.
  9053. File: g77.info,  Node: ATan2D Intrinsic,  Next: ATanD Intrinsic,  Prev: ASinD Intrinsic,  Up: Other Intrinsics
  9054. ATan2D Intrinsic
  9055. ................
  9056.    This intrinsic is not yet implemented.  The name is, however,
  9057. reserved as an intrinsic.  Use `EXTERNAL ATan2D' to use this name for an
  9058. external procedure.
  9059. File: g77.info,  Node: ATanD Intrinsic,  Next: BITest Intrinsic,  Prev: ATan2D Intrinsic,  Up: Other Intrinsics
  9060. ATanD Intrinsic
  9061. ...............
  9062.    This intrinsic is not yet implemented.  The name is, however,
  9063. reserved as an intrinsic.  Use `EXTERNAL ATanD' to use this name for an
  9064. external procedure.
  9065. File: g77.info,  Node: BITest Intrinsic,  Next: BJTest Intrinsic,  Prev: ATanD Intrinsic,  Up: Other Intrinsics
  9066. BITest Intrinsic
  9067. ................
  9068.    This intrinsic is not yet implemented.  The name is, however,
  9069. reserved as an intrinsic.  Use `EXTERNAL BITest' to use this name for an
  9070. external procedure.
  9071. File: g77.info,  Node: BJTest Intrinsic,  Next: CDAbs Intrinsic,  Prev: BITest Intrinsic,  Up: Other Intrinsics
  9072. BJTest Intrinsic
  9073. ................
  9074.    This intrinsic is not yet implemented.  The name is, however,
  9075. reserved as an intrinsic.  Use `EXTERNAL BJTest' to use this name for an
  9076. external procedure.
  9077. File: g77.info,  Node: CDAbs Intrinsic,  Next: CDCos Intrinsic,  Prev: BJTest Intrinsic,  Up: Other Intrinsics
  9078. CDAbs Intrinsic
  9079. ...............
  9080.      CDAbs(A)
  9081. CDAbs: `REAL(KIND=2)' function.
  9082. A: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9083. Intrinsic groups: `f2c', `vxt'.
  9084. Description:
  9085.    Archaic form of `ABS()' that is specific to one type for A.  *Note
  9086. Abs Intrinsic::.
  9087. File: g77.info,  Node: CDCos Intrinsic,  Next: CDExp Intrinsic,  Prev: CDAbs Intrinsic,  Up: Other Intrinsics
  9088. CDCos Intrinsic
  9089. ...............
  9090.      CDCos(X)
  9091. CDCos: `COMPLEX(KIND=2)' function.
  9092. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9093. Intrinsic groups: `f2c', `vxt'.
  9094. Description:
  9095.    Archaic form of `COS()' that is specific to one type for X.  *Note
  9096. Cos Intrinsic::.
  9097. File: g77.info,  Node: CDExp Intrinsic,  Next: CDLog Intrinsic,  Prev: CDCos Intrinsic,  Up: Other Intrinsics
  9098. CDExp Intrinsic
  9099. ...............
  9100.      CDExp(X)
  9101. CDExp: `COMPLEX(KIND=2)' function.
  9102. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9103. Intrinsic groups: `f2c', `vxt'.
  9104. Description:
  9105.    Archaic form of `EXP()' that is specific to one type for X.  *Note
  9106. Exp Intrinsic::.
  9107. File: g77.info,  Node: CDLog Intrinsic,  Next: CDSin Intrinsic,  Prev: CDExp Intrinsic,  Up: Other Intrinsics
  9108. CDLog Intrinsic
  9109. ...............
  9110.      CDLog(X)
  9111. CDLog: `COMPLEX(KIND=2)' function.
  9112. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9113. Intrinsic groups: `f2c', `vxt'.
  9114. Description:
  9115.    Archaic form of `LOG()' that is specific to one type for X.  *Note
  9116. Log Intrinsic::.
  9117. File: g77.info,  Node: CDSin Intrinsic,  Next: CDSqRt Intrinsic,  Prev: CDLog Intrinsic,  Up: Other Intrinsics
  9118. CDSin Intrinsic
  9119. ...............
  9120.      CDSin(X)
  9121. CDSin: `COMPLEX(KIND=2)' function.
  9122. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9123. Intrinsic groups: `f2c', `vxt'.
  9124. Description:
  9125.    Archaic form of `SIN()' that is specific to one type for X.  *Note
  9126. Sin Intrinsic::.
  9127. File: g77.info,  Node: CDSqRt Intrinsic,  Next: ChDir Intrinsic (function),  Prev: CDSin Intrinsic,  Up: Other Intrinsics
  9128. CDSqRt Intrinsic
  9129. ................
  9130.      CDSqRt(X)
  9131. CDSqRt: `COMPLEX(KIND=2)' function.
  9132. X: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9133. Intrinsic groups: `f2c', `vxt'.
  9134. Description:
  9135.    Archaic form of `SQRT()' that is specific to one type for X.  *Note
  9136. SqRt Intrinsic::.
  9137. File: g77.info,  Node: ChDir Intrinsic (function),  Next: ChMod Intrinsic (function),  Prev: CDSqRt Intrinsic,  Up: Other Intrinsics
  9138. ChDir Intrinsic (function)
  9139. ..........................
  9140.      ChDir(DIR)
  9141. ChDir: `INTEGER(KIND=1)' function.
  9142. DIR: `CHARACTER'; scalar; INTENT(IN).
  9143. Intrinsic groups: `badu77'.
  9144. Description:
  9145.    Sets the current working directory to be DIR.  Returns 0 on success
  9146. or a non-zero error code.  See `chdir(3)'.
  9147.    *Caution:* Using this routine during I/O to a unit connected with a
  9148. non-absolute file name can cause subsequent I/O on such a unit to fail
  9149. because the I/O library may reopen files by name.
  9150.    Due to the side effects performed by this intrinsic, the function
  9151. form is not recommended.
  9152.    For information on other intrinsics with the same name: *Note ChDir
  9153. Intrinsic (subroutine)::.
  9154. File: g77.info,  Node: ChMod Intrinsic (function),  Next: CosD Intrinsic,  Prev: ChDir Intrinsic (function),  Up: Other Intrinsics
  9155. ChMod Intrinsic (function)
  9156. ..........................
  9157.      ChMod(NAME, MODE)
  9158. ChMod: `INTEGER(KIND=1)' function.
  9159. NAME: `CHARACTER'; scalar; INTENT(IN).
  9160. MODE: `CHARACTER'; scalar; INTENT(IN).
  9161. Intrinsic groups: `badu77'.
  9162. Description:
  9163.    Changes the access mode of file NAME according to the specification
  9164. MODE, which is given in the format of `chmod(1)'.  A null character
  9165. (`CHAR(0)') marks the end of the name in NAME--otherwise, trailing
  9166. blanks in NAME are ignored.  Currently, NAME must not contain the
  9167. single quote character.
  9168.    Returns 0 on success or a non-zero error code otherwise.
  9169.    Note that this currently works by actually invoking `/bin/chmod' (or
  9170. the `chmod' found when the library was configured) and so may fail in
  9171. some circumstances and will, anyway, be slow.
  9172.    Due to the side effects performed by this intrinsic, the function
  9173. form is not recommended.
  9174.    For information on other intrinsics with the same name: *Note ChMod
  9175. Intrinsic (subroutine)::.
  9176. File: g77.info,  Node: CosD Intrinsic,  Next: DACosD Intrinsic,  Prev: ChMod Intrinsic (function),  Up: Other Intrinsics
  9177. CosD Intrinsic
  9178. ..............
  9179.    This intrinsic is not yet implemented.  The name is, however,
  9180. reserved as an intrinsic.  Use `EXTERNAL CosD' to use this name for an
  9181. external procedure.
  9182. File: g77.info,  Node: DACosD Intrinsic,  Next: DASinD Intrinsic,  Prev: CosD Intrinsic,  Up: Other Intrinsics
  9183. DACosD Intrinsic
  9184. ................
  9185.    This intrinsic is not yet implemented.  The name is, however,
  9186. reserved as an intrinsic.  Use `EXTERNAL DACosD' to use this name for an
  9187. external procedure.
  9188. File: g77.info,  Node: DASinD Intrinsic,  Next: DATan2D Intrinsic,  Prev: DACosD Intrinsic,  Up: Other Intrinsics
  9189. DASinD Intrinsic
  9190. ................
  9191.    This intrinsic is not yet implemented.  The name is, however,
  9192. reserved as an intrinsic.  Use `EXTERNAL DASinD' to use this name for an
  9193. external procedure.
  9194. File: g77.info,  Node: DATan2D Intrinsic,  Next: DATanD Intrinsic,  Prev: DASinD Intrinsic,  Up: Other Intrinsics
  9195. DATan2D Intrinsic
  9196. .................
  9197.    This intrinsic is not yet implemented.  The name is, however,
  9198. reserved as an intrinsic.  Use `EXTERNAL DATan2D' to use this name for
  9199. an external procedure.
  9200. File: g77.info,  Node: DATanD Intrinsic,  Next: Date Intrinsic,  Prev: DATan2D Intrinsic,  Up: Other Intrinsics
  9201. DATanD Intrinsic
  9202. ................
  9203.    This intrinsic is not yet implemented.  The name is, however,
  9204. reserved as an intrinsic.  Use `EXTERNAL DATanD' to use this name for an
  9205. external procedure.
  9206. File: g77.info,  Node: Date Intrinsic,  Next: DbleQ Intrinsic,  Prev: DATanD Intrinsic,  Up: Other Intrinsics
  9207. Date Intrinsic
  9208. ..............
  9209.      CALL Date(DATE)
  9210. DATE: `CHARACTER'; scalar; INTENT(OUT).
  9211. Intrinsic groups: `vxt'.
  9212. Description:
  9213.    Returns DATE in the form `DD-MMM-YY', representing the numeric day
  9214. of the month DD, a three-character abbreviation of the month name MMM
  9215. and the last two digits of the year YY, e.g. `25-Nov-96'.
  9216.    This intrinsic is not recommended, due to the year 2000 approaching.
  9217. *Note CTime Intrinsic (subroutine)::, for information on obtaining more
  9218. digits for the current (or any) date.
  9219. File: g77.info,  Node: DbleQ Intrinsic,  Next: DCmplx Intrinsic,  Prev: Date Intrinsic,  Up: Other Intrinsics
  9220. DbleQ Intrinsic
  9221. ...............
  9222.    This intrinsic is not yet implemented.  The name is, however,
  9223. reserved as an intrinsic.  Use `EXTERNAL DbleQ' to use this name for an
  9224. external procedure.
  9225. File: g77.info,  Node: DCmplx Intrinsic,  Next: DConjg Intrinsic,  Prev: DbleQ Intrinsic,  Up: Other Intrinsics
  9226. DCmplx Intrinsic
  9227. ................
  9228.      DCmplx(X, Y)
  9229. DCmplx: `COMPLEX(KIND=2)' function.
  9230. X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  9231. Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX');
  9232. scalar; INTENT(IN).
  9233. Intrinsic groups: `f2c', `vxt'.
  9234. Description:
  9235.    If X is not type `COMPLEX', constructs a value of type
  9236. `COMPLEX(KIND=2)' from the real and imaginary values specified by X and
  9237. Y, respectively.  If Y is omitted, `0D0' is assumed.
  9238.    If X is type `COMPLEX', converts it to type `COMPLEX(KIND=2)'.
  9239.    Although this intrinsic is not standard Fortran, it is a popular
  9240. extension offered by many compilers that support `DOUBLE COMPLEX',
  9241. since it offers the easiest way to convert to `DOUBLE COMPLEX' without
  9242. using Fortran 90 features (such as the `KIND=' argument to the
  9243. `CMPLX()' intrinsic).
  9244.    (`CMPLX(0D0, 0D0)' returns a single-precision `COMPLEX' result, as
  9245. required by standard FORTRAN 77.  That's why so many compilers provide
  9246. `DCMPLX()', since `DCMPLX(0D0, 0D0)' returns a `DOUBLE COMPLEX' result.
  9247. Still, `DCMPLX()' converts even `REAL*16' arguments to their `REAL*8'
  9248. equivalents in most dialects of Fortran, so neither it nor `CMPLX()'
  9249. allow easy construction of arbitrary-precision values without
  9250. potentially forcing a conversion involving extending or reducing
  9251. precision.  GNU Fortran provides such an intrinsic, called `COMPLEX()'.)
  9252.    *Note Complex Intrinsic::, for information on easily constructing a
  9253. `COMPLEX' value of arbitrary precision from `REAL' arguments.
  9254. File: g77.info,  Node: DConjg Intrinsic,  Next: DCosD Intrinsic,  Prev: DCmplx Intrinsic,  Up: Other Intrinsics
  9255. DConjg Intrinsic
  9256. ................
  9257.      DConjg(Z)
  9258. DConjg: `COMPLEX(KIND=2)' function.
  9259. Z: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9260. Intrinsic groups: `f2c', `vxt'.
  9261. Description:
  9262.    Archaic form of `CONJG()' that is specific to one type for Z.  *Note
  9263. Conjg Intrinsic::.
  9264. File: g77.info,  Node: DCosD Intrinsic,  Next: DFloat Intrinsic,  Prev: DConjg Intrinsic,  Up: Other Intrinsics
  9265. DCosD Intrinsic
  9266. ...............
  9267.    This intrinsic is not yet implemented.  The name is, however,
  9268. reserved as an intrinsic.  Use `EXTERNAL DCosD' to use this name for an
  9269. external procedure.
  9270. File: g77.info,  Node: DFloat Intrinsic,  Next: DFlotI Intrinsic,  Prev: DCosD Intrinsic,  Up: Other Intrinsics
  9271. DFloat Intrinsic
  9272. ................
  9273.      DFloat(A)
  9274. DFloat: `REAL(KIND=2)' function.
  9275. A: `INTEGER'; scalar; INTENT(IN).
  9276. Intrinsic groups: `f2c', `vxt'.
  9277. Description:
  9278.    Archaic form of `REAL()' that is specific to one type for A.  *Note
  9279. Real Intrinsic::.
  9280. File: g77.info,  Node: DFlotI Intrinsic,  Next: DFlotJ Intrinsic,  Prev: DFloat Intrinsic,  Up: Other Intrinsics
  9281. DFlotI Intrinsic
  9282. ................
  9283.    This intrinsic is not yet implemented.  The name is, however,
  9284. reserved as an intrinsic.  Use `EXTERNAL DFlotI' to use this name for an
  9285. external procedure.
  9286. File: g77.info,  Node: DFlotJ Intrinsic,  Next: DImag Intrinsic,  Prev: DFlotI Intrinsic,  Up: Other Intrinsics
  9287. DFlotJ Intrinsic
  9288. ................
  9289.    This intrinsic is not yet implemented.  The name is, however,
  9290. reserved as an intrinsic.  Use `EXTERNAL DFlotJ' to use this name for an
  9291. external procedure.
  9292. File: g77.info,  Node: DImag Intrinsic,  Next: DReal Intrinsic,  Prev: DFlotJ Intrinsic,  Up: Other Intrinsics
  9293. DImag Intrinsic
  9294. ...............
  9295.      DImag(Z)
  9296. DImag: `REAL(KIND=2)' function.
  9297. Z: `COMPLEX(KIND=2)'; scalar; INTENT(IN).
  9298. Intrinsic groups: `f2c', `vxt'.
  9299. Description:
  9300.    Archaic form of `AIMAG()' that is specific to one type for Z.  *Note
  9301. AImag Intrinsic::.
  9302. File: g77.info,  Node: DReal Intrinsic,  Next: DSinD Intrinsic,  Prev: DImag Intrinsic,  Up: Other Intrinsics
  9303. DReal Intrinsic
  9304. ...............
  9305.      DReal(A)
  9306. DReal: `REAL(KIND=2)' function.
  9307. A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN).
  9308. Intrinsic groups: `vxt'.
  9309. Description:
  9310.    Converts A to `REAL(KIND=2)'.
  9311.    If A is type `COMPLEX', its real part is converted (if necessary) to
  9312. `REAL(KIND=2)', and its imaginary part is disregarded.
  9313.    Although this intrinsic is not standard Fortran, it is a popular
  9314. extension offered by many compilers that support `DOUBLE COMPLEX',
  9315. since it offers the easiest way to extract the real part of a `DOUBLE
  9316. COMPLEX' value without using the Fortran 90 `REAL()' intrinsic in a way
  9317. that produces a return value inconsistent with the way many FORTRAN 77
  9318. compilers handle `REAL()' of a `DOUBLE COMPLEX' value.
  9319.    *Note RealPart Intrinsic::, for information on a GNU Fortran
  9320. intrinsic that avoids these areas of confusion.
  9321.    *Note Dble Intrinsic::, for information on the standard FORTRAN 77
  9322. replacement for `DREAL()'.
  9323.    *Note REAL() and AIMAG() of Complex::, for more information on this
  9324. issue.
  9325. File: g77.info,  Node: DSinD Intrinsic,  Next: DTanD Intrinsic,  Prev: DReal Intrinsic,  Up: Other Intrinsics
  9326. DSinD Intrinsic
  9327. ...............
  9328.    This intrinsic is not yet implemented.  The name is, however,
  9329. reserved as an intrinsic.  Use `EXTERNAL DSinD' to use this name for an
  9330. external procedure.
  9331. File: g77.info,  Node: DTanD Intrinsic,  Next: Dtime Intrinsic (function),  Prev: DSinD Intrinsic,  Up: Other Intrinsics
  9332. DTanD Intrinsic
  9333. ...............
  9334.    This intrinsic is not yet implemented.  The name is, however,
  9335. reserved as an intrinsic.  Use `EXTERNAL DTanD' to use this name for an
  9336. external procedure.
  9337. File: g77.info,  Node: Dtime Intrinsic (function),  Next: FGet Intrinsic (function),  Prev: DTanD Intrinsic,  Up: Other Intrinsics
  9338. Dtime Intrinsic (function)
  9339. ..........................
  9340.      Dtime(TARRAY)
  9341. Dtime: `REAL(KIND=1)' function.
  9342. TARRAY: `REAL(KIND=1)'; DIMENSION(2); INTENT(OUT).
  9343. Intrinsic groups: `badu77'.
  9344. Description:
  9345.    Initially, return the number of seconds of runtime since the start
  9346. of the process's execution as the function value, and the user and
  9347. system components of this in `TARRAY(1)' and `TARRAY(2)' respectively.
  9348. The functions' value is equal to `TARRAY(1) + TARRAY(2)'.
  9349.    Subsequent invocations of `DTIME()' return values accumulated since
  9350. the previous invocation.
  9351.    Due to the side effects performed by this intrinsic, the function
  9352. form is not recommended.
  9353.    For information on other intrinsics with the same name: *Note Dtime
  9354. Intrinsic (subroutine)::.
  9355. File: g77.info,  Node: FGet Intrinsic (function),  Next: FGetC Intrinsic (function),  Prev: Dtime Intrinsic (function),  Up: Other Intrinsics
  9356. FGet Intrinsic (function)
  9357. .........................
  9358.      FGet(C)
  9359. FGet: `INTEGER(KIND=1)' function.
  9360. C: `CHARACTER'; scalar; INTENT(OUT).
  9361. Intrinsic groups: `badu77'.
  9362. Description:
  9363.    Reads a single character into C in stream mode from unit 5
  9364. (by-passing normal formatted input) using `getc(3)'.  Returns 0 on
  9365. success, -1 on end-of-file, and the error code from `ferror(3)'
  9366. otherwise.
  9367.    Stream I/O should not be mixed with normal record-oriented
  9368. (formatted or unformatted) I/O on the same unit; the results are
  9369. unpredictable.
  9370.    For information on other intrinsics with the same name: *Note FGet
  9371. Intrinsic (subroutine)::.
  9372. File: g77.info,  Node: FGetC Intrinsic (function),  Next: FloatI Intrinsic,  Prev: FGet Intrinsic (function),  Up: Other Intrinsics
  9373. FGetC Intrinsic (function)
  9374. ..........................
  9375.      FGetC(UNIT, C)
  9376. FGetC: `INTEGER(KIND=1)' function.
  9377. UNIT: `INTEGER'; scalar; INTENT(IN).
  9378. C: `CHARACTER'; scalar; INTENT(OUT).
  9379. Intrinsic groups: `badu77'.
  9380. Description:
  9381.    Reads a single character into C in stream mode from unit UNIT
  9382. (by-passing normal formatted output) using `getc(3)'.  Returns 0 on
  9383. success, -1 on end-of-file, and the error code from `ferror(3)'
  9384. otherwise.
  9385.    Stream I/O should not be mixed with normal record-oriented
  9386. (formatted or unformatted) I/O on the same unit; the results are
  9387. unpredictable.
  9388.    For information on other intrinsics with the same name: *Note FGetC
  9389. Intrinsic (subroutine)::.
  9390. File: g77.info,  Node: FloatI Intrinsic,  Next: FloatJ Intrinsic,  Prev: FGetC Intrinsic (function),  Up: Other Intrinsics
  9391. FloatI Intrinsic
  9392. ................
  9393.    This intrinsic is not yet implemented.  The name is, however,
  9394. reserved as an intrinsic.  Use `EXTERNAL FloatI' to use this name for an
  9395. external procedure.
  9396. File: g77.info,  Node: FloatJ Intrinsic,  Next: FPut Intrinsic (function),  Prev: FloatI Intrinsic,  Up: Other Intrinsics
  9397. FloatJ Intrinsic
  9398. ................
  9399.    This intrinsic is not yet implemented.  The name is, however,
  9400. reserved as an intrinsic.  Use `EXTERNAL FloatJ' to use this name for an
  9401. external procedure.
  9402. File: g77.info,  Node: FPut Intrinsic (function),  Next: FPutC Intrinsic (function),  Prev: FloatJ Intrinsic,  Up: Other Intrinsics
  9403. FPut Intrinsic (function)
  9404. .........................
  9405.      FPut(C)
  9406. FPut: `INTEGER(KIND=1)' function.
  9407. C: `CHARACTER'; scalar; INTENT(IN).
  9408. Intrinsic groups: `badu77'.
  9409. Description:
  9410.    Writes the single character C in stream mode to unit 6 (by-passing
  9411. normal formatted output) using `getc(3)'.  Returns 0 on success, the
  9412. error code from `ferror(3)' otherwise.
  9413.    Stream I/O should not be mixed with normal record-oriented
  9414. (formatted or unformatted) I/O on the same unit; the results are
  9415. unpredictable.
  9416.    For information on other intrinsics with the same name: *Note FPut
  9417. Intrinsic (subroutine)::.
  9418. File: g77.info,  Node: FPutC Intrinsic (function),  Next: IDate Intrinsic (VXT),  Prev: FPut Intrinsic (function),  Up: Other Intrinsics
  9419. FPutC Intrinsic (function)
  9420. ..........................
  9421.      FPutC(UNIT, C)
  9422. FPutC: `INTEGER(KIND=1)' function.
  9423. UNIT: `INTEGER'; scalar; INTENT(IN).
  9424. C: `CHARACTER'; scalar; INTENT(IN).
  9425. Intrinsic groups: `badu77'.
  9426. Description:
  9427.    Writes the single character C in stream mode to unit UNIT
  9428. (by-passing normal formatted output) using `putc(3)'.  Returns 0 on
  9429. success, the error code from `ferror(3)' otherwise.
  9430.    Stream I/O should not be mixed with normal record-oriented
  9431. (formatted or unformatted) I/O on the same unit; the results are
  9432. unpredictable.
  9433.    For information on other intrinsics with the same name: *Note FPutC
  9434. Intrinsic (subroutine)::.
  9435. File: g77.info,  Node: IDate Intrinsic (VXT),  Next: IIAbs Intrinsic,  Prev: FPutC Intrinsic (function),  Up: Other Intrinsics
  9436. IDate Intrinsic (VXT)
  9437. .....................
  9438.      CALL IDate(M, D, Y)
  9439. M: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  9440. D: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  9441. Y: `INTEGER(KIND=1)'; scalar; INTENT(OUT).
  9442. Intrinsic groups: `vxt'.
  9443. Description:
  9444.    Returns the numerical values of the current local time.  The month
  9445. (in the range 1-12) is returned in M, the day (in the range 1-7) in D,
  9446. and the year in Y (in the range 0-99).
  9447.    This intrinsic is not recommended, due to the year 2000 approaching.
  9448.    For information on other intrinsics with the same name: *Note IDate
  9449. Intrinsic (UNIX)::.
  9450. File: g77.info,  Node: IIAbs Intrinsic,  Next: IIAnd Intrinsic,  Prev: IDate Intrinsic (VXT),  Up: Other Intrinsics
  9451. IIAbs Intrinsic
  9452. ...............
  9453.    This intrinsic is not yet implemented.  The name is, however,
  9454. reserved as an intrinsic.  Use `EXTERNAL IIAbs' to use this name for an
  9455. external procedure.
  9456. File: g77.info,  Node: IIAnd Intrinsic,  Next: IIBClr Intrinsic,  Prev: IIAbs Intrinsic,  Up: Other Intrinsics
  9457. IIAnd Intrinsic
  9458. ...............
  9459.    This intrinsic is not yet implemented.  The name is, however,
  9460. reserved as an intrinsic.  Use `EXTERNAL IIAnd' to use this name for an
  9461. external procedure.
  9462. File: g77.info,  Node: IIBClr Intrinsic,  Next: IIBits Intrinsic,  Prev: IIAnd Intrinsic,  Up: Other Intrinsics
  9463. IIBClr Intrinsic
  9464. ................
  9465.    This intrinsic is not yet implemented.  The name is, however,
  9466. reserved as an intrinsic.  Use `EXTERNAL IIBClr' to use this name for an
  9467. external procedure.
  9468. File: g77.info,  Node: IIBits Intrinsic,  Next: IIBSet Intrinsic,  Prev: IIBClr Intrinsic,  Up: Other Intrinsics
  9469. IIBits Intrinsic
  9470. ................
  9471.    This intrinsic is not yet implemented.  The name is, however,
  9472. reserved as an intrinsic.  Use `EXTERNAL IIBits' to use this name for an
  9473. external procedure.
  9474. File: g77.info,  Node: IIBSet Intrinsic,  Next: IIDiM Intrinsic,  Prev: IIBits Intrinsic,  Up: Other Intrinsics
  9475. IIBSet Intrinsic
  9476. ................
  9477.    This intrinsic is not yet implemented.  The name is, however,
  9478. reserved as an intrinsic.  Use `EXTERNAL IIBSet' to use this name for an
  9479. external procedure.
  9480. File: g77.info,  Node: IIDiM Intrinsic,  Next: IIDInt Intrinsic,  Prev: IIBSet Intrinsic,  Up: Other Intrinsics
  9481. IIDiM Intrinsic
  9482. ...............
  9483.    This intrinsic is not yet implemented.  The name is, however,
  9484. reserved as an intrinsic.  Use `EXTERNAL IIDiM' to use this name for an
  9485. external procedure.
  9486. File: g77.info,  Node: IIDInt Intrinsic,  Next: IIDNnt Intrinsic,  Prev: IIDiM Intrinsic,  Up: Other Intrinsics
  9487. IIDInt Intrinsic
  9488. ................
  9489.    This intrinsic is not yet implemented.  The name is, however,
  9490. reserved as an intrinsic.  Use `EXTERNAL IIDInt' to use this name for an
  9491. external procedure.
  9492. File: g77.info,  Node: IIDNnt Intrinsic,  Next: IIEOr Intrinsic,  Prev: IIDInt Intrinsic,  Up: Other Intrinsics
  9493. IIDNnt Intrinsic
  9494. ................
  9495.    This intrinsic is not yet implemented.  The name is, however,
  9496. reserved as an intrinsic.  Use `EXTERNAL IIDNnt' to use this name for an
  9497. external procedure.
  9498. File: g77.info,  Node: IIEOr Intrinsic,  Next: IIFix Intrinsic,  Prev: IIDNnt Intrinsic,  Up: Other Intrinsics
  9499. IIEOr Intrinsic
  9500. ...............
  9501.    This intrinsic is not yet implemented.  The name is, however,
  9502. reserved as an intrinsic.  Use `EXTERNAL IIEOr' to use this name for an
  9503. external procedure.
  9504. File: g77.info,  Node: IIFix Intrinsic,  Next: IInt Intrinsic,  Prev: IIEOr Intrinsic,  Up: Other Intrinsics
  9505. IIFix Intrinsic
  9506. ...............
  9507.    This intrinsic is not yet implemented.  The name is, however,
  9508. reserved as an intrinsic.  Use `EXTERNAL IIFix' to use this name for an
  9509. external procedure.
  9510. File: g77.info,  Node: IInt Intrinsic,  Next: IIOr Intrinsic,  Prev: IIFix Intrinsic,  Up: Other Intrinsics
  9511. IInt Intrinsic
  9512. ..............
  9513.    This intrinsic is not yet implemented.  The name is, however,
  9514. reserved as an intrinsic.  Use `EXTERNAL IInt' to use this name for an
  9515. external procedure.
  9516. File: g77.info,  Node: IIOr Intrinsic,  Next: IIQint Intrinsic,  Prev: IInt Intrinsic,  Up: Other Intrinsics
  9517. IIOr Intrinsic
  9518. ..............
  9519.    This intrinsic is not yet implemented.  The name is, however,
  9520. reserved as an intrinsic.  Use `EXTERNAL IIOr' to use this name for an
  9521. external procedure.
  9522. File: g77.info,  Node: IIQint Intrinsic,  Next: IIQNnt Intrinsic,  Prev: IIOr Intrinsic,  Up: Other Intrinsics
  9523. IIQint Intrinsic
  9524. ................
  9525.    This intrinsic is not yet implemented.  The name is, however,
  9526. reserved as an intrinsic.  Use `EXTERNAL IIQint' to use this name for an
  9527. external procedure.
  9528. File: g77.info,  Node: IIQNnt Intrinsic,  Next: IIShftC Intrinsic,  Prev: IIQint Intrinsic,  Up: Other Intrinsics
  9529. IIQNnt Intrinsic
  9530. ................
  9531.    This intrinsic is not yet implemented.  The name is, however,
  9532. reserved as an intrinsic.  Use `EXTERNAL IIQNnt' to use this name for an
  9533. external procedure.
  9534. File: g77.info,  Node: IIShftC Intrinsic,  Next: IISign Intrinsic,  Prev: IIQNnt Intrinsic,  Up: Other Intrinsics
  9535. IIShftC Intrinsic
  9536. .................
  9537.    This intrinsic is not yet implemented.  The name is, however,
  9538. reserved as an intrinsic.  Use `EXTERNAL IIShftC' to use this name for
  9539. an external procedure.
  9540. File: g77.info,  Node: IISign Intrinsic,  Next: IMax0 Intrinsic,  Prev: IIShftC Intrinsic,  Up: Other Intrinsics
  9541. IISign Intrinsic
  9542. ................
  9543.    This intrinsic is not yet implemented.  The name is, however,
  9544. reserved as an intrinsic.  Use `EXTERNAL IISign' to use this name for an
  9545. external procedure.
  9546. File: g77.info,  Node: IMax0 Intrinsic,  Next: IMax1 Intrinsic,  Prev: IISign Intrinsic,  Up: Other Intrinsics
  9547. IMax0 Intrinsic
  9548. ...............
  9549.    This intrinsic is not yet implemented.  The name is, however,
  9550. reserved as an intrinsic.  Use `EXTERNAL IMax0' to use this name for an
  9551. external procedure.
  9552. File: g77.info,  Node: IMax1 Intrinsic,  Next: IMin0 Intrinsic,  Prev: IMax0 Intrinsic,  Up: Other Intrinsics
  9553. IMax1 Intrinsic
  9554. ...............
  9555.    This intrinsic is not yet implemented.  The name is, however,
  9556. reserved as an intrinsic.  Use `EXTERNAL IMax1' to use this name for an
  9557. external procedure.
  9558. File: g77.info,  Node: IMin0 Intrinsic,  Next: IMin1 Intrinsic,  Prev: IMax1 Intrinsic,  Up: Other Intrinsics
  9559. IMin0 Intrinsic
  9560. ...............
  9561.    This intrinsic is not yet implemented.  The name is, however,
  9562. reserved as an intrinsic.  Use `EXTERNAL IMin0' to use this name for an
  9563. external procedure.
  9564. File: g77.info,  Node: IMin1 Intrinsic,  Next: IMod Intrinsic,  Prev: IMin0 Intrinsic,  Up: Other Intrinsics
  9565. IMin1 Intrinsic
  9566. ...............
  9567.    This intrinsic is not yet implemented.  The name is, however,
  9568. reserved as an intrinsic.  Use `EXTERNAL IMin1' to use this name for an
  9569. external procedure.
  9570. File: g77.info,  Node: IMod Intrinsic,  Next: INInt Intrinsic,  Prev: IMin1 Intrinsic,  Up: Other Intrinsics
  9571. IMod Intrinsic
  9572. ..............
  9573.    This intrinsic is not yet implemented.  The name is, however,
  9574. reserved as an intrinsic.  Use `EXTERNAL IMod' to use this name for an
  9575. external procedure.
  9576. File: g77.info,  Node: INInt Intrinsic,  Next: INot Intrinsic,  Prev: IMod Intrinsic,  Up: Other Intrinsics
  9577. INInt Intrinsic
  9578. ...............
  9579.    This intrinsic is not yet implemented.  The name is, however,
  9580. reserved as an intrinsic.  Use `EXTERNAL INInt' to use this name for an
  9581. external procedure.
  9582. File: g77.info,  Node: INot Intrinsic,  Next: IZExt Intrinsic,  Prev: INInt Intrinsic,  Up: Other Intrinsics
  9583. INot Intrinsic
  9584. ..............
  9585.    This intrinsic is not yet implemented.  The name is, however,
  9586. reserved as an intrinsic.  Use `EXTERNAL INot' to use this name for an
  9587. external procedure.
  9588. File: g77.info,  Node: IZExt Intrinsic,  Next: JIAbs Intrinsic,  Prev: INot Intrinsic,  Up: Other Intrinsics
  9589. IZExt Intrinsic
  9590. ...............
  9591.    This intrinsic is not yet implemented.  The name is, however,
  9592. reserved as an intrinsic.  Use `EXTERNAL IZExt' to use this name for an
  9593. external procedure.
  9594. File: g77.info,  Node: JIAbs Intrinsic,  Next: JIAnd Intrinsic,  Prev: IZExt Intrinsic,  Up: Other Intrinsics
  9595. JIAbs Intrinsic
  9596. ...............
  9597.    This intrinsic is not yet implemented.  The name is, however,
  9598. reserved as an intrinsic.  Use `EXTERNAL JIAbs' to use this name for an
  9599. external procedure.
  9600. File: g77.info,  Node: JIAnd Intrinsic,  Next: JIBClr Intrinsic,  Prev: JIAbs Intrinsic,  Up: Other Intrinsics
  9601. JIAnd Intrinsic
  9602. ...............
  9603.    This intrinsic is not yet implemented.  The name is, however,
  9604. reserved as an intrinsic.  Use `EXTERNAL JIAnd' to use this name for an
  9605. external procedure.
  9606. File: g77.info,  Node: JIBClr Intrinsic,  Next: JIBits Intrinsic,  Prev: JIAnd Intrinsic,  Up: Other Intrinsics
  9607. JIBClr Intrinsic
  9608. ................
  9609.    This intrinsic is not yet implemented.  The name is, however,
  9610. reserved as an intrinsic.  Use `EXTERNAL JIBClr' to use this name for an
  9611. external procedure.
  9612. File: g77.info,  Node: JIBits Intrinsic,  Next: JIBSet Intrinsic,  Prev: JIBClr Intrinsic,  Up: Other Intrinsics
  9613. JIBits Intrinsic
  9614. ................
  9615.    This intrinsic is not yet implemented.  The name is, however,
  9616. reserved as an intrinsic.  Use `EXTERNAL JIBits' to use this name for an
  9617. external procedure.
  9618. File: g77.info,  Node: JIBSet Intrinsic,  Next: JIDiM Intrinsic,  Prev: JIBits Intrinsic,  Up: Other Intrinsics
  9619. JIBSet Intrinsic
  9620. ................
  9621.    This intrinsic is not yet implemented.  The name is, however,
  9622. reserved as an intrinsic.  Use `EXTERNAL JIBSet' to use this name for an
  9623. external procedure.
  9624. File: g77.info,  Node: JIDiM Intrinsic,  Next: JIDInt Intrinsic,  Prev: JIBSet Intrinsic,  Up: Other Intrinsics
  9625. JIDiM Intrinsic
  9626. ...............
  9627.    This intrinsic is not yet implemented.  The name is, however,
  9628. reserved as an intrinsic.  Use `EXTERNAL JIDiM' to use this name for an
  9629. external procedure.
  9630. File: g77.info,  Node: JIDInt Intrinsic,  Next: JIDNnt Intrinsic,  Prev: JIDiM Intrinsic,  Up: Other Intrinsics
  9631. JIDInt Intrinsic
  9632. ................
  9633.    This intrinsic is not yet implemented.  The name is, however,
  9634. reserved as an intrinsic.  Use `EXTERNAL JIDInt' to use this name for an
  9635. external procedure.
  9636. File: g77.info,  Node: JIDNnt Intrinsic,  Next: JIEOr Intrinsic,  Prev: JIDInt Intrinsic,  Up: Other Intrinsics
  9637. JIDNnt Intrinsic
  9638. ................
  9639.    This intrinsic is not yet implemented.  The name is, however,
  9640. reserved as an intrinsic.  Use `EXTERNAL JIDNnt' to use this name for an
  9641. external procedure.
  9642. File: g77.info,  Node: JIEOr Intrinsic,  Next: JIFix Intrinsic,  Prev: JIDNnt Intrinsic,  Up: Other Intrinsics
  9643. JIEOr Intrinsic
  9644. ...............
  9645.    This intrinsic is not yet implemented.  The name is, however,
  9646. reserved as an intrinsic.  Use `EXTERNAL JIEOr' to use this name for an
  9647. external procedure.
  9648. File: g77.info,  Node: JIFix Intrinsic,  Next: JInt Intrinsic,  Prev: JIEOr Intrinsic,  Up: Other Intrinsics
  9649. JIFix Intrinsic
  9650. ...............
  9651.    This intrinsic is not yet implemented.  The name is, however,
  9652. reserved as an intrinsic.  Use `EXTERNAL JIFix' to use this name for an
  9653. external procedure.
  9654. File: g77.info,  Node: JInt Intrinsic,  Next: JIOr Intrinsic,  Prev: JIFix Intrinsic,  Up: Other Intrinsics
  9655. JInt Intrinsic
  9656. ..............
  9657.    This intrinsic is not yet implemented.  The name is, however,
  9658. reserved as an intrinsic.  Use `EXTERNAL JInt' to use this name for an
  9659. external procedure.
  9660. File: g77.info,  Node: JIOr Intrinsic,  Next: JIQint Intrinsic,  Prev: JInt Intrinsic,  Up: Other Intrinsics
  9661. JIOr Intrinsic
  9662. ..............
  9663.    This intrinsic is not yet implemented.  The name is, however,
  9664. reserved as an intrinsic.  Use `EXTERNAL JIOr' to use this name for an
  9665. external procedure.
  9666. File: g77.info,  Node: JIQint Intrinsic,  Next: JIQNnt Intrinsic,  Prev: JIOr Intrinsic,  Up: Other Intrinsics
  9667. JIQint Intrinsic
  9668. ................
  9669.    This intrinsic is not yet implemented.  The name is, however,
  9670. reserved as an intrinsic.  Use `EXTERNAL JIQint' to use this name for an
  9671. external procedure.
  9672. File: g77.info,  Node: JIQNnt Intrinsic,  Next: JIShft Intrinsic,  Prev: JIQint Intrinsic,  Up: Other Intrinsics
  9673. JIQNnt Intrinsic
  9674. ................
  9675.    This intrinsic is not yet implemented.  The name is, however,
  9676. reserved as an intrinsic.  Use `EXTERNAL JIQNnt' to use this name for an
  9677. external procedure.
  9678. File: g77.info,  Node: JIShft Intrinsic,  Next: JIShftC Intrinsic,  Prev: JIQNnt Intrinsic,  Up: Other Intrinsics
  9679. JIShft Intrinsic
  9680. ................
  9681.    This intrinsic is not yet implemented.  The name is, however,
  9682. reserved as an intrinsic.  Use `EXTERNAL JIShft' to use this name for an
  9683. external procedure.
  9684. File: g77.info,  Node: JIShftC Intrinsic,  Next: JISign Intrinsic,  Prev: JIShft Intrinsic,  Up: Other Intrinsics
  9685. JIShftC Intrinsic
  9686. .................
  9687.    This intrinsic is not yet implemented.  The name is, however,
  9688. reserved as an intrinsic.  Use `EXTERNAL JIShftC' to use this name for
  9689. an external procedure.
  9690. File: g77.info,  Node: JISign Intrinsic,  Next: JMax0 Intrinsic,  Prev: JIShftC Intrinsic,  Up: Other Intrinsics
  9691. JISign Intrinsic
  9692. ................
  9693.    This intrinsic is not yet implemented.  The name is, however,
  9694. reserved as an intrinsic.  Use `EXTERNAL JISign' to use this name for an
  9695. external procedure.
  9696. File: g77.info,  Node: JMax0 Intrinsic,  Next: JMax1 Intrinsic,  Prev: JISign Intrinsic,  Up: Other Intrinsics
  9697. JMax0 Intrinsic
  9698. ...............
  9699.    This intrinsic is not yet implemented.  The name is, however,
  9700. reserved as an intrinsic.  Use `EXTERNAL JMax0' to use this name for an
  9701. external procedure.
  9702. File: g77.info,  Node: JMax1 Intrinsic,  Next: JMin0 Intrinsic,  Prev: JMax0 Intrinsic,  Up: Other Intrinsics
  9703. JMax1 Intrinsic
  9704. ...............
  9705.    This intrinsic is not yet implemented.  The name is, however,
  9706. reserved as an intrinsic.  Use `EXTERNAL JMax1' to use this name for an
  9707. external procedure.
  9708. File: g77.info,  Node: JMin0 Intrinsic,  Next: JMin1 Intrinsic,  Prev: JMax1 Intrinsic,  Up: Other Intrinsics
  9709. JMin0 Intrinsic
  9710. ...............
  9711.    This intrinsic is not yet implemented.  The name is, however,
  9712. reserved as an intrinsic.  Use `EXTERNAL JMin0' to use this name for an
  9713. external procedure.
  9714. File: g77.info,  Node: JMin1 Intrinsic,  Next: JMod Intrinsic,  Prev: JMin0 Intrinsic,  Up: Other Intrinsics
  9715. JMin1 Intrinsic
  9716. ...............
  9717.    This intrinsic is not yet implemented.  The name is, however,
  9718. reserved as an intrinsic.  Use `EXTERNAL JMin1' to use this name for an
  9719. external procedure.
  9720. File: g77.info,  Node: JMod Intrinsic,  Next: JNInt Intrinsic,  Prev: JMin1 Intrinsic,  Up: Other Intrinsics
  9721. JMod Intrinsic
  9722. ..............
  9723.    This intrinsic is not yet implemented.  The name is, however,
  9724. reserved as an intrinsic.  Use `EXTERNAL JMod' to use this name for an
  9725. external procedure.
  9726. File: g77.info,  Node: JNInt Intrinsic,  Next: JNot Intrinsic,  Prev: JMod Intrinsic,  Up: Other Intrinsics
  9727. JNInt Intrinsic
  9728. ...............
  9729.    This intrinsic is not yet implemented.  The name is, however,
  9730. reserved as an intrinsic.  Use `EXTERNAL JNInt' to use this name for an
  9731. external procedure.
  9732. File: g77.info,  Node: JNot Intrinsic,  Next: JZExt Intrinsic,  Prev: JNInt Intrinsic,  Up: Other Intrinsics
  9733. JNot Intrinsic
  9734. ..............
  9735.    This intrinsic is not yet implemented.  The name is, however,
  9736. reserved as an intrinsic.  Use `EXTERNAL JNot' to use this name for an
  9737. external procedure.
  9738. File: g77.info,  Node: JZExt Intrinsic,  Next: Kill Intrinsic (function),  Prev: JNot Intrinsic,  Up: Other Intrinsics
  9739. JZExt Intrinsic
  9740. ...............
  9741.    This intrinsic is not yet implemented.  The name is, however,
  9742. reserved as an intrinsic.  Use `EXTERNAL JZExt' to use this name for an
  9743. external procedure.
  9744. File: g77.info,  Node: Kill Intrinsic (function),  Next: Link Intrinsic (function),  Prev: JZExt Intrinsic,  Up: Other Intrinsics
  9745. Kill Intrinsic (function)
  9746. .........................
  9747.      Kill(PID, SIGNAL)
  9748. Kill: `INTEGER(KIND=1)' function.
  9749. PID: `INTEGER'; scalar; INTENT(IN).
  9750. SIGNAL: `INTEGER'; scalar; INTENT(IN).
  9751. Intrinsic groups: `badu77'.
  9752. Description:
  9753.    Sends the signal specified by SIGNAL to the process PID.  Returns 0
  9754. on success or a non-zero error code.  See `kill(2)'.
  9755.    Due to the side effects performed by this intrinsic, the function
  9756. form is not recommended.
  9757.    For information on other intrinsics with the same name: *Note Kill
  9758. Intrinsic (subroutine)::.
  9759. File: g77.info,  Node: Link Intrinsic (function),  Next: QAbs Intrinsic,  Prev: Kill Intrinsic (function),  Up: Other Intrinsics
  9760. Link Intrinsic (function)
  9761. .........................
  9762.      Link(PATH1, PATH2)
  9763. Link: `INTEGER(KIND=1)' function.
  9764. PATH1: `CHARACTER'; scalar; INTENT(IN).
  9765. PATH2: `CHARACTER'; scalar; INTENT(IN).
  9766. Intrinsic groups: `badu77'.
  9767. Description:
  9768.    Makes a (hard) link from file PATH1 to PATH2.  A null character
  9769. (`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
  9770. trailing blanks in PATH1 and PATH2 are ignored.  Returns 0 on success
  9771. or a non-zero error code.  See `link(2)'.
  9772.    Due to the side effects performed by this intrinsic, the function
  9773. form is not recommended.
  9774.    For information on other intrinsics with the same name: *Note Link
  9775. Intrinsic (subroutine)::.
  9776. File: g77.info,  Node: QAbs Intrinsic,  Next: QACos Intrinsic,  Prev: Link Intrinsic (function),  Up: Other Intrinsics
  9777. QAbs Intrinsic
  9778. ..............
  9779.    This intrinsic is not yet implemented.  The name is, however,
  9780. reserved as an intrinsic.  Use `EXTERNAL QAbs' to use this name for an
  9781. external procedure.
  9782. File: g77.info,  Node: QACos Intrinsic,  Next: QACosD Intrinsic,  Prev: QAbs Intrinsic,  Up: Other Intrinsics
  9783. QACos Intrinsic
  9784. ...............
  9785.    This intrinsic is not yet implemented.  The name is, however,
  9786. reserved as an intrinsic.  Use `EXTERNAL QACos' to use this name for an
  9787. external procedure.
  9788. File: g77.info,  Node: QACosD Intrinsic,  Next: QASin Intrinsic,  Prev: QACos Intrinsic,  Up: Other Intrinsics
  9789. QACosD Intrinsic
  9790. ................
  9791.    This intrinsic is not yet implemented.  The name is, however,
  9792. reserved as an intrinsic.  Use `EXTERNAL QACosD' to use this name for an
  9793. external procedure.
  9794. File: g77.info,  Node: QASin Intrinsic,  Next: QASinD Intrinsic,  Prev: QACosD Intrinsic,  Up: Other Intrinsics
  9795. QASin Intrinsic
  9796. ...............
  9797.    This intrinsic is not yet implemented.  The name is, however,
  9798. reserved as an intrinsic.  Use `EXTERNAL QASin' to use this name for an
  9799. external procedure.
  9800. File: g77.info,  Node: QASinD Intrinsic,  Next: QATan Intrinsic,  Prev: QASin Intrinsic,  Up: Other Intrinsics
  9801. QASinD Intrinsic
  9802. ................
  9803.    This intrinsic is not yet implemented.  The name is, however,
  9804. reserved as an intrinsic.  Use `EXTERNAL QASinD' to use this name for an
  9805. external procedure.
  9806. File: g77.info,  Node: QATan Intrinsic,  Next: QATan2 Intrinsic,  Prev: QASinD Intrinsic,  Up: Other Intrinsics
  9807. QATan Intrinsic
  9808. ...............
  9809.    This intrinsic is not yet implemented.  The name is, however,
  9810. reserved as an intrinsic.  Use `EXTERNAL QATan' to use this name for an
  9811. external procedure.
  9812. File: g77.info,  Node: QATan2 Intrinsic,  Next: QATan2D Intrinsic,  Prev: QATan Intrinsic,  Up: Other Intrinsics
  9813. QATan2 Intrinsic
  9814. ................
  9815.    This intrinsic is not yet implemented.  The name is, however,
  9816. reserved as an intrinsic.  Use `EXTERNAL QATan2' to use this name for an
  9817. external procedure.
  9818. File: g77.info,  Node: QATan2D Intrinsic,  Next: QATanD Intrinsic,  Prev: QATan2 Intrinsic,  Up: Other Intrinsics
  9819. QATan2D Intrinsic
  9820. .................
  9821.    This intrinsic is not yet implemented.  The name is, however,
  9822. reserved as an intrinsic.  Use `EXTERNAL QATan2D' to use this name for
  9823. an external procedure.
  9824. File: g77.info,  Node: QATanD Intrinsic,  Next: QCos Intrinsic,  Prev: QATan2D Intrinsic,  Up: Other Intrinsics
  9825. QATanD Intrinsic
  9826. ................
  9827.    This intrinsic is not yet implemented.  The name is, however,
  9828. reserved as an intrinsic.  Use `EXTERNAL QATanD' to use this name for an
  9829. external procedure.
  9830. File: g77.info,  Node: QCos Intrinsic,  Next: QCosD Intrinsic,  Prev: QATanD Intrinsic,  Up: Other Intrinsics
  9831. QCos Intrinsic
  9832. ..............
  9833.    This intrinsic is not yet implemented.  The name is, however,
  9834. reserved as an intrinsic.  Use `EXTERNAL QCos' to use this name for an
  9835. external procedure.
  9836. File: g77.info,  Node: QCosD Intrinsic,  Next: QCosH Intrinsic,  Prev: QCos Intrinsic,  Up: Other Intrinsics
  9837. QCosD Intrinsic
  9838. ...............
  9839.    This intrinsic is not yet implemented.  The name is, however,
  9840. reserved as an intrinsic.  Use `EXTERNAL QCosD' to use this name for an
  9841. external procedure.
  9842. File: g77.info,  Node: QCosH Intrinsic,  Next: QDiM Intrinsic,  Prev: QCosD Intrinsic,  Up: Other Intrinsics
  9843. QCosH Intrinsic
  9844. ...............
  9845.    This intrinsic is not yet implemented.  The name is, however,
  9846. reserved as an intrinsic.  Use `EXTERNAL QCosH' to use this name for an
  9847. external procedure.
  9848. File: g77.info,  Node: QDiM Intrinsic,  Next: QExp Intrinsic,  Prev: QCosH Intrinsic,  Up: Other Intrinsics
  9849. QDiM Intrinsic
  9850. ..............
  9851.    This intrinsic is not yet implemented.  The name is, however,
  9852. reserved as an intrinsic.  Use `EXTERNAL QDiM' to use this name for an
  9853. external procedure.
  9854. File: g77.info,  Node: QExp Intrinsic,  Next: QExt Intrinsic,  Prev: QDiM Intrinsic,  Up: Other Intrinsics
  9855. QExp Intrinsic
  9856. ..............
  9857.    This intrinsic is not yet implemented.  The name is, however,
  9858. reserved as an intrinsic.  Use `EXTERNAL QExp' to use this name for an
  9859. external procedure.
  9860. File: g77.info,  Node: QExt Intrinsic,  Next: QExtD Intrinsic,  Prev: QExp Intrinsic,  Up: Other Intrinsics
  9861. QExt Intrinsic
  9862. ..............
  9863.    This intrinsic is not yet implemented.  The name is, however,
  9864. reserved as an intrinsic.  Use `EXTERNAL QExt' to use this name for an
  9865. external procedure.
  9866. File: g77.info,  Node: QExtD Intrinsic,  Next: QFloat Intrinsic,  Prev: QExt Intrinsic,  Up: Other Intrinsics
  9867. QExtD Intrinsic
  9868. ...............
  9869.    This intrinsic is not yet implemented.  The name is, however,
  9870. reserved as an intrinsic.  Use `EXTERNAL QExtD' to use this name for an
  9871. external procedure.
  9872. File: g77.info,  Node: QFloat Intrinsic,  Next: QInt Intrinsic,  Prev: QExtD Intrinsic,  Up: Other Intrinsics
  9873. QFloat Intrinsic
  9874. ................
  9875.    This intrinsic is not yet implemented.  The name is, however,
  9876. reserved as an intrinsic.  Use `EXTERNAL QFloat' to use this name for an
  9877. external procedure.
  9878. File: g77.info,  Node: QInt Intrinsic,  Next: QLog Intrinsic,  Prev: QFloat Intrinsic,  Up: Other Intrinsics
  9879. QInt Intrinsic
  9880. ..............
  9881.    This intrinsic is not yet implemented.  The name is, however,
  9882. reserved as an intrinsic.  Use `EXTERNAL QInt' to use this name for an
  9883. external procedure.
  9884. File: g77.info,  Node: QLog Intrinsic,  Next: QLog10 Intrinsic,  Prev: QInt Intrinsic,  Up: Other Intrinsics
  9885. QLog Intrinsic
  9886. ..............
  9887.    This intrinsic is not yet implemented.  The name is, however,
  9888. reserved as an intrinsic.  Use `EXTERNAL QLog' to use this name for an
  9889. external procedure.
  9890. File: g77.info,  Node: QLog10 Intrinsic,  Next: QMax1 Intrinsic,  Prev: QLog Intrinsic,  Up: Other Intrinsics
  9891. QLog10 Intrinsic
  9892. ................
  9893.    This intrinsic is not yet implemented.  The name is, however,
  9894. reserved as an intrinsic.  Use `EXTERNAL QLog10' to use this name for an
  9895. external procedure.
  9896. File: g77.info,  Node: QMax1 Intrinsic,  Next: QMin1 Intrinsic,  Prev: QLog10 Intrinsic,  Up: Other Intrinsics
  9897. QMax1 Intrinsic
  9898. ...............
  9899.    This intrinsic is not yet implemented.  The name is, however,
  9900. reserved as an intrinsic.  Use `EXTERNAL QMax1' to use this name for an
  9901. external procedure.
  9902. File: g77.info,  Node: QMin1 Intrinsic,  Next: QMod Intrinsic,  Prev: QMax1 Intrinsic,  Up: Other Intrinsics
  9903. QMin1 Intrinsic
  9904. ...............
  9905.    This intrinsic is not yet implemented.  The name is, however,
  9906. reserved as an intrinsic.  Use `EXTERNAL QMin1' to use this name for an
  9907. external procedure.
  9908. File: g77.info,  Node: QMod Intrinsic,  Next: QNInt Intrinsic,  Prev: QMin1 Intrinsic,  Up: Other Intrinsics
  9909. QMod Intrinsic
  9910. ..............
  9911.    This intrinsic is not yet implemented.  The name is, however,
  9912. reserved as an intrinsic.  Use `EXTERNAL QMod' to use this name for an
  9913. external procedure.
  9914. File: g77.info,  Node: QNInt Intrinsic,  Next: QSin Intrinsic,  Prev: QMod Intrinsic,  Up: Other Intrinsics
  9915. QNInt Intrinsic
  9916. ...............
  9917.    This intrinsic is not yet implemented.  The name is, however,
  9918. reserved as an intrinsic.  Use `EXTERNAL QNInt' to use this name for an
  9919. external procedure.
  9920. File: g77.info,  Node: QSin Intrinsic,  Next: QSinD Intrinsic,  Prev: QNInt Intrinsic,  Up: Other Intrinsics
  9921. QSin Intrinsic
  9922. ..............
  9923.    This intrinsic is not yet implemented.  The name is, however,
  9924. reserved as an intrinsic.  Use `EXTERNAL QSin' to use this name for an
  9925. external procedure.
  9926. File: g77.info,  Node: QSinD Intrinsic,  Next: QSinH Intrinsic,  Prev: QSin Intrinsic,  Up: Other Intrinsics
  9927. QSinD Intrinsic
  9928. ...............
  9929.    This intrinsic is not yet implemented.  The name is, however,
  9930. reserved as an intrinsic.  Use `EXTERNAL QSinD' to use this name for an
  9931. external procedure.
  9932. File: g77.info,  Node: QSinH Intrinsic,  Next: QSqRt Intrinsic,  Prev: QSinD Intrinsic,  Up: Other Intrinsics
  9933. QSinH Intrinsic
  9934. ...............
  9935.    This intrinsic is not yet implemented.  The name is, however,
  9936. reserved as an intrinsic.  Use `EXTERNAL QSinH' to use this name for an
  9937. external procedure.
  9938. File: g77.info,  Node: QSqRt Intrinsic,  Next: QTan Intrinsic,  Prev: QSinH Intrinsic,  Up: Other Intrinsics
  9939. QSqRt Intrinsic
  9940. ...............
  9941.    This intrinsic is not yet implemented.  The name is, however,
  9942. reserved as an intrinsic.  Use `EXTERNAL QSqRt' to use this name for an
  9943. external procedure.
  9944. File: g77.info,  Node: QTan Intrinsic,  Next: QTanD Intrinsic,  Prev: QSqRt Intrinsic,  Up: Other Intrinsics
  9945. QTan Intrinsic
  9946. ..............
  9947.    This intrinsic is not yet implemented.  The name is, however,
  9948. reserved as an intrinsic.  Use `EXTERNAL QTan' to use this name for an
  9949. external procedure.
  9950. File: g77.info,  Node: QTanD Intrinsic,  Next: QTanH Intrinsic,  Prev: QTan Intrinsic,  Up: Other Intrinsics
  9951. QTanD Intrinsic
  9952. ...............
  9953.    This intrinsic is not yet implemented.  The name is, however,
  9954. reserved as an intrinsic.  Use `EXTERNAL QTanD' to use this name for an
  9955. external procedure.
  9956. File: g77.info,  Node: QTanH Intrinsic,  Next: Rename Intrinsic (function),  Prev: QTanD Intrinsic,  Up: Other Intrinsics
  9957. QTanH Intrinsic
  9958. ...............
  9959.    This intrinsic is not yet implemented.  The name is, however,
  9960. reserved as an intrinsic.  Use `EXTERNAL QTanH' to use this name for an
  9961. external procedure.
  9962. File: g77.info,  Node: Rename Intrinsic (function),  Next: Secnds Intrinsic,  Prev: QTanH Intrinsic,  Up: Other Intrinsics
  9963. Rename Intrinsic (function)
  9964. ...........................
  9965.      Rename(PATH1, PATH2)
  9966. Rename: `INTEGER(KIND=1)' function.
  9967. PATH1: `CHARACTER'; scalar; INTENT(IN).
  9968. PATH2: `CHARACTER'; scalar; INTENT(IN).
  9969. Intrinsic groups: `badu77'.
  9970. Description:
  9971.    Renames the file PATH1 to PATH2.  A null character (`CHAR(0)') marks
  9972. the end of the names in PATH1 and PATH2--otherwise, trailing blanks in
  9973. PATH1 and PATH2 are ignored.  See `rename(2)'.  Returns 0 on success or
  9974. a non-zero error code.
  9975.    Due to the side effects performed by this intrinsic, the function
  9976. form is not recommended.
  9977.    For information on other intrinsics with the same name: *Note Rename
  9978. Intrinsic (subroutine)::.
  9979. File: g77.info,  Node: Secnds Intrinsic,  Next: Signal Intrinsic (function),  Prev: Rename Intrinsic (function),  Up: Other Intrinsics
  9980. Secnds Intrinsic
  9981. ................
  9982.      Secnds(T)
  9983. Secnds: `REAL(KIND=1)' function.
  9984. T: `REAL(KIND=1)'; scalar; INTENT(IN).
  9985. Intrinsic groups: `vxt'.
  9986. Description:
  9987.    Returns the local time in seconds since midnight minus the value T.
  9988. File: g77.info,  Node: Signal Intrinsic (function),  Next: SinD Intrinsic,  Prev: Secnds Intrinsic,  Up: Other Intrinsics
  9989. Signal Intrinsic (function)
  9990. ...........................
  9991.      Signal(NUMBER, HANDLER)
  9992. Signal: `INTEGER(KIND=7)' function.
  9993. NUMBER: `INTEGER'; scalar; INTENT(IN).
  9994. HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or
  9995. dummy/global `INTEGER(KIND=1)' scalar.
  9996. Intrinsic groups: `badu77'.
  9997. Description:
  9998.    If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked
  9999. with a single integer argument (of system-dependent length) when signal
  10000. NUMBER occurs.  If HANDLER is an integer, it can be used to turn off
  10001. handling of signal NUMBER or revert to its default action.  See
  10002. `signal(2)'.
  10003.    Note that HANDLER will be called using C conventions, so the value
  10004. of its argument in Fortran terms is obtained by applying `%LOC()' (or
  10005. LOC()) to it.
  10006.    The value returned by `signal(2)' is returned.
  10007.    Due to the side effects performed by this intrinsic, the function
  10008. form is not recommended.
  10009.    *Warning:* If the returned value is stored in an `INTEGER(KIND=1)'
  10010. (default `INTEGER') argument, truncation of the original return value
  10011. occurs on some systems (such as Alphas, which have 64-bit pointers but
  10012. 32-bit default integers), with no warning issued by `g77' under normal
  10013. circumstances.
  10014.    Therefore, the following code fragment might silently fail on some
  10015. systems:
  10016.      INTEGER RTN
  10017.      EXTERNAL MYHNDL
  10018.      RTN = SIGNAL(SIGNUM, MYHNDL)
  10019.      ...
  10020.      ! Restore original handler:
  10021.      RTN = SIGNAL(SIGNUM, RTN)
  10022.    The reason for the failure is that `RTN' might not hold all the
  10023. information on the original handler for the signal, thus restoring an
  10024. invalid handler.  This bug could manifest itself as a spurious run-time
  10025. failure at an arbitrary point later during the program's execution, for
  10026. example.
  10027.    *Warning:* Use of the `libf2c' run-time library function `signal_'
  10028. directly (such as via `EXTERNAL SIGNAL') requires use of the `%VAL()'
  10029. construct to pass an `INTEGER' value (such as `SIG_IGN' or `SIG_DFL')
  10030. for the HANDLER argument.
  10031.    However, while `RTN = SIGNAL(SIGNUM, %VAL(SIG_IGN))' works when
  10032. `SIGNAL' is treated as an external procedure (and resolves, at link
  10033. time, to `libf2c''s `signal_' routine), this construct is not valid
  10034. when `SIGNAL' is recognized as the intrinsic of that name.
  10035.    Therefore, for maximum portability and reliability, code such
  10036. references to the `SIGNAL' facility as follows:
  10037.      INTRINSIC SIGNAL
  10038.      ...
  10039.      RTN = SIGNAL(SIGNUM, SIG_IGN)
  10040.    `g77' will compile such a call correctly, while other compilers will
  10041. generally either do so as well or reject the `INTRINSIC SIGNAL'
  10042. statement via a diagnostic, allowing you to take appropriate action.
  10043.    For information on other intrinsics with the same name: *Note Signal
  10044. Intrinsic (subroutine)::.
  10045. File: g77.info,  Node: SinD Intrinsic,  Next: SnglQ Intrinsic,  Prev: Signal Intrinsic (function),  Up: Other Intrinsics
  10046. SinD Intrinsic
  10047. ..............
  10048.    This intrinsic is not yet implemented.  The name is, however,
  10049. reserved as an intrinsic.  Use `EXTERNAL SinD' to use this name for an
  10050. external procedure.
  10051. File: g77.info,  Node: SnglQ Intrinsic,  Next: SymLnk Intrinsic (function),  Prev: SinD Intrinsic,  Up: Other Intrinsics
  10052. SnglQ Intrinsic
  10053. ...............
  10054.    This intrinsic is not yet implemented.  The name is, however,
  10055. reserved as an intrinsic.  Use `EXTERNAL SnglQ' to use this name for an
  10056. external procedure.
  10057. File: g77.info,  Node: SymLnk Intrinsic (function),  Next: System Intrinsic (function),  Prev: SnglQ Intrinsic,  Up: Other Intrinsics
  10058. SymLnk Intrinsic (function)
  10059. ...........................
  10060.      SymLnk(PATH1, PATH2)
  10061. SymLnk: `INTEGER(KIND=1)' function.
  10062. PATH1: `CHARACTER'; scalar; INTENT(IN).
  10063. PATH2: `CHARACTER'; scalar; INTENT(IN).
  10064. Intrinsic groups: `badu77'.
  10065. Description:
  10066.    Makes a symbolic link from file PATH1 to PATH2.  A null character
  10067. (`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise,
  10068. trailing blanks in PATH1 and PATH2 are ignored.  Returns 0 on success
  10069. or a non-zero error code (`ENOSYS' if the system does not provide
  10070. `symlink(2)').
  10071.    Due to the side effects performed by this intrinsic, the function
  10072. form is not recommended.
  10073.    For information on other intrinsics with the same name: *Note SymLnk
  10074. Intrinsic (subroutine)::.
  10075. File: g77.info,  Node: System Intrinsic (function),  Next: TanD Intrinsic,  Prev: SymLnk Intrinsic (function),  Up: Other Intrinsics
  10076. System Intrinsic (function)
  10077. ...........................
  10078.      System(COMMAND)
  10079. System: `INTEGER(KIND=1)' function.
  10080. COMMAND: `CHARACTER'; scalar; INTENT(IN).
  10081. Intrinsic groups: `badu77'.
  10082. Description:
  10083.    Passes the command COMMAND to a shell (see `system(3)').  Returns
  10084. the value returned by `system(3)', presumably 0 if the shell command
  10085. succeeded.  Note that which shell is used to invoke the command is
  10086. system-dependent and environment-dependent.
  10087.    Due to the side effects performed by this intrinsic, the function
  10088. form is not recommended.  However, the function form can be valid in
  10089. cases where the actual side effects performed by the call are
  10090. unimportant to the application.
  10091.    For example, on a UNIX system, `SAME = SYSTEM('cmp a b')' does not
  10092. perform any side effects likely to be important to the program, so the
  10093. programmer would not care if the actual system call (and invocation of
  10094. `cmp') was optimized away in a situation where the return value could
  10095. be determined otherwise, or was not actually needed (`SAME' not
  10096. actually referenced after the sample assignment statement).
  10097.    For information on other intrinsics with the same name: *Note System
  10098. Intrinsic (subroutine)::.
  10099. File: g77.info,  Node: TanD Intrinsic,  Next: Time Intrinsic (VXT),  Prev: System Intrinsic (function),  Up: Other Intrinsics
  10100. TanD Intrinsic
  10101. ..............
  10102.    This intrinsic is not yet implemented.  The name is, however,
  10103. reserved as an intrinsic.  Use `EXTERNAL TanD' to use this name for an
  10104. external procedure.
  10105. File: g77.info,  Node: Time Intrinsic (VXT),  Next: UMask Intrinsic (function),  Prev: TanD Intrinsic,  Up: Other Intrinsics
  10106. Time Intrinsic (VXT)
  10107. ....................
  10108.      CALL Time(TIME)
  10109. TIME: `CHARACTER*8'; scalar; INTENT(OUT).
  10110. Intrinsic groups: `vxt'.
  10111. Description:
  10112.    Returns in TIME a character representation of the current time as
  10113. obtained from `ctime(3)'.
  10114.    *Note Fdate Intrinsic (subroutine):: for an equivalent routine.
  10115.    For information on other intrinsics with the same name: *Note Time
  10116. Intrinsic (UNIX)::.
  10117. File: g77.info,  Node: UMask Intrinsic (function),  Next: Unlink Intrinsic (function),  Prev: Time Intrinsic (VXT),  Up: Other Intrinsics
  10118. UMask Intrinsic (function)
  10119. ..........................
  10120.      UMask(MASK)
  10121. UMask: `INTEGER(KIND=1)' function.
  10122. MASK: `INTEGER'; scalar; INTENT(IN).
  10123. Intrinsic groups: `badu77'.
  10124. Description:
  10125.    Sets the file creation mask to MASK and returns the old value.  See
  10126. `umask(2)'.
  10127.    Due to the side effects performed by this intrinsic, the function
  10128. form is not recommended.
  10129.    For information on other intrinsics with the same name: *Note UMask
  10130. Intrinsic (subroutine)::.
  10131. File: g77.info,  Node: Unlink Intrinsic (function),  Next: ZExt Intrinsic,  Prev: UMask Intrinsic (function),  Up: Other Intrinsics
  10132. Unlink Intrinsic (function)
  10133. ...........................
  10134.      Unlink(FILE)
  10135. Unlink: `INTEGER(KIND=1)' function.
  10136. FILE: `CHARACTER'; scalar; INTENT(IN).
  10137. Intrinsic groups: `badu77'.
  10138. Description:
  10139.    Unlink the file FILE.  A null character (`CHAR(0)') marks the end of
  10140. the name in FILE--otherwise, trailing blanks in FILE are ignored.
  10141. Returns 0 on success or a non-zero error code.  See `unlink(2)'.
  10142.    Due to the side effects performed by this intrinsic, the function
  10143. form is not recommended.
  10144.    For information on other intrinsics with the same name: *Note Unlink
  10145. Intrinsic (subroutine)::.
  10146. File: g77.info,  Node: ZExt Intrinsic,  Prev: Unlink Intrinsic (function),  Up: Other Intrinsics
  10147. ZExt Intrinsic
  10148. ..............
  10149.    This intrinsic is not yet implemented.  The name is, however,
  10150. reserved as an intrinsic.  Use `EXTERNAL ZExt' to use this name for an
  10151. external procedure.
  10152. File: g77.info,  Node: Other Compilers,  Next: Other Languages,  Prev: Other Dialects,  Up: Top
  10153. Other Compilers
  10154. ***************
  10155.    An individual Fortran source file can be compiled to an object
  10156. (`*.o') file instead of to the final program executable.  This allows
  10157. several portions of a program to be compiled at different times and
  10158. linked together whenever a new version of the program is needed.
  10159. However, it introduces the issue of "object compatibility" across the
  10160. various object files (and libraries, or `*.a' files) that are linked
  10161. together to produce any particular executable file.
  10162.    Object compatibility is an issue when combining, in one program,
  10163. Fortran code compiled by more than one compiler (or more than one
  10164. configuration of a compiler).  If the compilers disagree on how to
  10165. transform the names of procedures, there will normally be errors when
  10166. linking such programs.  Worse, if the compilers agree on naming, but
  10167. disagree on issues like how to pass parameters, return arguments, and
  10168. lay out `COMMON' areas, the earliest detected errors might be the
  10169. incorrect results produced by the program (and that assumes these
  10170. errors are detected, which is not always the case).
  10171.    Normally, `g77' generates code that is object-compatible with code
  10172. generated by a version of `f2c' configured (with, for example, `f2c.h'
  10173. definitions) to be generally compatible with `g77' as built by `gcc'.
  10174. (Normally, `f2c' will, by default, conform to the appropriate
  10175. configuration, but it is possible that older or perhaps even newer
  10176. versions of `f2c', or versions having certain configuration changes to
  10177. `f2c' internals, will produce object files that are incompatible with
  10178. `g77'.)
  10179.    For example, a Fortran string subroutine argument will become two
  10180. arguments on the C side: a `char *' and an `int' length.
  10181.    Much of this compatibility results from the fact that `g77' uses the
  10182. same run-time library, `libf2c', used by `f2c'.
  10183.    Other compilers might or might not generate code that is
  10184. object-compatible with `libf2c' and current `g77', and some might offer
  10185. such compatibility only when explicitly selected via a command-line
  10186. option to the compiler.
  10187.    *Note: This portion of the documentation definitely needs a lot of
  10188. work!*
  10189. * Menu:
  10190. * Dropping f2c Compatibility::  When speed is more important.
  10191. * Compilers Other Than f2c::    Interoperation with code from other compilers.
  10192. File: g77.info,  Node: Dropping f2c Compatibility,  Next: Compilers Other Than f2c,  Up: Other Compilers
  10193. Dropping `f2c' Compatibility
  10194. ============================
  10195.    Specifying `-fno-f2c' allows `g77' to generate, in some cases,
  10196. faster code, by not needing to allow to the possibility of linking with
  10197. code compiled by `f2c'.
  10198.    For example, this affects how `REAL(KIND=1)', `COMPLEX(KIND=1)', and
  10199. `COMPLEX(KIND=2)' functions are called.  With `-fno-f2c', they are
  10200. compiled as returning the appropriate `gcc' type (`float', `__complex__
  10201. float', `__complex__ double', in many configurations).
  10202.    With `-ff2c' in force, they are compiled differently (with perhaps
  10203. slower run-time performance) to accommodate the restrictions inherent
  10204. in `f2c''s use of K&R C as an intermediate language--`REAL(KIND=1)'
  10205. functions return C's `double' type, while `COMPLEX' functions return
  10206. `void' and use an extra argument pointing to a place for the functions
  10207. to return their values.
  10208.    It is possible that, in some cases, leaving `-ff2c' in force might
  10209. produce faster code than using `-fno-f2c'.  Feel free to experiment,
  10210. but remember to experiment with changing the way *entire programs and
  10211. their Fortran libraries are compiled* at a time, since this sort of
  10212. experimentation affects the interface of code generated for a Fortran
  10213. source file--that is, it affects object compatibility.
  10214.    Note that `f2c' compatibility is a fairly static target to achieve,
  10215. though not necessarily perfectly so, since, like `g77', it is still
  10216. being improved.  However, specifying `-fno-f2c' causes `g77' to
  10217. generate code that will probably be incompatible with code generated by
  10218. future versions of `g77' when the same option is in force.  You should
  10219. make sure you are always able to recompile complete programs from
  10220. source code when upgrading to new versions of `g77' or `f2c',
  10221. especially when using options such as `-fno-f2c'.
  10222.    Therefore, if you are using `g77' to compile libraries and other
  10223. object files for possible future use and you don't want to require
  10224. recompilation for future use with subsequent versions of `g77', you
  10225. might want to stick with `f2c' compatibility for now, and carefully
  10226. watch for any announcements about changes to the `f2c'/`libf2c'
  10227. interface that might affect existing programs (thus requiring
  10228. recompilation).
  10229.    It is probable that a future version of `g77' will not, by default,
  10230. generate object files compatible with `f2c', and that version probably
  10231. would no longer use `libf2c'.  If you expect to depend on this
  10232. compatibility in the long term, use the options `-ff2c -ff2c-library'
  10233. when compiling all of the applicable code.  This should cause future
  10234. versions of `g77' either to produce compatible code (at the expense of
  10235. the availability of some features and performance), or at the very
  10236. least, to produce diagnostics.
  10237. File: g77.info,  Node: Compilers Other Than f2c,  Prev: Dropping f2c Compatibility,  Up: Other Compilers
  10238. Compilers Other Than `f2c'
  10239. ==========================
  10240.    On systems with Fortran compilers other than `f2c' and `g77', code
  10241. compiled by `g77' is not expected to work well with code compiled by
  10242. the native compiler.  (This is true for `f2c'-compiled objects as
  10243. well.)  Libraries compiled with the native compiler probably will have
  10244. to be recompiled with `g77' to be used with `g77'-compiled code.
  10245.    Reasons for such incompatibilities include:
  10246.    * There might be differences in the way names of Fortran procedures
  10247.      are translated for use in the system's object-file format.  For
  10248.      example, the statement `CALL FOO' might be compiled by `g77' to
  10249.      call a procedure the linker `ld' sees given the name `_foo_',
  10250.      while the apparently corresponding statement `SUBROUTINE FOO'
  10251.      might be compiled by the native compiler to define the
  10252.      linker-visible name `_foo', or `_FOO_', and so on.
  10253.    * There might be subtle type mismatches which cause subroutine
  10254.      arguments and function return values to get corrupted.
  10255.      This is why simply getting `g77' to transform procedure names the
  10256.      same way a native compiler does is not usually a good idea--unless
  10257.      some effort has been made to ensure that, aside from the way the
  10258.      two compilers transform procedure names, everything else about the
  10259.      way they generate code for procedure interfaces is identical.
  10260.    * Native compilers use libraries of private I/O routines which will
  10261.      not be available at link time unless you have the native
  10262.      compiler--and you would have to explicitly ask for them.
  10263.      For example, on the Sun you would have to add `-L/usr/lang/SCx.x
  10264.      -lF77 -lV77' to the link command.
  10265. File: g77.info,  Node: Other Languages,  Next: Installation,  Prev: Other Compilers,  Up: Top
  10266. Other Languages
  10267. ***************
  10268.    *Note: This portion of the documentation definitely needs a lot of
  10269. work!*
  10270. * Menu:
  10271. * Interoperating with C and C++::
  10272. File: g77.info,  Node: Interoperating with C and C++,  Up: Other Languages
  10273. Tools and advice for interoperating with C and C++
  10274. ==================================================
  10275.    The following discussion assumes that you are running `g77' in `f2c'
  10276. compatibility mode, i.e. not using `-fno-f2c'.  It provides some advice
  10277. about quick and simple techniques for linking Fortran and C (or C++),
  10278. the most common requirement.  For the full story consult the
  10279. description of code generation.  *Note Debugging and Interfacing::.
  10280.    When linking Fortran and C, it's usually best to use `g77' to do the
  10281. linking so that the correct libraries are included (including the maths
  10282. one).  If you're linking with C++ you will want to add `-lstdc++',
  10283. `-lg++' or whatever.  If you need to use another driver program (or
  10284. `ld' directly), you can find out what linkage options `g77' passes by
  10285. running `g77 -v'.
  10286. * Menu:
  10287. * C Interfacing Tools::
  10288. * C Access to Type Information::
  10289. * f2c Skeletons and Prototypes::
  10290. * C++ Considerations::
  10291. * Startup Code::
  10292. File: g77.info,  Node: C Interfacing Tools,  Next: C Access to Type Information,  Up: Interoperating with C and C++
  10293. C Interfacing Tools
  10294. -------------------
  10295.    Even if you don't actually use it as a compiler, `f2c' from
  10296. `ftp://ftp.netlib.org/f2c/src', can be a useful tool when you're
  10297. interfacing (linking) Fortran and C.  *Note Generating Skeletons and
  10298. Prototypes with `f2c': f2c Skeletons and Prototypes.
  10299.    To use `f2c' for this purpose you only need retrieve and build the
  10300. `src' directory from the distribution, consult the `README'
  10301. instructions there for machine-specifics, and install the `f2c' program
  10302. on your path.
  10303.    Something else that might be useful is `cfortran.h' from
  10304. `ftp://zebra/desy.de/cfortran'.  This is a fairly general tool which
  10305. can be used to generate interfaces for calling in both directions
  10306. between Fortran and C.  It can be used in `f2c' mode with
  10307. `g77'--consult its documentation for details.
  10308. File: g77.info,  Node: C Access to Type Information,  Next: f2c Skeletons and Prototypes,  Prev: C Interfacing Tools,  Up: Interoperating with C and C++
  10309. Accessing Type Information in C
  10310. -------------------------------
  10311.    Generally, C code written to link with `g77' code--calling and/or
  10312. being called from Fortran--should `#include <f2c.h>' to define the C
  10313. versions of the Fortran types.  Don't assume Fortran `INTEGER' types
  10314. correspond to C `int's, for instance; instead, declare them as
  10315. `integer', a type defined by `f2c.h'.  `f2c.h' is installed where `gcc'
  10316. will find it by default, assuming you use a copy of `gcc' compatible
  10317. with `g77', probably built at the same time as `g77'.
  10318. File: g77.info,  Node: f2c Skeletons and Prototypes,  Next: C++ Considerations,  Prev: C Access to Type Information,  Up: Interoperating with C and C++
  10319. Generating Skeletons and Prototypes with `f2c'
  10320. ----------------------------------------------
  10321.    A simple and foolproof way to write `g77'-callable C routines--e.g.
  10322. to interface with an existing library--is to write a file (named, for
  10323. example, `fred.f') of dummy Fortran skeletons comprising just the
  10324. declaration of the routine(s) and dummy arguments plus `END' statements.
  10325. Then run `f2c' on file `fred.f' to produce `fred.c' into which you can
  10326. edit useful code, confident the calling sequence is correct, at least.
  10327. (There are some errors otherwise commonly made in generating C
  10328. interfaces with f2c conventions, such as not using `doublereal' as the
  10329. return type of a `REAL' `FUNCTION'.)
  10330.    `f2c' also can help with calling Fortran from C, using its `-P'
  10331. option to generate C prototypes appropriate for calling the Fortran.(1)
  10332. If the Fortran code containing any routines to be called from C is in
  10333. file `joe.f', use the command `f2c -P joe.f' to generate the file
  10334. `joe.P' containing prototype information.  `#include' this in the C
  10335. which has to call the Fortran routines to make sure you get it right.
  10336.    *Note Arrays (DIMENSION: Arrays, for information on the differences
  10337. between the way Fortran (including compilers like `g77') and C handle
  10338. arrays.
  10339.    ---------- Footnotes ----------
  10340.    (1) The files generated like this can also be used for inter-unit
  10341. consistency checking of dummy and actual arguments, although the
  10342. `ftnchek' tool from `ftp://ftp.netlib.org/fortran' or
  10343. `ftp://ftp.dsm.fordham.edu' is probably better for this purpose.
  10344. File: g77.info,  Node: C++ Considerations,  Next: Startup Code,  Prev: f2c Skeletons and Prototypes,  Up: Interoperating with C and C++
  10345. C++ Considerations
  10346. ------------------
  10347.    `f2c' can be used to generate suitable code for compilation with a
  10348. C++ system using the `-C++' option.  The important thing about linking
  10349. `g77'-compiled code with C++ is that the prototypes for the `g77'
  10350. routines must specify C linkage to avoid name mangling.  So, use an
  10351. `extern "C"' declaration.  `f2c''s `-C++' option will take care of this
  10352. when generating skeletons or prototype files as above, and also avoid
  10353. clashes with C++ reserved words in addition to those in C.
  10354. File: g77.info,  Node: Startup Code,  Prev: C++ Considerations,  Up: Interoperating with C and C++
  10355. Startup Code
  10356. ------------
  10357.    Unlike with some runtime systems, it shouldn't be necessary (unless
  10358. there are bugs) to use a Fortran main program to ensure the
  10359. runtime--specifically the i/o system--is initialized.  However, to use
  10360. the `g77' intrinsics `GETARG()' and `IARGC()' the `main()' routine from
  10361. the `libf2c' library must be used, either explicitly or implicitly by
  10362. using a Fortran main program.  This `main()' program calls `MAIN__()'
  10363. (where the names are C-type `extern' names, i.e. not mangled).  You
  10364. need to provide this nullary procedure as the entry point for your C
  10365. code if using `libf2c''s `main'.  In some cases it might be necessary to
  10366. provide a dummy version of this to avoid linkers complaining about
  10367. failure to resolve `MAIN__()' if linking against `libf2c' and not using
  10368. `main()' from it.
  10369. File: g77.info,  Node: Installation,  Next: Debugging and Interfacing,  Prev: Other Languages,  Up: Top
  10370. Installing GNU Fortran
  10371. **********************
  10372.    The following information describes how to install `g77'.
  10373.    The information in this file generally pertains to dealing with
  10374. *source* distributions of `g77' and `gcc'.  It is possible that some of
  10375. this information will be applicable to some *binary* distributions of
  10376. these products--however, since these distributions are not made by the
  10377. maintainers of `g77', responsibility for binary distributions rests with
  10378. whoever built and first distributed them.
  10379.    Nevertheless, efforts to make `g77' easier to both build and install
  10380. from source and package up as a binary distribution are ongoing.
  10381. * Menu:
  10382. * Prerequisites::          Make sure your system is ready for `g77'.
  10383. * Problems Installing::    Known trouble areas.
  10384. * Settings::               Changing `g77' internals before building.
  10385. * Quick Start::            The easier procedure for non-experts.
  10386. * Complete Installation::  For experts, or those who want to be: the details.
  10387. * Distributing Binaries::  If you plan on distributing your `g77'.
  10388. File: g77.info,  Node: Prerequisites,  Next: Problems Installing,  Up: Installation
  10389. Prerequisites
  10390. =============
  10391.    The procedures described to unpack, configure, build, and install
  10392. `g77' assume your system has certain programs already installed.
  10393.    The following prerequisites should be met by your system before you
  10394. follow the `g77' installation instructions:
  10395. `gzip'
  10396.      To unpack the `gcc' and `g77' distributions, you'll need the
  10397.      `gunzip' utility in the `gzip' distribution.  Most UNIX systems
  10398.      already have `gzip' installed.  If yours doesn't, you can get it
  10399.      from the FSF.
  10400.      Note that you'll need `tar' and other utilities as well, but all
  10401.      UNIX systems have these.  There are GNU versions of all these
  10402.      available--in fact, a complete GNU UNIX system can be put together
  10403.      on most systems, if desired.
  10404.      The version of GNU `gzip' used to package this release is
  10405.      1.2.4.  (The version of GNU `tar' used to package this release is
  10406.      1.12.)
  10407. `gcc-2.7.2.3.tar.gz'
  10408.      You need to have this, or some other applicable, version of `gcc'
  10409.      on your system.  The version should be an exact copy of a
  10410.      distribution from the FSF.  Its size is approximately 7.1MB.
  10411.      If you've already unpacked `gcc-2.7.2.3.tar.gz' into a directory
  10412.      (named `gcc-2.7.2.3') called the "source tree" for `gcc', you can
  10413.      delete the distribution itself, but you'll need to remember to
  10414.      skip any instructions to unpack this distribution.
  10415.      Without an applicable `gcc' source tree, you cannot build `g77'.
  10416.      You can obtain an FSF distribution of `gcc' from the FSF.
  10417. `g77-0.5.22.tar.gz'
  10418.      You probably have already unpacked this package, or you are
  10419.      reading an advance copy of these installation instructions, which
  10420.      are contained in this distribution.  The size of this package is
  10421.      approximately 1.5MB.
  10422.      You can obtain an FSF distribution of `g77' from the FSF, the same
  10423.      way you obtained `gcc'.
  10424. Enough disk space
  10425.      The amount of disk space needed to unpack, build, install, and use
  10426.      `g77' depends on the type of system you're using, how you build
  10427.      `g77', and how much of it you install (primarily, which languages
  10428.      you install).
  10429.      The sizes shown below assume all languages distributed in
  10430.      `gcc-2.7.2.3', plus `g77', will be built and installed.  These
  10431.      sizes are indicative of GNU/Linux systems on Intel x86 running
  10432.      COFF and on Digital Alpha (AXP) systems running ELF.  These should
  10433.      be fairly representative of 32-bit and 64-bit systems,
  10434.      respectively.
  10435.      Note that all sizes are approximate and subject to change without
  10436.      notice!  They are based on preliminary releases of g77 made shortly
  10437.      before the public beta release.
  10438.         -- `gcc' and `g77' distributions occupy 8.6MB packed, 35MB
  10439.           unpacked.  These consist of the source code and documentation,
  10440.           plus some derived files (mostly documentation), for `gcc' and
  10441.           `g77'.  Any deviations from these numbers for different kinds
  10442.           of systems are likely to be very minor.
  10443.         -- A "bootstrap" build requires an additional 67.3MB for a
  10444.           total of 102MB on an ix86, and an additional 98MB for a total
  10445.           of 165MB on an Alpha.
  10446.         -- Removing `gcc/stage1' after the build recovers 10.7MB for a
  10447.           total of 91MB on an ix86, and recovers ??MB for a total of
  10448.           ??MB on an Alpha.
  10449.           After doing this, the integrity of the build can still be
  10450.           verified via `make compare', and the `gcc' compiler modified
  10451.           and used to build itself for testing fairly quickly, using
  10452.           the copy of the compiler kept in `gcc/stage2'.
  10453.         -- Removing `gcc/stage2' after the build further recovers
  10454.           27.3MB for a total of 64.3MB, and recovers ??MB for a total
  10455.           of ??MB on an Alpha.
  10456.           After doing this, the compiler can still be installed,
  10457.           especially if GNU `make' is used to avoid gratuitous rebuilds
  10458.           (or, the installation can be done by hand).
  10459.         -- Installing `gcc' and `g77' copies 14.9MB onto the `--prefix'
  10460.           disk for a total of 79.2MB on an ix86, and copies ??MB onto
  10461.           the `--prefix' disk for a total of ??MB on an Alpha.
  10462.      After installation, if no further modifications and builds of
  10463.      `gcc' or `g77' are planned, the source and build directory may be
  10464.      removed, leaving the total impact on a system's disk storage as
  10465.      that of the amount copied during installation.
  10466.      Systems with the appropriate version of `gcc' installed don't
  10467.      require the complete bootstrap build.  Doing a "straight build"
  10468.      requires about as much space as does a bootstrap build followed by
  10469.      removing both the `gcc/stage1' and `gcc/stage2' directories.
  10470.      Installing `gcc' and `g77' over existing versions might require
  10471.      less *new* disk space, but note that, unlike many products, `gcc'
  10472.      installs itself in a way that avoids overwriting other installed
  10473.      versions of itself, so that other versions may easily be invoked
  10474.      (via `gcc -V VERSION').
  10475.      So, the amount of space saved as a result of having an existing
  10476.      version of `gcc' and `g77' already installed is not
  10477.      much--typically only the command drivers (`gcc', `g77', `g++', and
  10478.      so on, which are small) and the documentation is overwritten by
  10479.      the new installation.  The rest of the new installation is done
  10480.      without replacing existing installed versions (assuming they have
  10481.      different version numbers).
  10482. `patch'
  10483.      Although you can do everything `patch' does yourself, by hand,
  10484.      without much trouble, having `patch' installed makes installation
  10485.      of new versions of GNU utilities such as `g77' so much easier that
  10486.      it is worth getting.  You can obtain `patch' the same way you
  10487.      obtained `gcc' and `g77'.
  10488.      In any case, you can apply patches by hand--patch files are
  10489.      designed for humans to read them.
  10490.      The version of GNU `patch' used to develop this release is
  10491.      2.5.
  10492. `make'
  10493.      Your system must have `make', and you will probably save yourself
  10494.      a lot of trouble if it is GNU `make' (sometimes referred to as
  10495.      `gmake').
  10496.      The version of GNU `make' used to develop this release is
  10497.      3.76.1.
  10498.      Your system must have a working C compiler.
  10499.      *Note Installing GNU CC: (gcc)Installation, for more information
  10500.      on prerequisites for installing `gcc'.
  10501. `bison'
  10502.      If you do not have `bison' installed, you can usually work around
  10503.      any need for it, since `g77' itself does not use it, and `gcc'
  10504.      normally includes all files generated by running it in its
  10505.      distribution.  You can obtain `bison' the same way you obtained
  10506.      `gcc' and `g77'.
  10507.      The version of GNU `bison' used to develop this release is
  10508.      1.25.
  10509.      *Note Missing bison?::, for information on how to work around not
  10510.      having `bison'.
  10511. `makeinfo'
  10512.      If you are missing `makeinfo', you can usually work around any
  10513.      need for it.  You can obtain `makeinfo' the same way you obtained
  10514.      `gcc' and `g77'.
  10515.      The version of GNU `makeinfo' used to develop this release is
  10516.      1.68, from GNU `texinfo' version 3.11.
  10517.      *Note Missing makeinfo?::, for information on getting around the
  10518.      lack of `makeinfo'.
  10519. `sed'
  10520.      All UNIX systems have `sed', but some have a broken version that
  10521.      cannot handle configuring, building, or installing `gcc' or `g77'.
  10522.      The version of GNU `sed' used to develop this release is
  10523.      2.05.  (Note that GNU `sed' version 3.0 was withdrawn by the
  10524.      FSF--if you happen to have this version installed, replace it with
  10525.      version 2.05 immediately.  See a GNU distribution site for further
  10526.      explanation.)
  10527. `root' access or equivalent
  10528.      To perform the complete installation procedures on a system, you
  10529.      need to have `root' access to that system, or equivalent access to
  10530.      the `--prefix' directory tree specified on the `configure' command
  10531.      line.
  10532.      Portions of the procedure (such as configuring and building `g77')
  10533.      can be performed by any user with enough disk space and virtual
  10534.      memory.
  10535.      However, these instructions are oriented towards less-experienced
  10536.      users who want to install `g77' on their own personal systems.
  10537.      System administrators with more experience will want to determine
  10538.      for themselves how they want to modify the procedures described
  10539.      below to suit the needs of their installation.
  10540. File: g77.info,  Node: Problems Installing,  Next: Settings,  Prev: Prerequisites,  Up: Installation
  10541. Problems Installing
  10542. ===================
  10543.    This is a list of problems (and some apparent problems which don't
  10544. really mean anything is wrong) that show up when configuring, building,
  10545. installing, or porting GNU Fortran.
  10546.    *Note Installation Problems: (gcc)Installation Problems, for more
  10547. information on installation problems that can afflict either `gcc' or
  10548. `g77'.
  10549. * Menu:
  10550. * General Problems::         Problems afflicting most or all systems.
  10551. * System-specific Problems:: Problems afflicting particular systems.
  10552. * Cross-compiler Problems::  Problems afflicting cross-compilation setups.
  10553. File: g77.info,  Node: General Problems,  Next: System-specific Problems,  Up: Problems Installing
  10554. General Problems
  10555. ----------------
  10556.    These problems can occur on most or all systems.
  10557. * Menu:
  10558. * GNU C Required::             Why even ANSI C is not enough.
  10559. * Patching GNU CC Necessary::  Why `gcc' must be patched first.
  10560. * Building GNU CC Necessary::  Why you can't build *just* Fortran.
  10561. * Missing strtoul::            If linking `f771' fails due to an
  10562.                                 unresolved reference to `strtoul'.
  10563. * Object File Differences::    It's okay that `make compare' will
  10564.                                 flag `f/zzz.o'.
  10565. * Cleanup Kills Stage Directories::  A minor nit for `g77' developers.
  10566. * Missing gperf?::             When building requires `gperf'.
  10567. File: g77.info,  Node: GNU C Required,  Next: Patching GNU CC Necessary,  Up: General Problems
  10568. GNU C Required
  10569. ..............
  10570.    Compiling `g77' requires GNU C, not just ANSI C.  Fixing this
  10571. wouldn't be very hard (just tedious), but the code using GNU extensions
  10572. to the C language is expected to be rewritten for 0.6 anyway, so there
  10573. are no plans for an interim fix.
  10574.    This requirement does not mean you must already have `gcc' installed
  10575. to build `g77'.  As long as you have a working C compiler, you can use a
  10576. bootstrap build to automate the process of first building `gcc' using
  10577. the working C compiler you have, then building `g77' and rebuilding
  10578. `gcc' using that just-built `gcc', and so on.
  10579. File: g77.info,  Node: Patching GNU CC Necessary,  Next: Building GNU CC Necessary,  Prev: GNU C Required,  Up: General Problems
  10580. Patching GNU CC Necessary
  10581. .........................
  10582.    `g77' currently requires application of a patch file to the gcc
  10583. compiler tree.  The necessary patches should be folded in to the
  10584. mainline gcc distribution.
  10585.    Some combinations of versions of `g77' and `gcc' might actually
  10586. *require* no patches, but the patch files will be provided anyway as
  10587. long as there are more changes expected in subsequent releases.  These
  10588. patch files might contain unnecessary, but possibly helpful, patches.
  10589. As a result, it is possible this issue might never be resolved, except
  10590. by eliminating the need for the person configuring `g77' to apply a
  10591. patch by hand, by going to a more automated approach (such as
  10592. configure-time patching).
  10593. File: g77.info,  Node: Building GNU CC Necessary,  Next: Missing strtoul,  Prev: Patching GNU CC Necessary,  Up: General Problems
  10594. Building GNU CC Necessary
  10595. .........................
  10596.    It should be possible to build the runtime without building `cc1'
  10597. and other non-Fortran items, but, for now, an easy way to do that is
  10598. not yet established.
  10599. File: g77.info,  Node: Missing strtoul,  Next: Object File Differences,  Prev: Building GNU CC Necessary,  Up: General Problems
  10600. Missing strtoul
  10601. ...............
  10602.    On SunOS4 systems, linking the `f771' program produces an error
  10603. message concerning an undefined symbol named `_strtoul'.
  10604.    This is not a `g77' bug.  *Note Patching GNU Fortran::, for
  10605. information on a workaround provided by `g77'.
  10606.    The proper fix is either to upgrade your system to one that provides
  10607. a complete ANSI C environment, or improve `gcc' so that it provides one
  10608. for all the languages and configurations it supports.
  10609.    *Note:* In earlier versions of `g77', an automated workaround for
  10610. this problem was attempted.  It worked for systems without `_strtoul',
  10611. substituting the incomplete-yet-sufficient version supplied with `g77'
  10612. for those systems.  However, the automated workaround failed
  10613. mysteriously for systems that appeared to have conforming ANSI C
  10614. environments, and it was decided that, lacking resources to more fully
  10615. investigate the problem, it was better to not punish users of those
  10616. systems either by requiring them to work around the problem by hand or
  10617. by always substituting an incomplete `strtoul()' implementation when
  10618. their systems had a complete, working one.  Unfortunately, this meant
  10619. inconveniencing users of systems not having `strtoul()', but they're
  10620. using obsolete (and generally unsupported) systems anyway.
  10621. File: g77.info,  Node: Object File Differences,  Next: Cleanup Kills Stage Directories,  Prev: Missing strtoul,  Up: General Problems
  10622. Object File Differences
  10623. .......................
  10624.    A comparison of object files after building Stage 3 during a
  10625. bootstrap build will result in `gcc/f/zzz.o' being flagged as different
  10626. from the Stage 2 version.  That is because it contains a string with an
  10627. expansion of the `__TIME__' macro, which expands to the current time of
  10628. day.  It is nothing to worry about, since `gcc/f/zzz.c' doesn't contain
  10629. any actual code.  It does allow you to override its use of `__DATE__'
  10630. and `__TIME__' by defining macros for the compilation--see the source
  10631. code for details.
  10632. File: g77.info,  Node: Cleanup Kills Stage Directories,  Next: Missing gperf?,  Prev: Object File Differences,  Up: General Problems
  10633. Cleanup Kills Stage Directories
  10634. ...............................
  10635.    It'd be helpful if `g77''s `Makefile.in' or `Make-lang.in' would
  10636. create the various `stageN' directories and their subdirectories, so
  10637. developers and expert installers wouldn't have to reconfigure after
  10638. cleaning up.
  10639. File: g77.info,  Node: Missing gperf?,  Prev: Cleanup Kills Stage Directories,  Up: General Problems
  10640. Missing `gperf'?
  10641. ................
  10642.    If a build aborts trying to invoke `gperf', that strongly suggests
  10643. an improper method was used to create the `gcc' source directory, such
  10644. as the UNIX `cp -r' command instead of `cp -pr', since this problem
  10645. very likely indicates that the date-time-modified information on the
  10646. `gcc' source files is incorrect.
  10647.    The proper solution is to recreate the `gcc' source directory from a
  10648. `gcc' distribution known to be provided by the FSF.
  10649.    It is possible you might be able to temporarily work around the
  10650. problem, however, by trying these commands:
  10651.      sh# cd gcc
  10652.      sh# touch c-gperf.h
  10653.      sh#
  10654.    These commands update the date-time-modified information for the
  10655. file produced by the invocation of `gperf' in the current versions of
  10656. `gcc', so that `make' no longer believes it needs to update it.  This
  10657. file should already exist in a `gcc' distribution, but mistakes made
  10658. when copying the `gcc' directory can leave the modification information
  10659. set such that the `gperf' input files look more "recent" than the
  10660. corresponding output files.
  10661.    If the above does not work, definitely start from scratch and avoid
  10662. copying the `gcc' using any method that does not reliably preserve
  10663. date-time-modified information, such as the UNIX `cp -r' command (use
  10664. `cp -pr' instead).
  10665. File: g77.info,  Node: System-specific Problems,  Next: Cross-compiler Problems,  Prev: General Problems,  Up: Problems Installing
  10666. System-specific Problems
  10667. ------------------------
  10668.    If your system is based on a Digital Alpha (AXP) architecture and
  10669. employs a 64-bit operating system (such as GNU/Linux), you might
  10670. consider using `egcs' instead of versions of `g77' based on versions of
  10671. `gcc' prior to 2.8.  `http://www.cygnus.com/egcs' for information on
  10672. `egcs', or obtain a copy from `ftp://egcs.cygnus.com/pub/egcs'.
  10673.    If your system is Irix 6, to obtain a working version of `gcc',
  10674. `http://reality.sgi.com/knobi/gcc-2.7.2.x-on-irix-6.2-6.3'.
  10675. File: g77.info,  Node: Cross-compiler Problems,  Prev: System-specific Problems,  Up: Problems Installing
  10676. Cross-compiler Problems
  10677. -----------------------
  10678.    `g77' has been in alpha testing since September of 1992, and in
  10679. public beta testing since February of 1995.  Alpha testing was done by
  10680. a small number of people worldwide on a fairly wide variety of
  10681. machines, involving self-compilation in most or all cases.  Beta
  10682. testing has been done primarily via self-compilation, but in more and
  10683. more cases, cross-compilation (and "criss-cross compilation", where a
  10684. version of a compiler is built on one machine to run on a second and
  10685. generate code that runs on a third) has been tried and has succeeded,
  10686. to varying extents.
  10687.    Generally, `g77' can be ported to any configuration to which `gcc',
  10688. `f2c', and `libf2c' can be ported and made to work together, aside from
  10689. the known problems described in this manual.  If you want to port `g77'
  10690. to a particular configuration, you should first make sure `gcc' and
  10691. `libf2c' can be ported to that configuration before focusing on `g77',
  10692. because `g77' is so dependent on them.
  10693.    Even for cases where `gcc' and `libf2c' work, you might run into
  10694. problems with cross-compilation on certain machines, for several
  10695. reasons.
  10696.    * There is one known bug (a design bug to be fixed in 0.6) that
  10697.      prevents configuration of `g77' as a cross-compiler in some cases,
  10698.      though there are assumptions made during configuration that
  10699.      probably make doing non-self-hosting builds a hassle, requiring
  10700.      manual intervention.
  10701.    * `gcc' might still have some trouble being configured for certain
  10702.      combinations of machines.  For example, it might not know how to
  10703.      handle floating-point constants.
  10704.    * Improvements to the way `libf2c' is built could make building
  10705.      `g77' as a cross-compiler easier--for example, passing and using
  10706.      `$(LD)' and `$(AR)' in the appropriate ways.
  10707.    * There are still some challenges putting together the right
  10708.      run-time libraries (needed by `libf2c') for a target system,
  10709.      depending on the systems involved in the configuration.  (This is
  10710.      a general problem with cross-compilation, and with `gcc' in
  10711.      particular.)
  10712. File: g77.info,  Node: Settings,  Next: Quick Start,  Prev: Problems Installing,  Up: Installation
  10713. Changing Settings Before Building
  10714. =================================
  10715.    Here are some internal `g77' settings that can be changed by editing
  10716. source files in `gcc/f/' before building.
  10717.    This information, and perhaps even these settings, represent
  10718. stop-gap solutions to problems people doing various ports of `g77' have
  10719. encountered.  As such, none of the following information is expected to
  10720. be pertinent in future versions of `g77'.
  10721. * Menu:
  10722. * Larger File Unit Numbers::     Raising `MXUNIT'.
  10723. * Always Flush Output::          Synchronizing write errors.
  10724. * Maximum Stackable Size::       Large arrays forced off the stack.
  10725. * Floating-point Bit Patterns::  Possible programs building `g77'
  10726.                                    as a cross-compiler.
  10727. * Large Initialization::         Large arrays with `DATA'
  10728.                                    initialization.
  10729. * Alpha Problems Fixed::         Problems with 64-bit systems like
  10730.                                    Alphas now fixed?
  10731. File: g77.info,  Node: Larger File Unit Numbers,  Next: Always Flush Output,  Up: Settings
  10732. Larger File Unit Numbers
  10733. ------------------------
  10734.    As distributed, whether as part of `f2c' or `g77', `libf2c' accepts
  10735. file unit numbers only in the range 0 through 99.  For example, a
  10736. statement such as `WRITE (UNIT=100)' causes a run-time crash in
  10737. `libf2c', because the unit number, 100, is out of range.
  10738.    If you know that Fortran programs at your installation require the
  10739. use of unit numbers higher than 99, you can change the value of the
  10740. `MXUNIT' macro, which represents the maximum unit number, to an
  10741. appropriately higher value.
  10742.    To do this, edit the file `f/runtime/libI77/fio.h' in your `g77'
  10743. source tree, changing the following line:
  10744.      #define MXUNIT 100
  10745.    Change the line so that the value of `MXUNIT' is defined to be at
  10746. least one *greater* than the maximum unit number used by the Fortran
  10747. programs on your system.
  10748.    (For example, a program that does `WRITE (UNIT=255)' would require
  10749. `MXUNIT' set to at least 256 to avoid crashing.)
  10750.    Then build or rebuild `g77' as appropriate.
  10751.    *Note:* Changing this macro has *no* effect on other limits your
  10752. system might place on the number of files open at the same time.  That
  10753. is, the macro might allow a program to do `WRITE (UNIT=100)', but the
  10754. library and operating system underlying `libf2c' might disallow it if
  10755. many other files have already been opened (via `OPEN' or implicitly via
  10756. `READ', `WRITE', and so on).  Information on how to increase these
  10757. other limits should be found in your system's documentation.
  10758. File: g77.info,  Node: Always Flush Output,  Next: Maximum Stackable Size,  Prev: Larger File Unit Numbers,  Up: Settings
  10759. Always Flush Output
  10760. -------------------
  10761.    Some Fortran programs require output (writes) to be flushed to the
  10762. operating system (under UNIX, via the `fflush()' library call) so that
  10763. errors, such as disk full, are immediately flagged via the relevant
  10764. `ERR=' and `IOSTAT=' mechanism, instead of such errors being flagged
  10765. later as subsequent writes occur, forcing the previously written data
  10766. to disk, or when the file is closed.
  10767.    Essentially, the difference can be viewed as synchronous error
  10768. reporting (immediate flagging of errors during writes) versus
  10769. asynchronous, or, more precisely, buffered error reporting (detection
  10770. of errors might be delayed).
  10771.    `libf2c' supports flagging write errors immediately when it is built
  10772. with the `ALWAYS_FLUSH' macro defined.  This results in a `libf2c' that
  10773. runs slower, sometimes quite a bit slower, under certain
  10774. circumstances--for example, accessing files via the networked file
  10775. system NFS--but the effect can be more reliable, robust file I/O.
  10776.    If you know that Fortran programs requiring this level of precision
  10777. of error reporting are to be compiled using the version of `g77' you
  10778. are building, you might wish to modify the `g77' source tree so that
  10779. the version of `libf2c' is built with the `ALWAYS_FLUSH' macro defined,
  10780. enabling this behavior.
  10781.    To do this, find this line in `f/runtime/configure.in' in your `g77'
  10782. source tree:
  10783.      dnl AC_DEFINE(ALWAYS_FLUSH)
  10784.    Remove the leading `dnl ', so the line begins with `AC_DEFINE(', and
  10785. run `autoconf' in that file's directory.  (Or, if you don't have
  10786. `autoconf', you can modify `f2c.h.in' in the same directory to include
  10787. the line `#define ALWAYS_FLUSH' after `#define F2C_INCLUDE'.)
  10788.    Then build or rebuild `g77' as appropriate.
  10789. File: g77.info,  Node: Maximum Stackable Size,  Next: Floating-point Bit Patterns,  Prev: Always Flush Output,  Up: Settings
  10790. Maximum Stackable Size
  10791. ----------------------
  10792.    `g77', on most machines, puts many variables and arrays on the stack
  10793. where possible, and can be configured (by changing
  10794. `FFECOM_sizeMAXSTACKITEM' in `gcc/f/com.c') to force smaller-sized
  10795. entities into static storage (saving on stack space) or permit
  10796. larger-sized entities to be put on the stack (which can improve
  10797. run-time performance, as it presents more opportunities for the GBE to
  10798. optimize the generated code).
  10799.    *Note:* Putting more variables and arrays on the stack might cause
  10800. problems due to system-dependent limits on stack size.  Also, the value
  10801. of `FFECOM_sizeMAXSTACKITEM' has no effect on automatic variables and
  10802. arrays.  *Note But-bugs::, for more information.
  10803. File: g77.info,  Node: Floating-point Bit Patterns,  Next: Large Initialization,  Prev: Maximum Stackable Size,  Up: Settings
  10804. Floating-point Bit Patterns
  10805. ---------------------------
  10806.    The `g77' build will crash if an attempt is made to build it as a
  10807. cross-compiler for a target when `g77' cannot reliably determine the
  10808. bit pattern of floating-point constants for the target.  Planned
  10809. improvements for version 0.6 of `g77' will give it the capabilities it
  10810. needs to not have to crash the build but rather generate correct code
  10811. for the target.  (Currently, `g77' would generate bad code under such
  10812. circumstances if it didn't crash during the build, e.g. when compiling
  10813. a source file that does something like `EQUIVALENCE (I,R)' and `DATA
  10814. R/9.43578/'.)
  10815. File: g77.info,  Node: Large Initialization,  Next: Alpha Problems Fixed,  Prev: Floating-point Bit Patterns,  Up: Settings
  10816. Initialization of Large Aggregate Areas
  10817. ---------------------------------------
  10818.    A warning message is issued when `g77' sees code that provides
  10819. initial values (e.g. via `DATA') to an aggregate area (`COMMON' or
  10820. `EQUIVALENCE', or even a large enough array or `CHARACTER' variable)
  10821. that is large enough to increase `g77''s compile time by roughly a
  10822. factor of 10.
  10823.    This size currently is quite small, since `g77' currently has a
  10824. known bug requiring too much memory and time to handle such cases.  In
  10825. `gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined to the
  10826. minimum size for the warning to appear.  The size is specified in
  10827. storage units, which can be bytes, words, or whatever, on a
  10828. case-by-case basis.
  10829.    After changing this macro definition, you must (of course) rebuild
  10830. and reinstall `g77' for the change to take effect.
  10831.    Note that, as of version 0.5.18, improvements have reduced the scope
  10832. of the problem for *sparse* initialization of large arrays, especially
  10833. those with large, contiguous uninitialized areas.  However, the warning
  10834. is issued at a point prior to when `g77' knows whether the
  10835. initialization is sparse, and delaying the warning could mean it is
  10836. produced too late to be helpful.
  10837.    Therefore, the macro definition should not be adjusted to reflect
  10838. sparse cases.  Instead, adjust it to generate the warning when densely
  10839. initialized arrays begin to cause responses noticeably slower than
  10840. linear performance would suggest.
  10841. File: g77.info,  Node: Alpha Problems Fixed,  Prev: Large Initialization,  Up: Settings
  10842. Alpha Problems Fixed
  10843. --------------------
  10844.    `g77' used to warn when it was used to compile Fortran code for a
  10845. target configuration that is not basically a 32-bit machine (such as an
  10846. Alpha, which is a 64-bit machine, especially if it has a 64-bit
  10847. operating system running on it).  That was because `g77' was known to
  10848. not work properly on such configurations.
  10849.    As of version 0.5.20, `g77' is believed to work well enough on such
  10850. systems.  So, the warning is no longer needed or provided.
  10851.    However, support for 64-bit systems, especially in areas such as
  10852. cross-compilation and handling of intrinsics, is still incomplete.  The
  10853. symptoms are believed to be compile-time diagnostics rather than the
  10854. generation of bad code.  It is hoped that version 0.6 will completely
  10855. support 64-bit systems.
  10856. File: g77.info,  Node: Quick Start,  Next: Complete Installation,  Prev: Settings,  Up: Installation
  10857. Quick Start
  10858. ===========
  10859.    This procedure configures, builds, and installs `g77' "out of the
  10860. box" and works on most UNIX systems.  Each command is identified by a
  10861. unique number, used in the explanatory text that follows.  For the most
  10862. part, the output of each command is not shown, though indications of
  10863. the types of responses are given in a few cases.
  10864.    To perform this procedure, the installer must be logged in as user
  10865. `root'.  Much of it can be done while not logged in as `root', and
  10866. users experienced with UNIX administration should be able to modify the
  10867. procedure properly to do so.
  10868.    Following traditional UNIX conventions, it is assumed that the
  10869. source trees for `g77' and `gcc' will be placed in `/usr/src'.  It also
  10870. is assumed that the source distributions themselves already reside in
  10871. `/usr/FSF', a naming convention used by the author of `g77' on his own
  10872. system:
  10873.      /usr/FSF/gcc-2.7.2.3.tar.gz
  10874.      /usr/FSF/g77-0.5.22.tar.gz
  10875.    Users of the following systems should not blindly follow these
  10876. quick-start instructions, because of problems their systems have coping
  10877. with straightforward installation of `g77':
  10878.    * SunOS4
  10879.    Instead, see *Note Complete Installation::, for detailed information
  10880. on how to configure, build, and install `g77' for your particular
  10881. system.  Also, see *Note Known Causes of Trouble with GNU Fortran:
  10882. Trouble, for information on bugs and other problems known to afflict the
  10883. installation process, and how to report newly discovered ones.
  10884.    If your system is *not* on the above list, and *is* a UNIX system or
  10885. one of its variants, you should be able to follow the instructions
  10886. below.  If you vary *any* of the steps below, you might run into
  10887. trouble, including possibly breaking existing programs for other users
  10888. of your system.  Before doing so, it is wise to review the explanations
  10889. of some of the steps.  These explanations follow this list of steps.
  10890.      sh[ 1]# cd /usr/src
  10891.      
  10892.      sh[ 2]# gunzip -c < /usr/FSF/gcc-2.7.2.3.tar.gz | tar xf -
  10893.      [Might say "Broken pipe"...that is normal on some systems.]
  10894.      
  10895.      sh[ 3]# gunzip -c < /usr/FSF/g77-0.5.22.tar.gz | tar xf -
  10896.      ["Broken pipe" again possible.]
  10897.      
  10898.      sh[ 4]# ln -s gcc-2.7.2.3 gcc
  10899.      
  10900.      sh[ 5]# ln -s g77-0.5.22 g77
  10901.      
  10902.      sh[ 6]# mv -i g77/* gcc
  10903.      [No questions should be asked by mv here; or, you made a mistake.]
  10904.      
  10905.      sh[ 7]# patch -p1 -E -V t -d gcc < gcc/f/gbe/2.7.2.3.diff
  10906.      [Unless patch complains about rejected patches, this step worked.]
  10907.      
  10908.      sh[ 8]# cd gcc
  10909.      sh[ 9]# touch f77-install-ok
  10910.      [Do not do the above if your system already has an f77
  10911.      command, unless you've checked that overwriting it
  10912.      is okay.]
  10913.      
  10914.      sh[10]# touch f2c-install-ok
  10915.      [Do not do the above if your system already has an f2c
  10916.      command, unless you've checked that overwriting it
  10917.      is okay.  Else, touch f2c-exists-ok.]
  10918.      
  10919.      sh[11]# ./configure --prefix=/usr
  10920.      [Do not do the above if gcc is not installed in /usr/bin.
  10921.      You might need a different --prefix=..., as
  10922.      described below.]
  10923.      
  10924.      sh[12]# make bootstrap
  10925.      [This takes a long time, and is where most problems occur.]
  10926.      
  10927.      sh[13]# make compare
  10928.      [This verifies that the compiler is `sane'.  Only
  10929.      the file `f/zzz.o' (aka `tmp-foo1' and `tmp-foo2')
  10930.      should be in the list of object files this command
  10931.      prints as having different contents.  If other files
  10932.      are printed, you have likely found a g77 bug.]
  10933.      
  10934.      sh[14]# rm -fr stage1
  10935.      
  10936.      sh[15]# make -k install
  10937.      [The actual installation.]
  10938.      
  10939.      sh[16]# g77 -v
  10940.      [Verify that g77 is installed, obtain version info.]
  10941.      
  10942.      sh[17]#
  10943.    *Note Updating Your Info Directory: Updating Documentation, for
  10944. information on how to update your system's top-level `info' directory
  10945. to contain a reference to this manual, so that users of `g77' can
  10946. easily find documentation instead of having to ask you for it.
  10947.    Elaborations of many of the above steps follows:
  10948. Step 1: `cd /usr/src'
  10949.      You can build `g77' pretty much anyplace.  By convention, this
  10950.      manual assumes `/usr/src'.  It might be helpful if other users on
  10951.      your system knew where to look for the source code for the
  10952.      installed version of `g77' and `gcc' in any case.
  10953. Step 3: `gunzip -d < /usr/FSF/g77-0.5.22.tar.gz | tar xf -'
  10954.      It is not always necessary to obtain the latest version of `g77'
  10955.      as a complete `.tar.gz' file if you have a complete, earlier
  10956.      distribution of `g77'.  If appropriate, you can unpack that earlier
  10957.      version of `g77', and then apply the appropriate patches to
  10958.      achieve the same result--a source tree containing version
  10959.      0.5.22 of `g77'.
  10960. Step 4: `ln -s gcc-2.7.2.3 gcc'
  10961. Step 5: `ln -s g77-0.5.22 g77'
  10962.      These commands mainly help reduce typing, and help reduce visual
  10963.      clutter in examples in this manual showing what to type to install
  10964.      `g77'.
  10965.      *Note Unpacking::, for information on using distributions of `g77'
  10966.      made by organizations other than the FSF.
  10967. Step 6: `mv -i g77/* gcc'
  10968.      After doing this, you can, if you like, type `rm g77' and `rmdir
  10969.      g77-0.5.22' to remove the empty directory and the symbol link to
  10970.      it.  But, it might be helpful to leave them around as quick
  10971.      reminders of which version(s) of `g77' are installed on your
  10972.      system.
  10973.      *Note Unpacking::, for information on the contents of the `g77'
  10974.      directory (as merged into the `gcc' directory).
  10975. Step 7: `patch -p1 ...'
  10976.      If you are using GNU `patch' version 2.5 or later, this should
  10977.      produce a list of files patched.  (Other versions of `patch' might
  10978.      not work properly.)
  10979.      If messages about "fuzz", "offset", or especially "reject files"
  10980.      are printed, it might mean you applied the wrong patch file.  If
  10981.      you believe this is the case, it is best to restart the sequence
  10982.      after deleting (or at least renaming to unused names) the
  10983.      top-level directories for `g77' and `gcc' and their symbolic links.
  10984.      After this command finishes, the `gcc' directory might have old
  10985.      versions of several files as saved by `patch'.  To remove these,
  10986.      after `cd gcc', type `rm -i *.~*~'.
  10987.      *Note Merging Distributions::, for more information.
  10988.      *Note:* `gcc' versions circa 2.7.2.2 and 2.7.2.3 are known to have
  10989.      slightly differing versions of the `gcc/ChangeLog' file, depending
  10990.      on how they are obtained.  You can safely ignore diagnostics
  10991.      `patch' reports when patching this particular file, since it is
  10992.      purely a documentation file for implementors.  See
  10993.      `gcc/f/gbe/2.7.2.3.diff' for more information.
  10994. Step 9: `touch f77-install-ok'
  10995.      Don't do this if you don't want to overwrite an existing version
  10996.      of `f77' (such as a native compiler, or a script that invokes
  10997.      `f2c').  Otherwise, installation will overwrite the `f77' command
  10998.      and the `f77' man pages with copies of the corresponding `g77'
  10999.      material.
  11000.      *Note Installing `f77': Installing f77, for more information.
  11001. Step 10: `touch f2c-install-ok'
  11002.      Don't do this if you don't want to overwrite an existing
  11003.      installation of `libf2c' (though, chances are, you do).  Instead,
  11004.      `touch f2c-exists-ok' to allow the installation to continue
  11005.      without any error messages about `/usr/lib/libf2c.a' already
  11006.      existing.
  11007.      *Note Installing `f2c': Installing f2c, for more information.
  11008. Step 11: `./configure --prefix=/usr'
  11009.      This is where you specify that the `g77' executable is to be
  11010.      installed in `/usr/bin/', the `libf2c.a' library is to be
  11011.      installed in `/usr/lib/', and so on.
  11012.      You should ensure that any existing installation of the `gcc'
  11013.      executable is in `/usr/bin/'.  Otherwise, installing `g77' so that
  11014.      it does not fully replace the existing installation of `gcc' is
  11015.      likely to result in the inability to compile Fortran programs.
  11016.      *Note Where in the World Does Fortran (and GNU CC) Go?: Where to
  11017.      Install, for more information on determining where to install
  11018.      `g77'.  *Note Configuring gcc::, for more information on the
  11019.      configuration process triggered by invoking the `./configure'
  11020.      script.
  11021. Step 12: `make bootstrap'
  11022.      *Note Installing GNU CC: (gcc)Installation, for information on the
  11023.      kinds of diagnostics you should expect during this procedure.
  11024.      *Note Building gcc::, for complete `g77'-specific information on
  11025.      this step.
  11026. Step 13: `make compare'
  11027.      *Note Where to Port Bugs: Bug Lists, for information on where to
  11028.      report that you observed more than `f/zzz.o' having different
  11029.      contents during this phase.
  11030.      *Note How to Report Bugs: Bug Reporting, for information on *how*
  11031.      to report bugs like this.
  11032. Step 14: `rm -fr stage1'
  11033.      You don't need to do this, but it frees up disk space.
  11034. Step 15: `make -k install'
  11035.      If this doesn't seem to work, try:
  11036.           make -k install install-libf77 install-f2c-all
  11037.      *Note Installation of Binaries::, for more information.
  11038.      *Note Updating Your Info Directory: Updating Documentation, for
  11039.      information on entering this manual into your system's list of
  11040.      texinfo manuals.
  11041. Step 16: `g77 -v'
  11042.      If this command prints approximately 25 lines of output, including
  11043.      the GNU Fortran Front End version number (which should be the same
  11044.      as the version number for the version of `g77' you just built and
  11045.      installed) and the version numbers for the three parts of the
  11046.      `libf2c' library (`libF77', `libI77', `libU77'), and those version
  11047.      numbers are all in agreement, then there is a high likelihood that
  11048.      the installation has been successfully completed.
  11049.      You might consider doing further testing.  For example, log in as
  11050.      a non-privileged user, then create a small Fortran program, such
  11051.      as:
  11052.                 PROGRAM SMTEST
  11053.                 DO 10 I=1, 10
  11054.                    PRINT *, 'Hello World #', I
  11055.           10    CONTINUE
  11056.                 END
  11057.      Compile, link, and run the above program, and, assuming you named
  11058.      the source file `smtest.f', the session should look like this:
  11059.           sh# g77 -o smtest smtest.f
  11060.           sh# ./smtest
  11061.            Hello World # 1
  11062.            Hello World # 2
  11063.            Hello World # 3
  11064.            Hello World # 4
  11065.            Hello World # 5
  11066.            Hello World # 6
  11067.            Hello World # 7
  11068.            Hello World # 8
  11069.            Hello World # 9
  11070.            Hello World # 10
  11071.           sh#
  11072.      After proper installation, you don't need to keep your gcc and g77
  11073.      source and build directories around anymore.  Removing them can
  11074.      free up a lot of disk space.
  11075. File: g77.info,  Node: Complete Installation,  Next: Distributing Binaries,  Prev: Quick Start,  Up: Installation
  11076. Complete Installation
  11077. =====================
  11078.    Here is the complete `g77'-specific information on how to configure,
  11079. build, and install `g77'.
  11080. * Menu:
  11081. * Unpacking::
  11082. * Merging Distributions::
  11083. * f77: Installing f77.
  11084. * f2c: Installing f2c.
  11085. * Patching GNU Fortran::
  11086. * Where to Install::
  11087. * Configuring gcc::
  11088. * Building gcc::
  11089. * Pre-installation Checks::
  11090. * Installation of Binaries::
  11091. * Updating Documentation::
  11092. * bison: Missing bison?.
  11093. * makeinfo: Missing makeinfo?.
  11094. File: g77.info,  Node: Unpacking,  Next: Merging Distributions,  Up: Complete Installation
  11095. Unpacking
  11096. ---------
  11097.    The `gcc' source distribution is a stand-alone distribution.  It is
  11098. designed to be unpacked (producing the `gcc' source tree) and built as
  11099. is, assuming certain prerequisites are met (including the availability
  11100. of compatible UNIX programs such as `make', `cc', and so on).
  11101.    However, before building `gcc', you will want to unpack and merge
  11102. the `g77' distribution in with it, so that you build a Fortran-capable
  11103. version of `gcc', which includes the `g77' command, the necessary
  11104. run-time libraries, and this manual.
  11105.    Unlike `gcc', the `g77' source distribution is *not* a stand-alone
  11106. distribution.  It is designed to be unpacked and, afterwards,
  11107. immediately merged into an applicable `gcc' source tree.  That is, the
  11108. `g77' distribution *augments* a `gcc' distribution--without `gcc',
  11109. generally only the documentation is immediately usable.
  11110.    A sequence of commands typically used to unpack `gcc' and `g77' is:
  11111.      sh# cd /usr/src
  11112.      sh# gunzip -c /usr/FSF/gcc-2.7.2.3.tar.gz | tar xf -
  11113.      sh# gunzip -c /usr/FSF/g77-0.5.22.tar.gz | tar xf -
  11114.      sh# ln -s gcc-2.7.2.3 gcc
  11115.      sh# ln -s g77-0.5.22 g77
  11116.      sh# mv -i g77/* gcc
  11117.    *Notes:* The commands beginning with `gunzip...' might print `Broken
  11118. pipe...' as they complete.  That is nothing to worry about, unless you
  11119. actually *hear* a pipe breaking.  The `ln' commands are helpful in
  11120. reducing typing and clutter in installation examples in this manual.
  11121. Hereafter, the top level of `gcc' source tree is referred to as `gcc',
  11122. and the top level of just the `g77' source tree (prior to issuing the
  11123. `mv' command, above) is referred to as `g77'.
  11124.    There are three top-level names in a `g77' distribution:
  11125.      g77/COPYING.g77
  11126.      g77/README.g77
  11127.      g77/f
  11128.    All three entries should be moved (or copied) into a `gcc' source
  11129. tree (typically named after its version number and as it appears in the
  11130. FSF distributions--e.g. `gcc-2.7.2.3').
  11131.    `g77/f' is the subdirectory containing all of the code,
  11132. documentation, and other information that is specific to `g77'.  The
  11133. other two files exist to provide information on `g77' to someone
  11134. encountering a `gcc' source tree with `g77' already present, who has
  11135. not yet read these installation instructions and thus needs help
  11136. understanding that the source tree they are looking at does not come
  11137. from a single FSF distribution.  They also help people encountering an
  11138. unmerged `g77' source tree for the first time.
  11139.    *Note:* Please use *only* `gcc' and `g77' source trees as
  11140. distributed by the FSF.  Use of modified versions, such as the
  11141. Pentium-specific-optimization port of `gcc', is likely to result in
  11142. problems that appear to be in the `g77' code but, in fact, are not.  Do
  11143. not use such modified versions unless you understand all the
  11144. differences between them and the versions the FSF distributes--in which
  11145. case you should be able to modify the `g77' (or `gcc') source trees
  11146. appropriately so `g77' and `gcc' can coexist as they do in the stock
  11147. FSF distributions.
  11148. File: g77.info,  Node: Merging Distributions,  Next: Installing f77,  Prev: Unpacking,  Up: Complete Installation
  11149. Merging Distributions
  11150. ---------------------
  11151.    After merging the `g77' source tree into the `gcc' source tree, the
  11152. final merge step is done by applying the pertinent patches the `g77'
  11153. distribution provides for the `gcc' source tree.
  11154.    Read the file `gcc/f/gbe/README', and apply the appropriate patch
  11155. file for the version of the GNU CC compiler you have, if that exists.
  11156. If the directory exists but the appropriate file does not exist, you
  11157. are using either an old, unsupported version, or a release one that is
  11158. newer than the newest `gcc' version supported by the version of `g77'
  11159. you have.
  11160.    As of version 0.5.18, `g77' modifies the version number of `gcc' via
  11161. the pertinent patches.  This is done because the resulting version of
  11162. `gcc' is deemed sufficiently different from the vanilla distribution to
  11163. make it worthwhile to present, to the user, information signaling the
  11164. fact that there are some differences.
  11165.    GNU version numbers make it easy to figure out whether a particular
  11166. version of a distribution is newer or older than some other version of
  11167. that distribution.  The format is, generally, MAJOR.MINOR.PATCH, with
  11168. each field being a decimal number.  (You can safely ignore leading
  11169. zeros; for example, 1.5.3 is the same as 1.5.03.)  The MAJOR field only
  11170. increases with time.  The other two fields are reset to 0 when the
  11171. field to their left is incremented; otherwise, they, too, only increase
  11172. with time.  So, version 2.6.2 is newer than version 2.5.8, and version
  11173. 3.0 is newer than both.  (Trailing `.0' fields often are omitted in
  11174. announcements and in names for distributions and the directories they
  11175. create.)
  11176.    If your version of `gcc' is older than the oldest version supported
  11177. by `g77' (as casually determined by listing the contents of
  11178. `gcc/f/gbe/'), you should obtain a newer, supported version of `gcc'.
  11179. (You could instead obtain an older version of `g77', or try and get
  11180. your `g77' to work with the old `gcc', but neither approach is
  11181. recommended, and you shouldn't bother reporting any bugs you find if you
  11182. take either approach, because they're probably already fixed in the
  11183. newer versions you're not using.)
  11184.    If your version of `gcc' is newer than the newest version supported
  11185. by `g77', it is possible that your `g77' will work with it anyway.  If
  11186. the version number for `gcc' differs only in the PATCH field, you might
  11187. as well try applying the `g77' patch that is for the newest version of
  11188. `gcc' having the same MAJOR and MINOR fields, as this is likely to work.
  11189.    So, for example, if a particular version of `g77' has support for
  11190. `gcc' versions 2.7.0 and 2.7.1, it is likely that `gcc-2.7.2' would
  11191. work well with `g77' by using the `2.7.1.diff' patch file provided with
  11192. `g77' (aside from some offsets reported by `patch', which usually are
  11193. harmless).
  11194.    However, `gcc-2.8.0' would almost certainly not work with that
  11195. version of `g77' no matter which patch file was used, so a new version
  11196. of `g77' would be needed (and you should wait for it rather than
  11197. bothering the maintainers--*note User-Visible Changes: Changes.).
  11198.    This complexity is the result of `gcc' and `g77' being separate
  11199. distributions.  By keeping them separate, each product is able to be
  11200. independently improved and distributed to its user base more frequently.
  11201.    However, `g77' often requires changes to contemporary versions of
  11202. `gcc'.  Also, the GBE interface defined by `gcc' typically undergoes
  11203. some incompatible changes at least every time the MINOR field of the
  11204. version number is incremented, and such changes require corresponding
  11205. changes to the `g77' front end (FFE).
  11206.    It is hoped that the GBE interface, and the `gcc' and `g77' products
  11207. in general, will stabilize sufficiently for the need for hand-patching
  11208. to disappear.
  11209.    If you are using GNU `patch' version 2.5 or later, this should
  11210. produce a list of files patched.  (Other versions of `patch' might not
  11211. work properly.)
  11212.    If messages about "fuzz", "offset", or especially "reject files" are
  11213. printed, it might mean you applied the wrong patch file.  If you
  11214. believe this is the case, it is best to restart the sequence after
  11215. deleting (or at least renaming to unused names) the top-level
  11216. directories for `g77' and `gcc' and their symbolic links.  That is
  11217. because `patch' might have partially patched some `gcc' source files,
  11218. so reapplying the correct patch file might result in the correct
  11219. patches being applied incorrectly (due to the way `patch' necessarily
  11220. works).
  11221.    After `patch' finishes, the `gcc' directory might have old versions
  11222. of several files as saved by `patch'.  To remove these, after `cd gcc',
  11223. type `rm -i *.~*~'.
  11224.    *Note:* `gcc' versions circa 2.7.2.2 and 2.7.2.3 are known to have
  11225. slightly differing versions of the `gcc/ChangeLog' file, depending on
  11226. how they are obtained.  You can safely ignore diagnostics `patch'
  11227. reports when patching this particular file, since it is purely a
  11228. documentation file for implementors.  See `gcc/f/gbe/2.7.2.3.diff' for
  11229. more information.
  11230.    *Note:* `g77''s configuration file `gcc/f/config-lang.in' ensures
  11231. that the source code for the version of `gcc' being configured has at
  11232. least one indication of being patched as required specifically by `g77'.
  11233. This configuration-time checking should catch failure to apply the
  11234. correct patch and, if so caught, should abort the configuration with an
  11235. explanation.  *Please* do not try to disable the check, otherwise `g77'
  11236. might well appear to build and install correctly, and even appear to
  11237. compile correctly, but could easily produce broken code.
  11238.    `LC_ALL=C TZ=UTC0 diff -rcp2N' is used to create the patch files in
  11239. `gcc/f/gbe/'.
  11240. File: g77.info,  Node: Installing f77,  Next: Installing f2c,  Prev: Merging Distributions,  Up: Complete Installation
  11241. Installing `f77'
  11242. ----------------
  11243.    You should decide whether you want installation of `g77' to also
  11244. install an `f77' command.  On systems with a native `f77', this is not
  11245. normally desired, so `g77' does not do this by default.
  11246.    If you want `f77' installed, create the file `f77-install-ok' (e.g.
  11247. via the UNIX command `touch f77-install-ok') in the source or build
  11248. top-level directory (the same directory in which the `g77' `f'
  11249. directory resides, not the `f' directory itself), or edit
  11250. `gcc/f/Make-lang.in' and change the definition of the
  11251. `F77_INSTALL_FLAG' macro appropriately.
  11252.    Usually, this means that, after typing `cd gcc', you would type
  11253. `touch f77-install-ok'.
  11254.    When you enable installation of `f77', either a link to or a direct
  11255. copy of the `g77' command is made.  Similarly, `f77.1' is installed as
  11256. a man page.
  11257.    (The `uninstall' target in the `gcc/Makefile' also tests this macro
  11258. and file, when invoked, to determine whether to delete the installed
  11259. copies of `f77' and `f77.1'.)
  11260.    *Note:* No attempt is yet made to install a program (like a shell
  11261. script) that provides compatibility with any other `f77' programs.
  11262. Only the most rudimentary invocations of `f77' will work the same way
  11263. with `g77'.
  11264. File: g77.info,  Node: Installing f2c,  Next: Patching GNU Fortran,  Prev: Installing f77,  Up: Complete Installation
  11265. Installing `f2c'
  11266. ----------------
  11267.    Currently, `g77' does not include `f2c' itself in its distribution.
  11268. However, it does include a modified version of the `libf2c'.  This
  11269. version is normally compatible with `f2c', but has been modified to
  11270. meet the needs of `g77' in ways that might possibly be incompatible
  11271. with some versions or configurations of `f2c'.
  11272.    Decide how installation of `g77' should affect any existing
  11273. installation of `f2c' on your system.
  11274.    If you do not have `f2c' on your system (e.g. no `/usr/bin/f2c', no
  11275. `/usr/include/f2c.h', and no `/usr/lib/libf2c.a', `/usr/lib/libF77.a',
  11276. or `/usr/lib/libI77.a'), you don't need to be concerned with this item.
  11277.    If you do have `f2c' on your system, you need to decide how users of
  11278. `f2c' will be affected by your installing `g77'.  Since `g77' is
  11279. currently designed to be object-code-compatible with `f2c' (with very
  11280. few, clear exceptions), users of `f2c' might want to combine
  11281. `f2c'-compiled object files with `g77'-compiled object files in a
  11282. single executable.
  11283.    To do this, users of `f2c' should use the same copies of `f2c.h' and
  11284. `libf2c.a' that `g77' uses (and that get built as part of `g77').
  11285.    If you do nothing here, the `g77' installation process will not
  11286. overwrite the `include/f2c.h' and `lib/libf2c.a' files with its own
  11287. versions, and in fact will not even install `libf2c.a' for use with the
  11288. newly installed versions of `gcc' and `g77' if it sees that
  11289. `lib/libf2c.a' exists--instead, it will print an explanatory message
  11290. and skip this part of the installation.
  11291.    To install `g77''s versions of `f2c.h' and `libf2c.a' in the
  11292. appropriate places, create the file `f2c-install-ok' (e.g. via the UNIX
  11293. command `touch f2c-install-ok') in the source or build top-level
  11294. directory (the same directory in which the `g77' `f' directory resides,
  11295. not the `f' directory itself), or edit `gcc/f/Make-lang.in' and change
  11296. the definition of the `F2C_INSTALL_FLAG' macro appropriately.
  11297.    Usually, this means that, after typing `cd gcc', you would type
  11298. `touch f2c-install-ok'.
  11299.    Make sure that when you enable the overwriting of `f2c.h' and
  11300. `libf2c.a' as used by `f2c', you have a recent and properly configured
  11301. version of `bin/f2c' so that it generates code that is compatible with
  11302. `g77'.
  11303.    If you don't want installation of `g77' to overwrite `f2c''s existing
  11304. installation, but you do want `g77' installation to proceed with
  11305. installation of its own versions of `f2c.h' and `libf2c.a' in places
  11306. where `g77' will pick them up (even when linking `f2c'-compiled object
  11307. files--which might lead to incompatibilities), create the file
  11308. `f2c-exists-ok' (e.g. via the UNIX command `touch f2c-exists-ok') in
  11309. the source or build top-level directory, or edit `gcc/f/Make-lang.in'
  11310. and change the definition of the `F2CLIBOK' macro appropriately.
  11311. File: g77.info,  Node: Patching GNU Fortran,  Next: Where to Install,  Prev: Installing f2c,  Up: Complete Installation
  11312. Patching GNU Fortran
  11313. --------------------
  11314.    If you're using a SunOS4 system, you'll need to make the following
  11315. change to `gcc/f/proj.h': edit the line reading
  11316.      #define FFEPROJ_STRTOUL 1  ...
  11317. by replacing the `1' with `0'.  Or, you can avoid editing the source by
  11318. adding
  11319.      CFLAGS='-DFFEPROJ_STRTOUL=0 -g -O'
  11320.    to the command line for `make' when you invoke it.  (`-g' is the
  11321. default for `CFLAGS'.)
  11322.    This causes a minimal version of `strtoul()' provided as part of the
  11323. `g77' distribution to be compiled and linked into whatever `g77'
  11324. programs need it, since some systems (like SunOS4 with only the bundled
  11325. compiler and its runtime) do not provide this function in their system
  11326. libraries.
  11327.    Similarly, a minimal version of `bsearch()' is available and can be
  11328. enabled by editing a line similar to the one for `strtoul()' above in
  11329. `gcc/f/proj.h', if your system libraries lack `bsearch()'.  The method
  11330. of overriding `X_CFLAGS' may also be used.
  11331.    These are not problems with `g77', which requires an ANSI C
  11332. environment.  You should upgrade your system to one that provides a
  11333. full ANSI C environment, or encourage the maintainers of `gcc' to
  11334. provide one to all `gcc'-based compilers in future `gcc' distributions.
  11335.    *Note Problems Installing::, for more information on why `strtoul()'
  11336. comes up missing and on approaches to dealing with this problem that
  11337. have already been tried.
  11338. File: g77.info,  Node: Where to Install,  Next: Configuring gcc,  Prev: Patching GNU Fortran,  Up: Complete Installation
  11339. Where in the World Does Fortran (and GNU CC) Go?
  11340. ------------------------------------------------
  11341.    Before configuring, you should make sure you know where you want the
  11342. `g77' and `gcc' binaries to be installed after they're built, because
  11343. this information is given to the configuration tool and used during the
  11344. build itself.
  11345.    A `g77' installation necessarily requires installation of a
  11346. `g77'-aware version of `gcc', so that the `gcc' command recognizes
  11347. Fortran source files and knows how to compile them.
  11348.    For this to work, the version of `gcc' that you will be building as
  11349. part of `g77' *must* be installed as the "active" version of `gcc' on
  11350. the system.
  11351.    Sometimes people make the mistake of installing `gcc' as
  11352. `/usr/local/bin/gcc', leaving an older, non-Fortran-aware version in
  11353. `/usr/bin/gcc'.  (Or, the opposite happens.)  This can result in `g77'
  11354. being unable to compile Fortran source files, because when it calls on
  11355. `gcc' to do the actual compilation, `gcc' complains that it does not
  11356. recognize the language, or the file name suffix.
  11357.    So, determine whether `gcc' already is installed on your system,
  11358. and, if so, *where* it is installed, and prepare to configure the new
  11359. version of `gcc' you'll be building so that it installs over the
  11360. existing version of `gcc'.
  11361.    You might want to back up your existing copy of `bin/gcc', and the
  11362. entire `lib/' directory, before you perform the actual installation (as
  11363. described in this manual).
  11364.    Existing `gcc' installations typically are found in `/usr' or
  11365. `/usr/local'.  If you aren't certain where the currently installed
  11366. version of `gcc' and its related programs reside, look at the output of
  11367. this command:
  11368.      gcc -v -o /tmp/delete-me -xc /dev/null -xnone
  11369.    All sorts of interesting information on the locations of various
  11370. `gcc'-related programs and data files should be visible in the output
  11371. of the above command.  (The output also is likely to include a
  11372. diagnostic from the linker, since there's no `main_()' function.)
  11373. However, you do have to sift through it yourself; `gcc' currently
  11374. provides no easy way to ask it where it is installed and where it looks
  11375. for the various programs and data files it calls on to do its work.
  11376.    Just *building* `g77' should not overwrite any installed
  11377. programs--but, usually, after you build `g77', you will want to install
  11378. it, so backing up anything it might overwrite is a good idea.  (This is
  11379. true for any package, not just `g77', though in this case it is
  11380. intentional that `g77' overwrites `gcc' if it is already installed--it
  11381. is unusual that the installation process for one distribution
  11382. intentionally overwrites a program or file installed by another
  11383. distribution.)
  11384.    Another reason to back up the existing version first, or make sure
  11385. you can restore it easily, is that it might be an older version on
  11386. which other users have come to depend for certain behaviors.  However,
  11387. even the new version of `gcc' you install will offer users the ability
  11388. to specify an older version of the actual compilation programs if
  11389. desired, and these older versions need not include any `g77' components.
  11390. *Note Specifying Target Machine and Compiler Version: (gcc)Target
  11391. Options, for information on the `-V' option of `gcc'.
  11392. File: g77.info,  Node: Configuring gcc,  Next: Building gcc,  Prev: Where to Install,  Up: Complete Installation
  11393. Configuring GNU CC
  11394. ------------------
  11395.    `g77' is configured automatically when you configure `gcc'.  There
  11396. are two parts of `g77' that are configured in two different
  11397. ways--`g77', which "camps on" to the `gcc' configuration mechanism, and
  11398. `libf2c', which uses a variation of the GNU `autoconf' configuration
  11399. system.
  11400.    Generally, you shouldn't have to be concerned with either `g77' or
  11401. `libf2c' configuration, unless you're configuring `g77' as a
  11402. cross-compiler.  In this case, the `libf2c' configuration, and possibly
  11403. the `g77' and `gcc' configurations as well, might need special
  11404. attention.  (This also might be the case if you're porting `gcc' to a
  11405. whole new system--even if it is just a new operating system on an
  11406. existing, supported CPU.)
  11407.    To configure the system, see *Note Installing GNU CC:
  11408. (gcc)Installation, following the instructions for running `./configure'.
  11409. Pay special attention to the `--prefix=' option, which you almost
  11410. certainly will need to specify.
  11411.    (Note that `gcc' installation information is provided as a straight
  11412. text file in `gcc/INSTALL'.)
  11413.    The information printed by the invocation of `./configure' should
  11414. show that the `f' directory (the Fortran language) has been configured.
  11415. If it does not, there is a problem.
  11416.    *Note:* Configuring with the `--srcdir' argument is known to work
  11417. with GNU `make', but it is not known to work with other variants of
  11418. `make'.  Irix5.2 and SunOS4.1 versions of `make' definitely won't work
  11419. outside the source directory at present.  `g77''s portion of the
  11420. `configure' script issues a warning message about this when you
  11421. configure for building binaries outside the source directory.
  11422. File: g77.info,  Node: Building gcc,  Next: Pre-installation Checks,  Prev: Configuring gcc,  Up: Complete Installation
  11423. Building GNU CC
  11424. ---------------
  11425.    Building `g77' requires building enough of `gcc' that these
  11426. instructions assume you're going to build all of `gcc', including
  11427. `g++', `protoize', and so on.  You can save a little time and disk
  11428. space by changes the `LANGUAGES' macro definition in `gcc/Makefile.in'
  11429. or `gcc/Makefile', but if you do that, you're on your own.  One change
  11430. is almost *certainly* going to cause failures: removing `c' or `f77'
  11431. from the definition of the `LANGUAGES' macro.
  11432.    After configuring `gcc', which configures `g77' and `libf2c'
  11433. automatically, you're ready to start the actual build by invoking
  11434. `make'.
  11435.    *Note:* You *must* have run `./configure' before you run `make',
  11436. even if you're using an already existing `gcc' development directory,
  11437. because `./configure' does the work to recognize that you've added
  11438. `g77' to the configuration.
  11439.    There are two general approaches to building GNU CC from scratch:
  11440. "bootstrap"
  11441.      This method uses minimal native system facilities to build a
  11442.      barebones, unoptimized `gcc', that is then used to compile
  11443.      ("bootstrap") the entire system.
  11444. "straight"
  11445.      This method assumes a more complete native system exists, and uses
  11446.      that just once to build the entire system.
  11447.    On all systems without a recent version of `gcc' already installed,
  11448. the bootstrap method must be used.  In particular, `g77' uses
  11449. extensions to the C language offered, apparently, only by `gcc'.
  11450.    On most systems with a recent version of `gcc' already installed,
  11451. the straight method can be used.  This is an advantage, because it
  11452. takes less CPU time and disk space for the build.  However, it does
  11453. require that the system have fairly recent versions of many GNU
  11454. programs and other programs, which are not enumerated here.
  11455. * Menu:
  11456. * Bootstrap Build::  For all systems.
  11457. * Straight Build::   For systems with a recent version of `gcc'.
  11458. File: g77.info,  Node: Bootstrap Build,  Next: Straight Build,  Up: Building gcc
  11459. Bootstrap Build
  11460. ...............
  11461.    A complete bootstrap build is done by issuing a command beginning
  11462. with `make bootstrap ...', as described in *Note Installing GNU CC:
  11463. (gcc)Installation.  This is the most reliable form of build, but it
  11464. does require the most disk space and CPU time, since the complete system
  11465. is built twice (in Stages 2 and 3), after an initial build (during
  11466. Stage 1) of a minimal `gcc' compiler using the native compiler and
  11467. libraries.
  11468.    You might have to, or want to, control the way a bootstrap build is
  11469. done by entering the `make' commands to build each stage one at a time,
  11470. as described in the `gcc' manual.  For example, to save time or disk
  11471. space, you might want to not bother doing the Stage 3 build, in which
  11472. case you are assuming that the `gcc' compiler you have built is
  11473. basically sound (because you are giving up the opportunity to compare a
  11474. large number of object files to ensure they're identical).
  11475.    To save some disk space during installation, after Stage 2 is built,
  11476. you can type `rm -fr stage1' to remove the binaries built during Stage
  11477.    *Note:* *Note Object File Differences::, for information on expected
  11478. differences in object files produced during Stage 2 and Stage 3 of a
  11479. bootstrap build.  These differences will be encountered as a result of
  11480. using the `make compare' or similar command sequence recommended by the
  11481. GNU CC installation documentation.
  11482.    Also, *Note Installing GNU CC: (gcc)Installation, for important
  11483. information on building `gcc' that is not described in this `g77'
  11484. manual.  For example, explanations of diagnostic messages and whether
  11485. they're expected, or indicate trouble, are found there.
  11486. File: g77.info,  Node: Straight Build,  Prev: Bootstrap Build,  Up: Building gcc
  11487. Straight Build
  11488. ..............
  11489.    If you have a recent version of `gcc' already installed on your
  11490. system, and if you're reasonably certain it produces code that is
  11491. object-compatible with the version of `gcc' you want to build as part
  11492. of building `g77', you can save time and disk space by doing a straight
  11493. build.
  11494.    To build just the C and Fortran compilers and the necessary run-time
  11495. libraries, issue the following command:
  11496.      make -k CC=gcc LANGUAGES=f77 all g77
  11497.    (The `g77' target is necessary because the `gcc' build procedures
  11498. apparently do not automatically build command drivers for languages in
  11499. subdirectories.  It's the `all' target that triggers building
  11500. everything except, apparently, the `g77' command itself.)
  11501.    If you run into problems using this method, you have two options:
  11502.    * Abandon this approach and do a bootstrap build.
  11503.    * Try to make this approach work by diagnosing the problems you're
  11504.      running into and retrying.
  11505.    Especially if you do the latter, you might consider submitting any
  11506. solutions as bug/fix reports.  *Note Known Causes of Trouble with GNU
  11507. Fortran: Trouble.
  11508.    However, understand that many problems preventing a straight build
  11509. from working are not `g77' problems, and, in such cases, are not likely
  11510. to be addressed in future versions of `g77'.
  11511. File: g77.info,  Node: Pre-installation Checks,  Next: Installation of Binaries,  Prev: Building gcc,  Up: Complete Installation
  11512. Pre-installation Checks
  11513. -----------------------
  11514.    Before installing the system, which includes installing `gcc', you
  11515. might want to do some minimum checking to ensure that some basic things
  11516. work.
  11517.    Here are some commands you can try, and output typically printed by
  11518. them when they work:
  11519.      sh# cd /usr/src/gcc
  11520.      sh# ./g77 --driver=./xgcc -B./ -v
  11521.      g77 version 0.5.22
  11522.       ./xgcc -B./ -v -fnull-version -o /tmp/gfa18047 ...
  11523.      Reading specs from ./specs
  11524.      gcc version 2.7.2.3.f.2
  11525.       ./cpp -lang-c -v -isystem ./include -undef ...
  11526.      GNU CPP version 2.7.2.3.f.2 (Linux/Alpha)
  11527.      #include "..." search starts here:
  11528.      #include <...> search starts here:
  11529.       ./include
  11530.       /usr/local/include
  11531.       /usr/alpha-unknown-linux/include
  11532.       /usr/lib/gcc-lib/alpha-unknown-linux/2.7.2.3.f.2/include
  11533.       /usr/include
  11534.      End of search list.
  11535.       ./f771 /tmp/cca18048.i -fset-g77-defaults -quiet -dumpbase ...
  11536.      GNU F77 version 2.7.2.3.f.2 (Linux/Alpha) compiled ...
  11537.      GNU Fortran Front End version 0.5.22 compiled: ...
  11538.       as -nocpp -o /tmp/cca180481.o /tmp/cca18048.s
  11539.       ld -G 8 -O1 -o /tmp/gfa18047 /usr/lib/crt0.o -L. ...
  11540.      __G77_LIBF77_VERSION__: 0.5.22
  11541.      @(#)LIBF77 VERSION 19970404
  11542.      __G77_LIBI77_VERSION__: 0.5.22
  11543.      @(#) LIBI77 VERSION pjw,dmg-mods 19970816
  11544.      __G77_LIBU77_VERSION__: 0.5.22
  11545.      @(#) LIBU77 VERSION 19970609
  11546.      sh# ./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone
  11547.      Reading specs from ./specs
  11548.      gcc version 2.7.2.3.f.2
  11549.       ./cpp -lang-c -v -isystem ./include -undef ...
  11550.      GNU CPP version 2.7.2.3.f.2 (Linux/Alpha)
  11551.      #include "..." search starts here:
  11552.      #include <...> search starts here:
  11553.       ./include
  11554.       /usr/local/include
  11555.       /usr/alpha-unknown-linux/include
  11556.       /usr/lib/gcc-lib/alpha-unknown-linux/2.7.2.3.f.2/include
  11557.       /usr/include
  11558.      End of search list.
  11559.       ./cc1 /tmp/cca18063.i -quiet -dumpbase null.c -version ...
  11560.      GNU C version 2.7.2.3.f.2 (Linux/Alpha) compiled ...
  11561.       as -nocpp -o /tmp/cca180631.o /tmp/cca18063.s
  11562.       ld -G 8 -O1 -o /tmp/delete-me /usr/lib/crt0.o -L. ...
  11563.      /usr/lib/crt0.o: In function `__start':
  11564.      crt0.S:110: undefined reference to `main'
  11565.      /usr/lib/crt0.o(.lita+0x28): undefined reference to `main'
  11566.      sh#
  11567.    (Note that long lines have been truncated, and `...'  used to
  11568. indicate such truncations.)
  11569.    The above two commands test whether `g77' and `gcc', respectively,
  11570. are able to compile empty (null) source files, whether invocation of
  11571. the C preprocessor works, whether libraries can be linked, and so on.
  11572.    If the output you get from either of the above two commands is
  11573. noticeably different, especially if it is shorter or longer in ways
  11574. that do not look consistent with the above sample output, you probably
  11575. should not install `gcc' and `g77' until you have investigated further.
  11576.    For example, you could try compiling actual applications and seeing
  11577. how that works.  (You might want to do that anyway, even if the above
  11578. tests work.)
  11579.    To compile using the not-yet-installed versions of `gcc' and `g77',
  11580. use the following commands to invoke them.
  11581.    To invoke `g77', type:
  11582.      /usr/src/gcc/g77 --driver=/usr/src/gcc/xgcc -B/usr/src/gcc/ ...
  11583.    To invoke `gcc', type:
  11584.      /usr/src/gcc/xgcc -B/usr/src/gcc/ ...
  11585. File: g77.info,  Node: Installation of Binaries,  Next: Updating Documentation,  Prev: Pre-installation Checks,  Up: Complete Installation
  11586. Installation of Binaries
  11587. ------------------------
  11588.    After configuring, building, and testing `g77' and `gcc', when you
  11589. are ready to install them on your system, type:
  11590.      make -k CC=gcc LANGUAGES=f77 install
  11591.    As described in *Note Installing GNU CC: (gcc)Installation, the
  11592. values for the `CC' and `LANGUAGES' macros should be the same as those
  11593. you supplied for the build itself.
  11594.    So, the details of the above command might vary if you used a
  11595. bootstrap build (where you might be able to omit both definitions, or
  11596. might have to supply the same definitions you used when building the
  11597. final stage) or if you deviated from the instructions for a straight
  11598. build.
  11599.    If the above command does not install `libf2c.a' as expected, try
  11600. this:
  11601.      make -k ... install install-libf77 install-f2c-all
  11602.    We don't know why some non-GNU versions of `make' sometimes require
  11603. this alternate command, but they do.  (Remember to supply the
  11604. appropriate definitions for `CC' and `LANGUAGES' where you see `...' in
  11605. the above command.)
  11606.    Note that using the `-k' option tells `make' to continue after some
  11607. installation problems, like not having `makeinfo' installed on your
  11608. system.  It might not be necessary for your system.
  11609. File: g77.info,  Node: Updating Documentation,  Next: Missing bison?,  Prev: Installation of Binaries,  Up: Complete Installation
  11610. Updating Your Info Directory
  11611. ----------------------------
  11612.    As part of installing `g77', you should make sure users of `info'
  11613. can easily access this manual on-line.  Do this by making sure a line
  11614. such as the following exists in `/usr/info/dir', or in whatever file is
  11615. the top-level file in the `info' directory on your system (perhaps
  11616. `/usr/local/info/dir':
  11617.      * g77: (g77).           The GNU Fortran programming language.
  11618.    If the menu in `dir' is organized into sections, `g77' probably
  11619. belongs in a section with a name such as one of the following:
  11620.    * Fortran Programming
  11621.    * Writing Programs
  11622.    * Programming Languages
  11623.    * Languages Other Than C
  11624.    * Scientific/Engineering Tools
  11625.    * GNU Compilers
  11626. File: g77.info,  Node: Missing bison?,  Next: Missing makeinfo?,  Prev: Updating Documentation,  Up: Complete Installation
  11627. Missing `bison'?
  11628. ----------------
  11629.    If you cannot install `bison', make sure you have started with a
  11630. *fresh* distribution of `gcc', do *not* do `make maintainer-clean' (in
  11631. other versions of `gcc', this was called `make realclean'), and, to
  11632. ensure that `bison' is not invoked by `make' during the build, type
  11633. these commands:
  11634.      sh# cd gcc
  11635.      sh# touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c
  11636.      sh# touch cp/parse.c cp/parse.h objc-parse.c
  11637.      sh#
  11638.    These commands update the date-time-modified information for all the
  11639. files produced by the various invocations of `bison' in the current
  11640. versions of `gcc', so that `make' no longer believes it needs to update
  11641. them.  All of these files should already exist in a `gcc' distribution,
  11642. but the application of patches to upgrade to a newer version can leave
  11643. the modification information set such that the `bison' input files look
  11644. more "recent" than the corresponding output files.
  11645.    *Note:* New versions of `gcc' might change the set of files it
  11646. generates by invoking `bison'--if you cannot figure out for yourself
  11647. how to handle such a situation, try an older version of `gcc' until you
  11648. find someone who can (or until you obtain and install `bison').
  11649. File: g77.info,  Node: Missing makeinfo?,  Prev: Missing bison?,  Up: Complete Installation
  11650. Missing `makeinfo'?
  11651. -------------------
  11652.    If you cannot install `makeinfo', either use the `-k' option when
  11653. invoking make to specify any of the `install' or related targets, or
  11654. specify `MAKEINFO=echo' on the `make' command line.
  11655.    If you fail to do one of these things, some files, like `libf2c.a',
  11656. might not be installed, because the failed attempt by `make' to invoke
  11657. `makeinfo' causes it to cancel any further processing.
  11658. File: g77.info,  Node: Distributing Binaries,  Prev: Complete Installation,  Up: Installation
  11659. Distributing Binaries
  11660. =====================
  11661.    If you are building `g77' for distribution to others in binary form,
  11662. first make sure you are aware of your legal responsibilities (read the
  11663. file `gcc/COPYING' thoroughly).
  11664.    Then, consider your target audience and decide where `g77' should be
  11665. installed.
  11666.    For systems like GNU/Linux that have no native Fortran compiler (or
  11667. where `g77' could be considered the native compiler for Fortran and
  11668. `gcc' for C, etc.), you should definitely configure `g77' for
  11669. installation in `/usr/bin' instead of `/usr/local/bin'.  Specify the
  11670. `--prefix=/usr' option when running `./configure'.  You might also want
  11671. to set up the distribution so the `f77' command is a link to
  11672. `g77'--just make an empty file named `f77-install-ok' in the source or
  11673. build directory (the one in which the `f' directory resides, not the
  11674. `f' directory itself) when you specify one of the `install' or
  11675. `uninstall' targets in a `make' command.
  11676.    For a system that might already have `f2c' installed, you definitely
  11677. will want to make another empty file (in the same directory) named
  11678. either `f2c-exists-ok' or `f2c-install-ok'.  Use the former if you
  11679. don't want your distribution to overwrite `f2c'-related files in
  11680. existing systems; use the latter if you want to improve the likelihood
  11681. that users will be able to use both `f2c' and `g77' to compile code for
  11682. a single program without encountering link-time or run-time
  11683. incompatibilities.
  11684.    (Make sure you clearly document, in the "advertising" for your
  11685. distribution, how installation of your distribution will affect
  11686. existing installations of `gcc', `f2c', `f77', `libf2c.a', and so on.
  11687. Similarly, you should clearly document any requirements you assume are
  11688. met by users of your distribution.)
  11689.    For other systems with native `f77' (and `cc') compilers, configure
  11690. `g77' as you (or most of your audience) would configure `gcc' for their
  11691. installations.  Typically this is for installation in `/usr/local', and
  11692. would not include a copy of `g77' named `f77', so users could still use
  11693. the native `f77'.
  11694.    In any case, for `g77' to work properly, you *must* ensure that the
  11695. binaries you distribute include:
  11696. `bin/g77'
  11697.      This is the command most users use to compile Fortran.
  11698. `bin/gcc'
  11699.      This is the command all users use to compile Fortran, either
  11700.      directly or indirectly via the `g77' command.  The `bin/gcc'
  11701.      executable file must have been built from a `gcc' source tree into
  11702.      which a `g77' source tree was merged and configured, or it will
  11703.      not know how to compile Fortran programs.
  11704. `bin/f77'
  11705.      In installations with no non-GNU native Fortran compiler, this is
  11706.      the same as `bin/g77'.  Otherwise, it should be omitted from the
  11707.      distribution, so the one on already on a particular system does
  11708.      not get overwritten.
  11709. `info/g77.info*'
  11710.      This is the documentation for `g77'.  If it is not included, users
  11711.      will have trouble understanding diagnostics messages and other
  11712.      such things, and will send you a lot of email asking questions.
  11713.      Please edit this documentation (by editing `gcc/f/*.tex' and doing
  11714.      `make doc' from the `/usr/src/gcc' directory) to reflect any
  11715.      changes you've made to `g77', or at least to encourage users of
  11716.      your binary distribution to report bugs to you first.
  11717.      Also, whether you distribute binaries or install `g77' on your own
  11718.      system, it might be helpful for everyone to add a line listing
  11719.      this manual by name and topic to the top-level `info' node in
  11720.      `/usr/info/dir'.  That way, users can find `g77' documentation more
  11721.      easily.  *Note Updating Your Info Directory: Updating
  11722.      Documentation.
  11723. `man/man1/g77.1'
  11724.      This is the short man page for `g77'.  It is out of date, but you
  11725.      might as well include it for people who really like man pages.
  11726. `man/man1/f77.1'
  11727.      In installations where `f77' is the same as `g77', this is the
  11728.      same as `man/man1/g77.1'.  Otherwise, it should be omitted from
  11729.      the distribution, so the one already on a particular system does
  11730.      not get overwritten.
  11731. `lib/gcc-lib/.../f771'
  11732.      This is the actual Fortran compiler.
  11733. `lib/gcc-lib/.../libf2c.a'
  11734.      This is the run-time library for `g77'-compiled programs.
  11735.    Whether you want to include the slightly updated (and possibly
  11736. improved) versions of `cc1', `cc1plus', and whatever other binaries get
  11737. rebuilt with the changes the GNU Fortran distribution makes to the GNU
  11738. back end, is up to you.  These changes are highly unlikely to break any
  11739. compilers, and it is possible they'll fix back-end bugs that can be
  11740. demonstrated using front ends other than GNU Fortran's.
  11741.    Please assure users that unless they have a specific need for their
  11742. existing, older versions of `gcc' command, they are unlikely to
  11743. experience any problems by overwriting it with your version--though
  11744. they could certainly protect themselves by making backup copies first!
  11745. Otherwise, users might try and install your binaries in a "safe" place,
  11746. find they cannot compile Fortran programs with your distribution
  11747. (because, perhaps, they're picking up their old version of the `gcc'
  11748. command, which does not recognize Fortran programs), and assume that
  11749. your binaries (or, more generally, GNU Fortran distributions in
  11750. general) are broken, at least for their system.
  11751.    Finally, *please* ask for bug reports to go to you first, at least
  11752. until you're sure your distribution is widely used and has been well
  11753. tested.  This especially goes for those of you making any changes to
  11754. the `g77' sources to port `g77', e.g. to OS/2.  <fortran@gnu.org> has
  11755. received a fair number of bug reports that turned out to be problems
  11756. with other peoples' ports and distributions, about which nothing could
  11757. be done for the user.  Once you are quite certain a bug report does not
  11758. involve your efforts, you can forward it to us.
  11759. File: g77.info,  Node: Debugging and Interfacing,  Next: Collected Fortran Wisdom,  Prev: Installation,  Up: Top
  11760. Debugging and Interfacing
  11761. *************************
  11762.    GNU Fortran currently generates code that is object-compatible with
  11763. the `f2c' converter.  Also, it avoids limitations in the current GBE,
  11764. such as the inability to generate a procedure with multiple entry
  11765. points, by generating code that is structured differently (in terms of
  11766. procedure names, scopes, arguments, and so on) than might be expected.
  11767.    As a result, writing code in other languages that calls on, is
  11768. called by, or shares in-memory data with `g77'-compiled code generally
  11769. requires some understanding of the way `g77' compiles code for various
  11770. constructs.
  11771.    Similarly, using a debugger to debug `g77'-compiled code, even if
  11772. that debugger supports native Fortran debugging, generally requires
  11773. this sort of information.
  11774.    This section describes some of the basic information on how `g77'
  11775. compiles code for constructs involving interfaces to other languages
  11776. and to debuggers.
  11777.    *Caution:* Much or all of this information pertains to only the
  11778. current release of `g77', sometimes even to using certain compiler
  11779. options with `g77' (such as `-fno-f2c').  Do not write code that
  11780. depends on this information without clearly marking said code as
  11781. nonportable and subject to review for every new release of `g77'.  This
  11782. information is provided primarily to make debugging of code generated
  11783. by this particular release of `g77' easier for the user, and partly to
  11784. make writing (generally nonportable) interface code easier.  Both of
  11785. these activities require tracking changes in new version of `g77' as
  11786. they are installed, because new versions can change the behaviors
  11787. described in this section.
  11788. * Menu:
  11789. * Main Program Unit::  How `g77' compiles a main program unit.
  11790. * Procedures::         How `g77' constructs parameter lists
  11791.                        for procedures.
  11792. * Functions::          Functions returning floating-point or character data.
  11793. * Names::              Naming of user-defined variables, procedures, etc.
  11794. * Common Blocks::      Accessing common variables while debugging.
  11795. * Local Equivalence Areas::  Accessing `EQUIVALENCE' while debugging.
  11796. * Complex Variables::  How `g77' performs complex arithmetic.
  11797. * Arrays::             Dealing with (possibly multi-dimensional) arrays.
  11798. * Adjustable Arrays::  Special consideration for adjustable arrays.
  11799. * Alternate Entry Points::  How `g77' implements alternate `ENTRY'.
  11800. * Alternate Returns::  How `g77' handles alternate returns.
  11801. * Assigned Statement Labels::  How `g77' handles `ASSIGN'.
  11802. * Run-time Library Errors::  Meanings of some `IOSTAT=' values.
  11803. File: g77.info,  Node: Main Program Unit,  Next: Procedures,  Up: Debugging and Interfacing
  11804. Main Program Unit (PROGRAM)
  11805. ===========================
  11806.    When `g77' compiles a main program unit, it gives it the public
  11807. procedure name `MAIN__'.  The `libf2c' library has the actual `main()'
  11808. procedure as is typical of C-based environments, and it is this
  11809. procedure that performs some initial start-up activity and then calls
  11810. `MAIN__'.
  11811.    Generally, `g77' and `libf2c' are designed so that you need not
  11812. include a main program unit written in Fortran in your program--it can
  11813. be written in C or some other language.  Especially for I/O handling,
  11814. this is the case, although `g77' version 0.5.16 includes a bug fix for
  11815. `libf2c' that solved a problem with using the `OPEN' statement as the
  11816. first Fortran I/O activity in a program without a Fortran main program
  11817. unit.
  11818.    However, if you don't intend to use `g77' (or `f2c') to compile your
  11819. main program unit--that is, if you intend to compile a `main()'
  11820. procedure using some other language--you should carefully examine the
  11821. code for `main()' in `libf2c', found in the source file
  11822. `gcc/f/runtime/libF77/main.c', to see what kinds of things might need
  11823. to be done by your `main()' in order to provide the Fortran environment
  11824. your Fortran code is expecting.
  11825.    For example, `libf2c''s `main()' sets up the information used by the
  11826. `IARGC' and `GETARG' intrinsics.  Bypassing `libf2c''s `main()' without
  11827. providing a substitute for this activity would mean that invoking
  11828. `IARGC' and `GETARG' would produce undefined results.
  11829.    When debugging, one implication of the fact that `main()', which is
  11830. the place where the debugged program "starts" from the debugger's point
  11831. of view, is in `libf2c' is that you won't be starting your Fortran
  11832. program at a point you recognize as your Fortran code.
  11833.    The standard way to get around this problem is to set a break point
  11834. (a one-time, or temporary, break point will do) at the entrance to
  11835. `MAIN__', and then run the program.  A convenient way to do so is to
  11836. add the `gdb' command
  11837.      tbreak MAIN__
  11838. to the file `.gdbinit' in the directory in which you're debugging
  11839. (using `gdb').
  11840.    After doing this, the debugger will see the current execution point
  11841. of the program as at the beginning of the main program unit of your
  11842. program.
  11843.    Of course, if you really want to set a break point at some other
  11844. place in your program and just start the program running, without first
  11845. breaking at `MAIN__', that should work fine.
  11846. File: g77.info,  Node: Procedures,  Next: Functions,  Prev: Main Program Unit,  Up: Debugging and Interfacing
  11847. Procedures (SUBROUTINE and FUNCTION)
  11848. ====================================
  11849.    Currently, `g77' passes arguments via reference--specifically, by
  11850. passing a pointer to the location in memory of a variable, array, array
  11851. element, a temporary location that holds the result of evaluating an
  11852. expression, or a temporary or permanent location that holds the value
  11853. of a constant.
  11854.    Procedures that accept `CHARACTER' arguments are implemented by
  11855. `g77' so that each `CHARACTER' argument has two actual arguments.
  11856.    The first argument occupies the expected position in the argument
  11857. list and has the user-specified name.  This argument is a pointer to an
  11858. array of characters, passed by the caller.
  11859.    The second argument is appended to the end of the user-specified
  11860. calling sequence and is named `__g77_length_X', where X is the
  11861. user-specified name.  This argument is of the C type `ftnlen' (see
  11862. `gcc/f/runtime/f2c.h.in' for information on that type) and is the
  11863. number of characters the caller has allocated in the array pointed to
  11864. by the first argument.
  11865.    A procedure will ignore the length argument if `X' is not declared
  11866. `CHARACTER*(*)', because for other declarations, it knows the length.
  11867. Not all callers necessarily "know" this, however, which is why they all
  11868. pass the extra argument.
  11869.    The contents of the `CHARACTER' argument are specified by the
  11870. address passed in the first argument (named after it).  The procedure
  11871. can read or write these contents as appropriate.
  11872.    When more than one `CHARACTER' argument is present in the argument
  11873. list, the length arguments are appended in the order the original
  11874. arguments appear.  So `CALL FOO('HI','THERE')' is implemented in C as
  11875. `foo("hi","there",2,5);', ignoring the fact that `g77' does not provide
  11876. the trailing null bytes on the constant strings (`f2c' does provide
  11877. them, but they are unnecessary in a Fortran environment, and you should
  11878. not expect them to be there).
  11879.    Note that the above information applies to `CHARACTER' variables and
  11880. arrays *only*.  It does *not* apply to external `CHARACTER' functions
  11881. or to intrinsic `CHARACTER' functions.  That is, no second length
  11882. argument is passed to `FOO' in this case:
  11883.      CHARACTER X
  11884.      EXTERNAL X
  11885.      CALL FOO(X)
  11886. Nor does `FOO' expect such an argument in this case:
  11887.      SUBROUTINE FOO(X)
  11888.      CHARACTER X
  11889.      EXTERNAL X
  11890.    Because of this implementation detail, if a program has a bug such
  11891. that there is disagreement as to whether an argument is a procedure,
  11892. and the type of the argument is `CHARACTER', subtle symptoms might
  11893. appear.
  11894. File: g77.info,  Node: Functions,  Next: Names,  Prev: Procedures,  Up: Debugging and Interfacing
  11895. Functions (FUNCTION and RETURN)
  11896. ===============================
  11897.    `g77' handles in a special way functions that return the following
  11898. types:
  11899.    * `CHARACTER'
  11900.    * `COMPLEX'
  11901.    * `REAL(KIND=1)'
  11902.    For `CHARACTER', `g77' implements a subroutine (a C function
  11903. returning `void') with two arguments prepended: `__g77_result', which
  11904. the caller passes as a pointer to a `char' array expected to hold the
  11905. return value, and `__g77_length', which the caller passes as an
  11906. `ftnlen' value specifying the length of the return value as declared in
  11907. the calling program.  For `CHARACTER*(*)', the called function uses
  11908. `__g77_length' to determine the size of the array that `__g77_result'
  11909. points to; otherwise, it ignores that argument.
  11910.    For `COMPLEX', when `-ff2c' is in force, `g77' implements a
  11911. subroutine with one argument prepended: `__g77_result', which the
  11912. caller passes as a pointer to a variable of the type of the function.
  11913. The called function writes the return value into this variable instead
  11914. of returning it as a function value.  When `-fno-f2c' is in force,
  11915. `g77' implements a `COMPLEX' function as `gcc''s `__complex__ float' or
  11916. `__complex__ double' function (or an emulation thereof, when
  11917. `-femulate-complex' is in effect), returning the result of the function
  11918. in the same way as `gcc' would.
  11919.    For `REAL(KIND=1)', when `-ff2c' is in force, `g77' implements a
  11920. function that actually returns `REAL(KIND=2)' (typically C's `double'
  11921. type).  When `-fno-f2c' is in force, `REAL(KIND=1)' functions return
  11922. `float'.
  11923. File: g77.info,  Node: Names,  Next: Common Blocks,  Prev: Functions,  Up: Debugging and Interfacing
  11924. Names
  11925. =====
  11926.    Fortran permits each implementation to decide how to represent names
  11927. as far as how they're seen in other contexts, such as debuggers and
  11928. when interfacing to other languages, and especially as far as how
  11929. casing is handled.
  11930.    External names--names of entities that are public, or "accessible",
  11931. to all modules in a program--normally have an underscore (`_') appended
  11932. by `g77', to generate code that is compatible with f2c.  External names
  11933. include names of Fortran things like common blocks, external procedures
  11934. (subroutines and functions, but not including statement functions,
  11935. which are internal procedures), and entry point names.
  11936.    However, use of the `-fno-underscoring' option disables this kind of
  11937. transformation of external names (though inhibiting the transformation
  11938. certainly improves the chances of colliding with incompatible externals
  11939. written in other languages--but that might be intentional.
  11940.    When `-funderscoring' is in force, any name (external or local) that
  11941. already has at least one underscore in it is implemented by `g77' by
  11942. appending two underscores.  (This second underscore can be disabled via
  11943. the `-fno-second-underscore' option.)  External names are changed this
  11944. way for `f2c' compatibility.  Local names are changed this way to avoid
  11945. collisions with external names that are different in the source
  11946. code--`f2c' does the same thing, but there's no compatibility issue
  11947. there except for user expectations while debugging.
  11948.    For example:
  11949.      Max_Cost = 0
  11950. Here, a user would, in the debugger, refer to this variable using the
  11951. name `max_cost__' (or `MAX_COST__' or `Max_Cost__', as described below).
  11952. (We hope to improve `g77' in this regard in the future--don't write
  11953. scripts depending on this behavior!  Also, consider experimenting with
  11954. the `-fno-underscoring' option to try out debugging without having to
  11955. massage names by hand like this.)
  11956.    `g77' provides a number of command-line options that allow the user
  11957. to control how case mapping is handled for source files.  The default
  11958. is the traditional UNIX model for Fortran compilers--names are mapped
  11959. to lower case.  Other command-line options can be specified to map
  11960. names to upper case, or to leave them exactly as written in the source
  11961. file.
  11962.    For example:
  11963.      Foo = 9.436
  11964. Here, it is normally the case that the variable assigned will be named
  11965. `foo'.  This would be the name to enter when using a debugger to access
  11966. the variable.
  11967.    However, depending on the command-line options specified, the name
  11968. implemented by `g77' might instead be `FOO' or even `Foo', thus
  11969. affecting how debugging is done.
  11970.    Also:
  11971.      Call Foo
  11972. This would normally call a procedure that, if it were in a separate C
  11973. program, be defined starting with the line:
  11974.      void foo_()
  11975. However, `g77' command-line options could be used to change the casing
  11976. of names, resulting in the name `FOO_' or `Foo_' being given to the
  11977. procedure instead of `foo_', and the `-fno-underscoring' option could
  11978. be used to inhibit the appending of the underscore to the name.
  11979. File: g77.info,  Node: Common Blocks,  Next: Local Equivalence Areas,  Prev: Names,  Up: Debugging and Interfacing
  11980. Common Blocks (COMMON)
  11981. ======================
  11982.    `g77' names and lays out `COMMON' areas the same way f2c does, for
  11983. compatibility with f2c.
  11984.    Currently, `g77' does not emit "true" debugging information for
  11985. members of a `COMMON' area, due to an apparent bug in the GBE.
  11986.    (As of Version 0.5.19, `g77' emits debugging information for such
  11987. members in the form of a constant string specifying the base name of
  11988. the aggregate area and the offset of the member in bytes from the start
  11989. of the area.  Use the `-fdebug-kludge' option to enable this behavior.
  11990. In `gdb', use `set language c' before printing the value of the member,
  11991. then `set language fortran' to restore the default language, since
  11992. `gdb' doesn't provide a way to print a readable version of a character
  11993. string in Fortran language mode.
  11994.    This kludge will be removed in a future version of `g77' that, in
  11995. conjunction with a contemporary version of `gdb', properly supports
  11996. Fortran-language debugging, including access to members of `COMMON'
  11997. areas.)
  11998.    *Note Options for Code Generation Conventions: Code Gen Options, for
  11999. information on the `-fdebug-kludge' option.
  12000.    Moreover, `g77' currently implements a `COMMON' area such that its
  12001. type is an array of the C `char' data type.
  12002.    So, when debugging, you must know the offset into a `COMMON' area
  12003. for a particular item in that area, and you have to take into account
  12004. the appropriate multiplier for the respective sizes of the types (as
  12005. declared in your code) for the items preceding the item in question as
  12006. compared to the size of the `char' type.
  12007.    For example, using default implicit typing, the statement
  12008.      COMMON I(15), R(20), T
  12009. results in a public 144-byte `char' array named `_BLNK__' with `I'
  12010. placed at `_BLNK__[0]', `R' at `_BLNK__[60]', and `T' at `_BLNK__[140]'.
  12011. (This is assuming that the target machine for the compilation has
  12012. 4-byte `INTEGER(KIND=1)' and `REAL(KIND=1)' types.)
  12013. File: g77.info,  Node: Local Equivalence Areas,  Next: Complex Variables,  Prev: Common Blocks,  Up: Debugging and Interfacing
  12014. Local Equivalence Areas (EQUIVALENCE)
  12015. =====================================
  12016.    `g77' treats storage-associated areas involving a `COMMON' block as
  12017. explained in the section on common blocks.
  12018.    A local `EQUIVALENCE' area is a collection of variables and arrays
  12019. connected to each other in any way via `EQUIVALENCE', none of which are
  12020. listed in a `COMMON' statement.
  12021.    Currently, `g77' does not emit "true" debugging information for
  12022. members in a local `EQUIVALENCE' area, due to an apparent bug in the
  12023.    (As of Version 0.5.19, `g77' does emit debugging information for such
  12024. members in the form of a constant string specifying the base name of
  12025. the aggregate area and the offset of the member in bytes from the start
  12026. of the area.  Use the `-fdebug-kludge' option to enable this behavior.
  12027. In `gdb', use `set language c' before printing the value of the member,
  12028. then `set language fortran' to restore the default language, since
  12029. `gdb' doesn't provide a way to print a readable version of a character
  12030. string in Fortran language mode.
  12031.    This kludge will be removed in a future version of `g77' that, in
  12032. conjunction with a contemporary version of `gdb', properly supports
  12033. Fortran-language debugging, including access to members of
  12034. `EQUIVALENCE' areas.)
  12035.    *Note Options for Code Generation Conventions: Code Gen Options, for
  12036. information on the `-fdebug-kludge' option.
  12037.    Moreover, `g77' implements a local `EQUIVALENCE' area such that its
  12038. type is an array of the C `char' data type.
  12039.    The name `g77' gives this array of `char' type is `__g77_equiv_X',
  12040. where X is the name of the item that is placed at the beginning (offset
  12041. 0) of this array.  If more than one such item is placed at the
  12042. beginning, X is the name that sorts to the top in an alphabetical sort
  12043. of the list of such items.
  12044.    When debugging, you must therefore access members of `EQUIVALENCE'
  12045. areas by specifying the appropriate `__g77_equiv_X' array section with
  12046. the appropriate offset.  See the explanation of debugging `COMMON'
  12047. blocks for info applicable to debugging local `EQUIVALENCE' areas.
  12048.    (*Note:* `g77' version 0.5.18 and earlier chose the name for X using
  12049. a different method when more than one name was in the list of names of
  12050. entities placed at the beginning of the array.  Though the
  12051. documentation specified that the first name listed in the `EQUIVALENCE'
  12052. statements was chosen for X, `g77' in fact chose the name using a
  12053. method that was so complicated, it seemed easier to change it to an
  12054. alphabetical sort than to describe the previous method in the
  12055. documentation.)
  12056. File: g77.info,  Node: Complex Variables,  Next: Arrays,  Prev: Local Equivalence Areas,  Up: Debugging and Interfacing
  12057. Complex Variables (COMPLEX)
  12058. ===========================
  12059.    As of 0.5.20, `g77' defaults to handling `COMPLEX' types (and
  12060. related intrinsics, constants, functions, and so on) in a manner that
  12061. makes direct debugging involving these types in Fortran language mode
  12062. difficult.
  12063.    Essentially, `g77' implements these types using an internal
  12064. construct similar to C's `struct', at least as seen by the `gcc' back
  12065.    Currently, the back end, when outputting debugging info with the
  12066. compiled code for the assembler to digest, does not detect these
  12067. `struct' types as being substitutes for Fortran complex.  As a result,
  12068. the Fortran language modes of debuggers such as `gdb' see these types
  12069. as C `struct' types, which they might or might not support.
  12070.    Until this is fixed, switch to C language mode to work with entities
  12071. of `COMPLEX' type and then switch back to Fortran language mode
  12072. afterward.  (In `gdb', this is accomplished via `set lang c' and either
  12073. `set lang fortran' or `set lang auto'.)
  12074.    *Note:* Compiling with the `-fno-emulate-complex' option avoids the
  12075. debugging problem, but is known to cause other problems like compiler
  12076. crashes and generation of incorrect code, so it is not recommended.
  12077. File: g77.info,  Node: Arrays,  Next: Adjustable Arrays,  Prev: Complex Variables,  Up: Debugging and Interfacing
  12078. Arrays (DIMENSION)
  12079. ==================
  12080.    Fortran uses "column-major ordering" in its arrays.  This differs
  12081. from other languages, such as C, which use "row-major ordering".  The
  12082. difference is that, with Fortran, array elements adjacent to each other
  12083. in memory differ in the *first* subscript instead of the last;
  12084. `A(5,10,20)' immediately follows `A(4,10,20)', whereas with row-major
  12085. ordering it would follow `A(5,10,19)'.
  12086.    This consideration affects not only interfacing with and debugging
  12087. Fortran code, it can greatly affect how code is designed and written,
  12088. especially when code speed and size is a concern.
  12089.    Fortran also differs from C, a popular language for interfacing and
  12090. to support directly in debuggers, in the way arrays are treated.  In C,
  12091. arrays are single-dimensional and have interesting relationships to
  12092. pointers, neither of which is true for Fortran.  As a result, dealing
  12093. with Fortran arrays from within an environment limited to C concepts
  12094. can be challenging.
  12095.    For example, accessing the array element `A(5,10,20)' is easy enough
  12096. in Fortran (use `A(5,10,20)'), but in C some difficult machinations are
  12097. needed.  First, C would treat the A array as a single-dimension array.
  12098. Second, C does not understand low bounds for arrays as does Fortran.
  12099. Third, C assumes a low bound of zero (0), while Fortran defaults to a
  12100. low bound of one (1) and can supports an arbitrary low bound.
  12101. Therefore, calculations must be done to determine what the C equivalent
  12102. of `A(5,10,20)' would be, and these calculations require knowing the
  12103. dimensions of `A'.
  12104.    For `DIMENSION A(2:11,21,0:29)', the calculation of the offset of
  12105. `A(5,10,20)' would be:
  12106.        (5-2)
  12107.      + (10-1)*(11-2+1)
  12108.      + (20-0)*(11-2+1)*(21-1+1)
  12109.      = 4293
  12110. So the C equivalent in this case would be `a[4293]'.
  12111.    When using a debugger directly on Fortran code, the C equivalent
  12112. might not work, because some debuggers cannot understand the notion of
  12113. low bounds other than zero.  However, unlike `f2c', `g77' does inform
  12114. the GBE that a multi-dimensional array (like `A' in the above example)
  12115. is really multi-dimensional, rather than a single-dimensional array, so
  12116. at least the dimensionality of the array is preserved.
  12117.    Debuggers that understand Fortran should have no trouble with
  12118. non-zero low bounds, but for non-Fortran debuggers, especially C
  12119. debuggers, the above example might have a C equivalent of `a[4305]'.
  12120. This calculation is arrived at by eliminating the subtraction of the
  12121. lower bound in the first parenthesized expression on each line--that
  12122. is, for `(5-2)' substitute `(5)', for `(10-1)' substitute `(10)', and
  12123. for `(20-0)' substitute `(20)'.  Actually, the implication of this can
  12124. be that the expression `*(&a[2][1][0] + 4293)' works fine, but that
  12125. `a[20][10][5]' produces the equivalent of `*(&a[0][0][0] + 4305)'
  12126. because of the missing lower bounds.
  12127.    Come to think of it, perhaps the behavior is due to the debugger
  12128. internally compensating for the lower bounds by offsetting the base
  12129. address of `a', leaving `&a' set lower, in this case, than
  12130. `&a[2][1][0]' (the address of its first element as identified by
  12131. subscripts equal to the corresponding lower bounds).
  12132.    You know, maybe nobody really needs to use arrays.
  12133. File: g77.info,  Node: Adjustable Arrays,  Next: Alternate Entry Points,  Prev: Arrays,  Up: Debugging and Interfacing
  12134. Adjustable Arrays (DIMENSION)
  12135. =============================
  12136.    Adjustable and automatic arrays in Fortran require the implementation
  12137. (in this case, the `g77' compiler) to "memorize" the expressions that
  12138. dimension the arrays each time the procedure is invoked.  This is so
  12139. that subsequent changes to variables used in those expressions, made
  12140. during execution of the procedure, do not have any effect on the
  12141. dimensions of those arrays.
  12142.    For example:
  12143.      REAL ARRAY(5)
  12144.      DATA ARRAY/5*2/
  12145.      CALL X(ARRAY, 5)
  12146.      END
  12147.      SUBROUTINE X(A, N)
  12148.      DIMENSION A(N)
  12149.      N = 20
  12150.      PRINT *, N, A
  12151.      END
  12152. Here, the implementation should, when running the program, print
  12153. something like:
  12154.      20   2.  2.  2.  2.  2.
  12155. Note that this shows that while the value of `N' was successfully
  12156. changed, the size of the `A' array remained at 5 elements.
  12157.    To support this, `g77' generates code that executes before any user
  12158. code (and before the internally generated computed `GOTO' to handle
  12159. alternate entry points, as described below) that evaluates each
  12160. (nonconstant) expression in the list of subscripts for an array, and
  12161. saves the result of each such evaluation to be used when determining
  12162. the size of the array (instead of re-evaluating the expressions).
  12163.    So, in the above example, when `X' is first invoked, code is
  12164. executed that copies the value of `N' to a temporary.  And that same
  12165. temporary serves as the actual high bound for the single dimension of
  12166. the `A' array (the low bound being the constant 1).  Since the user
  12167. program cannot (legitimately) change the value of the temporary during
  12168. execution of the procedure, the size of the array remains constant
  12169. during each invocation.
  12170.    For alternate entry points, the code `g77' generates takes into
  12171. account the possibility that a dummy adjustable array is not actually
  12172. passed to the actual entry point being invoked at that time.  In that
  12173. case, the public procedure implementing the entry point passes to the
  12174. master private procedure implementing all the code for the entry points
  12175. a `NULL' pointer where a pointer to that adjustable array would be
  12176. expected.  The `g77'-generated code doesn't attempt to evaluate any of
  12177. the expressions in the subscripts for an array if the pointer to that
  12178. array is `NULL' at run time in such cases.  (Don't depend on this
  12179. particular implementation by writing code that purposely passes `NULL'
  12180. pointers where the callee expects adjustable arrays, even if you know
  12181. the callee won't reference the arrays--nor should you pass `NULL'
  12182. pointers for any dummy arguments used in calculating the bounds of such
  12183. arrays or leave undefined any values used for that purpose in
  12184. COMMON--because the way `g77' implements these things might change in
  12185. the future!)
  12186. File: g77.info,  Node: Alternate Entry Points,  Next: Alternate Returns,  Prev: Adjustable Arrays,  Up: Debugging and Interfacing
  12187. Alternate Entry Points (ENTRY)
  12188. ==============================
  12189.    The GBE does not understand the general concept of alternate entry
  12190. points as Fortran provides via the ENTRY statement.  `g77' gets around
  12191. this by using an approach to compiling procedures having at least one
  12192. `ENTRY' statement that is almost identical to the approach used by
  12193. `f2c'.  (An alternate approach could be used that would probably
  12194. generate faster, but larger, code that would also be a bit easier to
  12195. debug.)
  12196.    Information on how `g77' implements `ENTRY' is provided for those
  12197. trying to debug such code.  The choice of implementation seems unlikely
  12198. to affect code (compiled in other languages) that interfaces to such
  12199. code.
  12200.    `g77' compiles exactly one public procedure for the primary entry
  12201. point of a procedure plus each `ENTRY' point it specifies, as usual.
  12202. That is, in terms of the public interface, there is no difference
  12203. between
  12204.      SUBROUTINE X
  12205.      END
  12206.      SUBROUTINE Y
  12207.      END
  12208.      SUBROUTINE X
  12209.      ENTRY Y
  12210.      END
  12211.    The difference between the above two cases lies in the code compiled
  12212. for the `X' and `Y' procedures themselves, plus the fact that, for the
  12213. second case, an extra internal procedure is compiled.
  12214.    For every Fortran procedure with at least one `ENTRY' statement,
  12215. `g77' compiles an extra procedure named `__g77_masterfun_X', where X is
  12216. the name of the primary entry point (which, in the above case, using
  12217. the standard compiler options, would be `x_' in C).
  12218.    This extra procedure is compiled as a private procedure--that is, a
  12219. procedure not accessible by name to separately compiled modules.  It
  12220. contains all the code in the program unit, including the code for the
  12221. primary entry point plus for every entry point.  (The code for each
  12222. public procedure is quite short, and explained later.)
  12223.    The extra procedure has some other interesting characteristics.
  12224.    The argument list for this procedure is invented by `g77'.  It
  12225. contains a single integer argument named `__g77_which_entrypoint',
  12226. passed by value (as in Fortran's `%VAL()' intrinsic), specifying the
  12227. entry point index--0 for the primary entry point, 1 for the first entry
  12228. point (the first `ENTRY' statement encountered), 2 for the second entry
  12229. point, and so on.
  12230.    It also contains, for functions returning `CHARACTER' and (when
  12231. `-ff2c' is in effect) `COMPLEX' functions, and for functions returning
  12232. different types among the `ENTRY' statements (e.g. `REAL FUNCTION R()'
  12233. containing `ENTRY I()'), an argument named `__g77_result' that is
  12234. expected at run time to contain a pointer to where to store the result
  12235. of the entry point.  For `CHARACTER' functions, this storage area is an
  12236. array of the appropriate number of characters; for `COMPLEX' functions,
  12237. it is the appropriate area for the return type; for
  12238. multiple-return-type functions, it is a union of all the supported
  12239. return types (which cannot include `CHARACTER', since combining
  12240. `CHARACTER' and non-`CHARACTER' return types via `ENTRY' in a single
  12241. function is not supported by `g77').
  12242.    For `CHARACTER' functions, the `__g77_result' argument is followed
  12243. by yet another argument named `__g77_length' that, at run time,
  12244. specifies the caller's expected length of the returned value.  Note
  12245. that only `CHARACTER*(*)' functions and entry points actually make use
  12246. of this argument, even though it is always passed by all callers of
  12247. public `CHARACTER' functions (since the caller does not generally know
  12248. whether such a function is `CHARACTER*(*)' or whether there are any
  12249. other callers that don't have that information).
  12250.    The rest of the argument list is the union of all the arguments
  12251. specified for all the entry points (in their usual forms, e.g.
  12252. `CHARACTER' arguments have extra length arguments, all appended at the
  12253. end of this list).  This is considered the "master list" of arguments.
  12254.    The code for this procedure has, before the code for the first
  12255. executable statement, code much like that for the following Fortran
  12256. statement:
  12257.             GOTO (100000,100001,100002), __g77_which_entrypoint
  12258.      100000 ...code for primary entry point...
  12259.      100001 ...code immediately following first ENTRY statement...
  12260.      100002 ...code immediately following second ENTRY statement...
  12261. (Note that invalid Fortran statement labels and variable names are used
  12262. in the above example to highlight the fact that it represents code
  12263. generated by the `g77' internals, not code to be written by the user.)
  12264.    It is this code that, when the procedure is called, picks which
  12265. entry point to start executing.
  12266.    Getting back to the public procedures (`x' and `Y' in the original
  12267. example), those procedures are fairly simple.  Their interfaces are
  12268. just like they would be if they were self-contained procedures (without
  12269. `ENTRY'), of course, since that is what the callers expect.  Their code
  12270. consists of simply calling the private procedure, described above, with
  12271. the appropriate extra arguments (the entry point index, and perhaps a
  12272. pointer to a multiple-type- return variable, local to the public
  12273. procedure, that contains all the supported returnable non-character
  12274. types).  For arguments that are not listed for a given entry point that
  12275. are listed for other entry points, and therefore that are in the
  12276. "master list" for the private procedure, null pointers (in C, the
  12277. `NULL' macro) are passed.  Also, for entry points that are part of a
  12278. multiple-type- returning function, code is compiled after the call of
  12279. the private procedure to extract from the multi-type union the
  12280. appropriate result, depending on the type of the entry point in
  12281. question, returning that result to the original caller.
  12282.    When debugging a procedure containing alternate entry points, you
  12283. can either set a break point on the public procedure itself (e.g.  a
  12284. break point on `X' or `Y') or on the private procedure that contains
  12285. most of the pertinent code (e.g. `__g77_masterfun_X').  If you do the
  12286. former, you should use the debugger's command to "step into" the called
  12287. procedure to get to the actual code; with the latter approach, the
  12288. break point leaves you right at the actual code, skipping over the
  12289. public entry point and its call to the private procedure (unless you
  12290. have set a break point there as well, of course).
  12291.    Further, the list of dummy arguments that is visible when the
  12292. private procedure is active is going to be the expanded version of the
  12293. list for whichever particular entry point is active, as explained
  12294. above, and the way in which return values are handled might well be
  12295. different from how they would be handled for an equivalent single-entry
  12296. function.
  12297. File: g77.info,  Node: Alternate Returns,  Next: Assigned Statement Labels,  Prev: Alternate Entry Points,  Up: Debugging and Interfacing
  12298. Alternate Returns (SUBROUTINE and RETURN)
  12299. =========================================
  12300.    Subroutines with alternate returns (e.g. `SUBROUTINE X(*)' and `CALL
  12301. X(*50)') are implemented by `g77' as functions returning the C `int'
  12302. type.  The actual alternate-return arguments are omitted from the
  12303. calling sequence.  Instead, the caller uses the return value to do a
  12304. rough equivalent of the Fortran computed-`GOTO' statement, as in `GOTO
  12305. (50), X()' in the example above (where `X' is quietly declared as an
  12306. `INTEGER(KIND=1)' function), and the callee just returns whatever
  12307. integer is specified in the `RETURN' statement for the subroutine For
  12308. example, `RETURN 1' is implemented as `X = 1' followed by `RETURN' in
  12309. C, and `RETURN' by itself is `X = 0' and `RETURN').
  12310. File: g77.info,  Node: Assigned Statement Labels,  Next: Run-time Library Errors,  Prev: Alternate Returns,  Up: Debugging and Interfacing
  12311. Assigned Statement Labels (ASSIGN and GOTO)
  12312. ===========================================
  12313.    For portability to machines where a pointer (such as to a label,
  12314. which is how `g77' implements `ASSIGN' and its relatives, the
  12315. assigned-`GOTO' and assigned-`FORMAT'-I/O statements) is wider
  12316. (bitwise) than an `INTEGER(KIND=1)', `g77' uses a different memory
  12317. location to hold the `ASSIGN'ed value of a variable than it does the
  12318. numerical value in that variable, unless the variable is wide enough
  12319. (can hold enough bits).
  12320.    In particular, while `g77' implements
  12321.      I = 10
  12322. as, in C notation, `i = 10;', it implements
  12323.      ASSIGN 10 TO I
  12324. as, in GNU's extended C notation (for the label syntax),
  12325. `__g77_ASSIGN_I = &&L10;' (where `L10' is just a massaging of the
  12326. Fortran label `10' to make the syntax C-like; `g77' doesn't actually
  12327. generate the name `L10' or any other name like that, since debuggers
  12328. cannot access labels anyway).
  12329.    While this currently means that an `ASSIGN' statement does not
  12330. overwrite the numeric contents of its target variable, *do not* write
  12331. any code depending on this feature.  `g77' has already changed this
  12332. implementation across versions and might do so in the future.  This
  12333. information is provided only to make debugging Fortran programs
  12334. compiled with the current version of `g77' somewhat easier.  If there's
  12335. no debugger-visible variable named `__g77_ASSIGN_I' in a program unit
  12336. that does `ASSIGN 10 TO I', that probably means `g77' has decided it
  12337. can store the pointer to the label directly into `I' itself.
  12338.    *Note Ugly Assigned Labels::, for information on a command-line
  12339. option to force `g77' to use the same storage for both normal and
  12340. assigned-label uses of a variable.
  12341. File: g77.info,  Node: Run-time Library Errors,  Prev: Assigned Statement Labels,  Up: Debugging and Interfacing
  12342. Run-time Library Errors
  12343. =======================
  12344.    The `libf2c' library currently has the following table to relate
  12345. error code numbers, returned in `IOSTAT=' variables, to messages.  This
  12346. information should, in future versions of this document, be expanded
  12347. upon to include detailed descriptions of each message.
  12348.    In line with good coding practices, any of the numbers in the list
  12349. below should *not* be directly written into Fortran code you write.
  12350. Instead, make a separate `INCLUDE' file that defines `PARAMETER' names
  12351. for them, and use those in your code, so you can more easily change the
  12352. actual numbers in the future.
  12353.    The information below is culled from the definition of `F_err' in
  12354. `f/runtime/libI77/err.c' in the `g77' source tree.
  12355.      100: "error in format"
  12356.      101: "illegal unit number"
  12357.      102: "formatted io not allowed"
  12358.      103: "unformatted io not allowed"
  12359.      104: "direct io not allowed"
  12360.      105: "sequential io not allowed"
  12361.      106: "can't backspace file"
  12362.      107: "null file name"
  12363.      108: "can't stat file"
  12364.      109: "unit not connected"
  12365.      110: "off end of record"
  12366.      111: "truncation failed in endfile"
  12367.      112: "incomprehensible list input"
  12368.      113: "out of free space"
  12369.      114: "unit not connected"
  12370.      115: "read unexpected character"
  12371.      116: "bad logical input field"
  12372.      117: "bad variable type"
  12373.      118: "bad namelist name"
  12374.      119: "variable not in namelist"
  12375.      120: "no end record"
  12376.      121: "variable count incorrect"
  12377.      122: "subscript for scalar variable"
  12378.      123: "invalid array section"
  12379.      124: "substring out of bounds"
  12380.      125: "subscript out of bounds"
  12381.      126: "can't read file"
  12382.      127: "can't write file"
  12383.      128: "'new' file exists"
  12384.      129: "can't append to file"
  12385.      130: "non-positive record number"
  12386.      131: "I/O started while already doing I/O"
  12387. File: g77.info,  Node: Collected Fortran Wisdom,  Next: Trouble,  Prev: Debugging and Interfacing,  Up: Top
  12388. Collected Fortran Wisdom
  12389. ************************
  12390.    Most users of `g77' can be divided into two camps:
  12391.    * Those writing new Fortran code to be compiled by `g77'.
  12392.    * Those using `g77' to compile existing, "legacy" code.
  12393.    Users writing new code generally understand most of the necessary
  12394. aspects of Fortran to write "mainstream" code, but often need help
  12395. deciding how to handle problems, such as the construction of libraries
  12396. containing `BLOCK DATA'.
  12397.    Users dealing with "legacy" code sometimes don't have much
  12398. experience with Fortran, but believe that the code they're compiling
  12399. already works when compiled by other compilers (and might not
  12400. understand why, as is sometimes the case, it doesn't work when compiled
  12401. by `g77').
  12402.    The following information is designed to help users do a better job
  12403. coping with existing, "legacy" Fortran code, and with writing new code
  12404. as well.
  12405. * Menu:
  12406. * Advantages Over f2c::        If `f2c' is so great, why `g77'?
  12407. * Block Data and Libraries::   How `g77' solves a common problem.
  12408. * Loops::                      Fortran `DO' loops surprise many people.
  12409. * Working Programs::           Getting programs to work should be done first.
  12410. * Overly Convenient Options::  Temptations to avoid, habits to not form.
  12411. * Faster Programs::            Everybody wants these, but at what cost?
  12412. File: g77.info,  Node: Advantages Over f2c,  Next: Block Data and Libraries,  Up: Collected Fortran Wisdom
  12413. Advantages Over f2c
  12414. ===================
  12415.    Without `f2c', `g77' would have taken much longer to do and probably
  12416. not been as good for quite a while.  Sometimes people who notice how
  12417. much `g77' depends on, and documents encouragement to use, `f2c' ask
  12418. why `g77' was created if `f2c' already existed.
  12419.    This section gives some basic answers to these questions, though it
  12420. is not intended to be comprehensive.
  12421. * Menu:
  12422. * Language Extensions::  Features used by Fortran code.
  12423. * Compiler Options::     Features helpful during development.
  12424. * Compiler Speed::       Speed of the compilation process.
  12425. * Program Speed::        Speed of the generated, optimized code.
  12426. * Ease of Debugging::    Debugging ease-of-use at the source level.
  12427. * Character and Hollerith Constants::  A byte saved is a byte earned.
  12428. File: g77.info,  Node: Language Extensions,  Next: Compiler Options,  Up: Advantages Over f2c
  12429. Language Extensions
  12430. -------------------
  12431.    `g77' offers several extensions to the Fortran language that `f2c'
  12432. doesn't.
  12433.    However, `f2c' offers a few that `g77' doesn't, like fairly complete
  12434. support for `INTEGER*2'.  It is expected that `g77' will offer some or
  12435. all of these missing features at some time in the future.  (Version
  12436. 0.5.18 of `g77' offers some rudimentary support for some of these
  12437. features.)
  12438. File: g77.info,  Node: Compiler Options,  Next: Compiler Speed,  Prev: Language Extensions,  Up: Advantages Over f2c
  12439. Compiler Options
  12440. ----------------
  12441.    `g77' offers a whole bunch of compiler options that `f2c' doesn't.
  12442.    However, `f2c' offers a few that `g77' doesn't, like an option to
  12443. generate code to check array subscripts at run time.  It is expected
  12444. that `g77' will offer some or all of these missing options at some time
  12445. in the future.
  12446. File: g77.info,  Node: Compiler Speed,  Next: Program Speed,  Prev: Compiler Options,  Up: Advantages Over f2c
  12447. Compiler Speed
  12448. --------------
  12449.    Saving the steps of writing and then rereading C code is a big reason
  12450. why `g77' should be able to compile code much faster than using `f2c'
  12451. in conjunction with the equivalent invocation of `gcc'.
  12452.    However, due to `g77''s youth, lots of self-checking is still being
  12453. performed.  As a result, this improvement is as yet unrealized (though
  12454. the potential seems to be there for quite a big speedup in the future).
  12455. It is possible that, as of version 0.5.18, `g77' is noticeably faster
  12456. compiling many Fortran source files than using `f2c' in conjunction
  12457. with `gcc'.
  12458. File: g77.info,  Node: Program Speed,  Next: Ease of Debugging,  Prev: Compiler Speed,  Up: Advantages Over f2c
  12459. Program Speed
  12460. -------------
  12461.    `g77' has the potential to better optimize code than `f2c', even
  12462. when `gcc' is used to compile the output of `f2c', because `f2c' must
  12463. necessarily translate Fortran into a somewhat lower-level language (C)
  12464. that cannot preserve all the information that is potentially useful for
  12465. optimization, while `g77' can gather, preserve, and transmit that
  12466. information directly to the GBE.
  12467.    For example, `g77' implements `ASSIGN' and assigned `GOTO' using
  12468. direct assignment of pointers to labels and direct jumps to labels,
  12469. whereas `f2c' maps the assigned labels to integer values and then uses
  12470. a C `switch' statement to encode the assigned `GOTO' statements.
  12471.    However, as is typical, theory and reality don't quite match, at
  12472. least not in all cases, so it is still the case that `f2c' plus `gcc'
  12473. can generate code that is faster than `g77'.
  12474.    Version 0.5.18 of `g77' offered default settings and options, via
  12475. patches to the `gcc' back end, that allow for better program speed,
  12476. though some of these improvements also affected the performance of
  12477. programs translated by `f2c' and then compiled by `g77''s version of
  12478. `gcc'.
  12479.    Version 0.5.20 of `g77' offers further performance improvements, at
  12480. least one of which (alias analysis) is not generally applicable to
  12481. `f2c' (though `f2c' could presumably be changed to also take advantage
  12482. of this new capability of the `gcc' back end, assuming this is made
  12483. available in an upcoming release of `gcc').
  12484. File: g77.info,  Node: Ease of Debugging,  Next: Character and Hollerith Constants,  Prev: Program Speed,  Up: Advantages Over f2c
  12485. Ease of Debugging
  12486. -----------------
  12487.    Because `g77' compiles directly to assembler code like `gcc',
  12488. instead of translating to an intermediate language (C) as does `f2c',
  12489. support for debugging can be better for `g77' than `f2c'.
  12490.    However, although `g77' might be somewhat more "native" in terms of
  12491. debugging support than `f2c' plus `gcc', there still are a lot of
  12492. things "not quite right".  Many of the important ones should be
  12493. resolved in the near future.
  12494.    For example, `g77' doesn't have to worry about reserved names like
  12495. `f2c' does.  Given `FOR = WHILE', `f2c' must necessarily translate this
  12496. to something *other* than `for = while;', because C reserves those
  12497. words.
  12498.    However, `g77' does still uses things like an extra level of
  12499. indirection for `ENTRY'-laden procedures--in this case, because the
  12500. back end doesn't yet support multiple entry points.
  12501.    Another example is that, given
  12502.      COMMON A, B
  12503.      EQUIVALENCE (B, C)
  12504. the `g77' user should be able to access the variables directly, by name,
  12505. without having to traverse C-like structures and unions, while `f2c' is
  12506. unlikely to ever offer this ability (due to limitations in the C
  12507. language).
  12508.    However, due to apparent bugs in the back end, `g77' currently
  12509. doesn't take advantage of this facility at all--it doesn't emit any
  12510. debugging information for `COMMON' and `EQUIVALENCE' areas, other than
  12511. information on the array of `char' it creates (and, in the case of
  12512. local `EQUIVALENCE', names) for each such area.
  12513.    Yet another example is arrays.  `g77' represents them to the debugger
  12514. using the same "dimensionality" as in the source code, while `f2c' must
  12515. necessarily convert them all to one-dimensional arrays to fit into the
  12516. confines of the C language.  However, the level of support offered by
  12517. debuggers for interactive Fortran-style access to arrays as compiled by
  12518. `g77' can vary widely.  In some cases, it can actually be an advantage
  12519. that `f2c' converts everything to widely supported C semantics.
  12520.    In fairness, `g77' could do many of the things `f2c' does to get
  12521. things working at least as well as `f2c'--for now, the developers
  12522. prefer making `g77' work the way they think it is supposed to, and
  12523. finding help improving the other products (the back end of `gcc';
  12524. `gdb'; and so on) to get things working properly.
  12525. File: g77.info,  Node: Character and Hollerith Constants,  Prev: Ease of Debugging,  Up: Advantages Over f2c
  12526. Character and Hollerith Constants
  12527. ---------------------------------
  12528.    To avoid the extensive hassle that would be needed to avoid this,
  12529. `f2c' uses C character constants to encode character and Hollerith
  12530. constants.  That means a constant like `'HELLO'' is translated to
  12531. `"hello"' in C, which further means that an extra null byte is present
  12532. at the end of the constant.  This null byte is superfluous.
  12533.    `g77' does not generate such null bytes.  This represents significant
  12534. savings of resources, such as on systems where `/dev/null' or
  12535. `/dev/zero' represent bottlenecks in the systems' performance, because
  12536. `g77' simply asks for fewer zeros from the operating system than `f2c'.
  12537. File: g77.info,  Node: Block Data and Libraries,  Next: Loops,  Prev: Advantages Over f2c,  Up: Collected Fortran Wisdom
  12538. Block Data and Libraries
  12539. ========================
  12540.    To ensure that block data program units are linked, especially a
  12541. concern when they are put into libraries, give each one a name (as in
  12542. `BLOCK DATA FOO') and make sure there is an `EXTERNAL FOO' statement in
  12543. every program unit that uses any common block initialized by the
  12544. corresponding `BLOCK DATA'.  `g77' currently compiles a `BLOCK DATA' as
  12545. if it were a `SUBROUTINE', that is, it generates an actual procedure
  12546. having the appropriate name.  The procedure does nothing but return
  12547. immediately if it happens to be called.  For `EXTERNAL FOO', where
  12548. `FOO' is not otherwise referenced in the same program unit, `g77'
  12549. assumes there exists a `BLOCK DATA FOO' in the program and ensures that
  12550. by generating a reference to it so the linker will make sure it is
  12551. present.  (Specifically, `g77' outputs in the data section a static
  12552. pointer to the external name `FOO'.)
  12553.    The implementation `g77' currently uses to make this work is one of
  12554. the few things not compatible with `f2c' as currently shipped.  `f2c'
  12555. currently does nothing with `EXTERNAL FOO' except issue a warning that
  12556. `FOO' is not otherwise referenced, and for `BLOCK DATA FOO', f2c
  12557. doesn't generate a dummy procedure with the name `FOO'.  The upshot is
  12558. that you shouldn't mix `f2c' and `g77' in this particular case.  If you
  12559. use f2c to compile `BLOCK DATA FOO', then any `g77'-compiled program
  12560. unit that says `EXTERNAL FOO' will result in an unresolved reference
  12561. when linked.  If you do the opposite, then `FOO' might not be linked in
  12562. under various circumstances (such as when `FOO' is in a library, or
  12563. you're using a "clever" linker--so clever, it produces a broken program
  12564. with little or no warning by omitting initializations of global data
  12565. because they are contained in unreferenced procedures).
  12566.    The changes you make to your code to make `g77' handle this
  12567. situation, however, appear to be a widely portable way to handle it.
  12568. That is, many systems permit it (as they should, since the FORTRAN 77
  12569. standard permits `EXTERNAL FOO' when `FOO' is a block data program
  12570. unit), and of the ones that might not link `BLOCK DATA FOO' under some
  12571. circumstances, most of them appear to do so once `EXTERNAL FOO' is
  12572. present in the appropriate program units.
  12573.    Here is the recommended approach to modifying a program containing a
  12574. program unit such as the following:
  12575.      BLOCK DATA FOO
  12576.      COMMON /VARS/ X, Y, Z
  12577.      DATA X, Y, Z / 3., 4., 5. /
  12578.      END
  12579. If the above program unit might be placed in a library module, then
  12580. ensure that every program unit in every program that references that
  12581. particular `COMMON' area uses the `EXTERNAL' statement to force the
  12582. area to be initialized.
  12583.    For example, change a program unit that starts with
  12584.      INTEGER FUNCTION CURX()
  12585.      COMMON /VARS/ X, Y, Z
  12586.      CURX = X
  12587.      END
  12588. so that it uses the `EXTERNAL' statement, as in:
  12589.      INTEGER FUNCTION CURX()
  12590.      COMMON /VARS/ X, Y, Z
  12591.      EXTERNAL FOO
  12592.      CURX = X
  12593.      END
  12594. That way, `CURX' is compiled by `g77' (and many other compilers) so
  12595. that the linker knows it must include `FOO', the `BLOCK DATA' program
  12596. unit that sets the initial values for the variables in `VAR', in the
  12597. executable program.
  12598. File: g77.info,  Node: Loops,  Next: Working Programs,  Prev: Block Data and Libraries,  Up: Collected Fortran Wisdom
  12599. Loops
  12600. =====
  12601.    The meaning of a `DO' loop in Fortran is precisely specified in the
  12602. Fortran standard...and is quite different from what many programmers
  12603. might expect.
  12604.    In particular, Fortran `DO' loops are implemented as if the number
  12605. of trips through the loop is calculated *before* the loop is entered.
  12606.    The number of trips for a loop is calculated from the START, END,
  12607. and INCREMENT values specified in a statement such as:
  12608.      DO ITER = START, END, INCREMENT
  12609. The trip count is evaluated using a fairly simple formula based on the
  12610. three values following the `=' in the statement, and it is that trip
  12611. count that is effectively decremented during each iteration of the loop.
  12612. If, at the beginning of an iteration of the loop, the trip count is
  12613. zero or negative, the loop terminates.  The per-loop-iteration
  12614. modifications to ITER are not related to determining whether to
  12615. terminate the loop.
  12616.    There are two important things to remember about the trip count:
  12617.    * It can be *negative*, in which case it is treated as if it was
  12618.      zero--meaning the loop is not executed at all.
  12619.    * The type used to *calculate* the trip count is the same type as
  12620.      ITER, but the final calculation, and thus the type of the trip
  12621.      count itself, always is `INTEGER(KIND=1)'.
  12622.    These two items mean that there are loops that cannot be written in
  12623. straightforward fashion using the Fortran `DO'.
  12624.    For example, on a system with the canonical 32-bit two's-complement
  12625. implementation of `INTEGER(KIND=1)', the following loop will not work:
  12626.      DO I = -2000000000, 2000000000
  12627. Although the START and END values are well within the range of
  12628. `INTEGER(KIND=1)', the *trip count* is not.  The expected trip count is
  12629. 40000000001, which is outside the range of `INTEGER(KIND=1)' on many
  12630. systems.
  12631.    Instead, the above loop should be constructed this way:
  12632.      I = -2000000000
  12633.      DO
  12634.        IF (I .GT. 2000000000) EXIT
  12635.        ...
  12636.        I = I + 1
  12637.      END DO
  12638. The simple `DO' construct and the `EXIT' statement (used to leave the
  12639. innermost loop) are F90 features that `g77' supports.
  12640.    Some Fortran compilers have buggy implementations of `DO', in that
  12641. they don't follow the standard.  They implement `DO' as a
  12642. straightforward translation to what, in C, would be a `for' statement.
  12643. Instead of creating a temporary variable to hold the trip count as
  12644. calculated at run time, these compilers use the iteration variable ITER
  12645. to control whether the loop continues at each iteration.
  12646.    The bug in such an implementation shows up when the trip count is
  12647. within the range of the type of ITER, but the magnitude of `ABS(END) +
  12648. ABS(INCR)' exceeds that range.  For example:
  12649.      DO I = 2147483600, 2147483647
  12650. A loop started by the above statement will work as implemented by
  12651. `g77', but the use, by some compilers, of a more C-like implementation
  12652. akin to
  12653.      for (i = 2147483600; i <= 2147483647; ++i)
  12654. produces a loop that does not terminate, because `i' can never be
  12655. greater than 2147483647, since incrementing it beyond that value
  12656. overflows `i', setting it to -2147483648.  This is a large, negative
  12657. number that still is less than 2147483647.
  12658.    Another example of unexpected behavior of `DO' involves using a
  12659. nonintegral iteration variable ITER, that is, a `REAL' variable.
  12660. Consider the following program:
  12661.            DATA BEGIN, END, STEP /.1, .31, .007/
  12662.            DO 10 R = BEGIN, END, STEP
  12663.               IF (R .GT. END) PRINT *, R, ' .GT. ', END, '!!'
  12664.               PRINT *,R
  12665.      10    CONTINUE
  12666.            PRINT *,'LAST = ',R
  12667.            IF (R .LE. END) PRINT *, R, ' .LE. ', END, '!!'
  12668.            END
  12669. A C-like view of `DO' would hold that the two "exclamatory" `PRINT'
  12670. statements are never executed.  However, this is the output of running
  12671. the above program as compiled by `g77' on a GNU/Linux ix86 system:
  12672.       .100000001
  12673.       .107000001
  12674.       .114
  12675.       .120999999
  12676.       ...
  12677.       .289000005
  12678.       .296000004
  12679.       .303000003
  12680.      LAST =   .310000002
  12681.       .310000002 .LE.   .310000002!!
  12682.    Note that one of the two checks in the program turned up an apparent
  12683. violation of the programmer's expectation--yet, the loop is correctly
  12684. implemented by `g77', in that it has 30 iterations.  This trip count of
  12685. 30 is correct when evaluated using the floating-point representations
  12686. for the BEGIN, END, and INCR values (.1, .31, .007) on GNU/Linux ix86
  12687. are used.  On other systems, an apparently more accurate trip count of
  12688. 31 might result, but, nevertheless, `g77' is faithfully following the
  12689. Fortran standard, and the result is not what the author of the sample
  12690. program above apparently expected.  (Such other systems might, for
  12691. different values in the `DATA' statement, violate the other
  12692. programmer's expectation, for example.)
  12693.    Due to this combination of imprecise representation of
  12694. floating-point values and the often-misunderstood interpretation of
  12695. `DO' by standard-conforming compilers such as `g77', use of `DO' loops
  12696. with `REAL' iteration variables is not recommended.  Such use can be
  12697. caught by specifying `-Wsurprising'.  *Note Warning Options::, for more
  12698. information on this option.
  12699. File: g77.info,  Node: Working Programs,  Next: Overly Convenient Options,  Prev: Loops,  Up: Collected Fortran Wisdom
  12700. Working Programs
  12701. ================
  12702.    Getting Fortran programs to work in the first place can be quite a
  12703. challenge--even when the programs already work on other systems, or
  12704. when using other compilers.
  12705.    `g77' offers some facilities that might be useful for tracking down
  12706. bugs in such programs.
  12707. * Menu:
  12708. * Not My Type::
  12709. * Variables Assumed To Be Zero::
  12710. * Variables Assumed To Be Saved::
  12711. * Unwanted Variables::
  12712. * Unused Arguments::
  12713. * Surprising Interpretations of Code::
  12714. * Aliasing Assumed To Work::
  12715. * Output Assumed To Flush::
  12716. * Large File Unit Numbers::
  12717. File: g77.info,  Node: Not My Type,  Next: Variables Assumed To Be Zero,  Up: Working Programs
  12718. Not My Type
  12719. -----------
  12720.    A fruitful source of bugs in Fortran source code is use, or mis-use,
  12721. of Fortran's implicit-typing feature, whereby the type of a variable,
  12722. array, or function is determined by the first character of its name.
  12723.    Simple cases of this include statements like `LOGX=9.227', without a
  12724. statement such as `REAL LOGX'.  In this case, `LOGX' is implicitly
  12725. given `INTEGER(KIND=1)' type, with the result of the assignment being
  12726. that it is given the value `9'.
  12727.    More involved cases include a function that is defined starting with
  12728. a statement like `DOUBLE PRECISION FUNCTION IPS(...)'.  Any caller of
  12729. this function that does not also declare `IPS' as type `DOUBLE
  12730. PRECISION' (or, in GNU Fortran, `REAL(KIND=2)') is likely to assume it
  12731. returns `INTEGER', or some other type, leading to invalid results or
  12732. even program crashes.
  12733.    The `-Wimplicit' option might catch failures to properly specify the
  12734. types of variables, arrays, and functions in the code.
  12735.    However, in code that makes heavy use of Fortran's implicit-typing
  12736. facility, this option might produce so many warnings about cases that
  12737. are working, it would be hard to find the one or two that represent
  12738. bugs.  This is why so many experienced Fortran programmers strongly
  12739. recommend widespread use of the `IMPLICIT NONE' statement, despite it
  12740. not being standard FORTRAN 77, to completely turn off implicit typing.
  12741. (`g77' supports `IMPLICIT NONE', as do almost all FORTRAN 77 compilers.)
  12742.    Note that `-Wimplicit' catches only implicit typing of *names*.  It
  12743. does not catch implicit typing of expressions such as `X**(2/3)'.  Such
  12744. expressions can be buggy as well--in fact, `X**(2/3)' is equivalent to
  12745. `X**0', due to the way Fortran expressions are given types and then
  12746. evaluated.  (In this particular case, the programmer probably wanted
  12747. `X**(2./3.)'.)
  12748. File: g77.info,  Node: Variables Assumed To Be Zero,  Next: Variables Assumed To Be Saved,  Prev: Not My Type,  Up: Working Programs
  12749. Variables Assumed To Be Zero
  12750. ----------------------------
  12751.    Many Fortran programs were developed on systems that provided
  12752. automatic initialization of all, or some, variables and arrays to zero.
  12753. As a result, many of these programs depend, sometimes inadvertently, on
  12754. this behavior, though to do so violates the Fortran standards.
  12755.    You can ask `g77' for this behavior by specifying the
  12756. `-finit-local-zero' option when compiling Fortran code.  (You might
  12757. want to specify `-fno-automatic' as well, to avoid code-size inflation
  12758. for non-optimized compilations.)
  12759.    Note that a program that works better when compiled with the
  12760. `-finit-local-zero' option is almost certainly depending on a
  12761. particular system's, or compiler's, tendency to initialize some
  12762. variables to zero.  It might be worthwhile finding such cases and
  12763. fixing them, using techniques such as compiling with the `-O
  12764. -Wuninitialized' options using `g77'.
  12765. File: g77.info,  Node: Variables Assumed To Be Saved,  Next: Unwanted Variables,  Prev: Variables Assumed To Be Zero,  Up: Working Programs
  12766. Variables Assumed To Be Saved
  12767. -----------------------------
  12768.    Many Fortran programs were developed on systems that saved the
  12769. values of all, or some, variables and arrays across procedure calls.
  12770. As a result, many of these programs depend, sometimes inadvertently, on
  12771. being able to assign a value to a variable, perform a `RETURN' to a
  12772. calling procedure, and, upon subsequent invocation, reference the
  12773. previously assigned variable to obtain the value.
  12774.    They expect this despite not using the `SAVE' statement to specify
  12775. that the value in a variable is expected to survive procedure returns
  12776. and calls.  Depending on variables and arrays to retain values across
  12777. procedure calls without using `SAVE' to require it violates the Fortran
  12778. standards.
  12779.    You can ask `g77' to assume `SAVE' is specified for all relevant
  12780. (local) variables and arrays by using the `-fno-automatic' option.
  12781.    Note that a program that works better when compiled with the
  12782. `-fno-automatic' option is almost certainly depending on not having to
  12783. use the `SAVE' statement as required by the Fortran standard.  It might
  12784. be worthwhile finding such cases and fixing them, using techniques such
  12785. as compiling with the `-O -Wuninitialized' options using `g77'.
  12786. File: g77.info,  Node: Unwanted Variables,  Next: Unused Arguments,  Prev: Variables Assumed To Be Saved,  Up: Working Programs
  12787. Unwanted Variables
  12788. ------------------
  12789.    The `-Wunused' option can find bugs involving implicit typing,
  12790. sometimes more easily than using `-Wimplicit' in code that makes heavy
  12791. use of implicit typing.  An unused variable or array might indicate
  12792. that the spelling for its declaration is different from that of its
  12793. intended uses.
  12794.    Other than cases involving typos, unused variables rarely indicate
  12795. actual bugs in a program.  However, investigating such cases thoroughly
  12796. has, on occasion, led to the discovery of code that had not been
  12797. completely written--where the programmer wrote declarations as needed
  12798. for the whole algorithm, wrote some or even most of the code for that
  12799. algorithm, then got distracted and forgot that the job was not complete.
  12800. File: g77.info,  Node: Unused Arguments,  Next: Surprising Interpretations of Code,  Prev: Unwanted Variables,  Up: Working Programs
  12801. Unused Arguments
  12802. ----------------
  12803.    As with unused variables, It is possible that unused arguments to a
  12804. procedure might indicate a bug.  Compile with `-W -Wunused' option to
  12805. catch cases of unused arguments.
  12806.    Note that `-W' also enables warnings regarding overflow of
  12807. floating-point constants under certain circumstances.
  12808. File: g77.info,  Node: Surprising Interpretations of Code,  Next: Aliasing Assumed To Work,  Prev: Unused Arguments,  Up: Working Programs
  12809. Surprising Interpretations of Code
  12810. ----------------------------------
  12811.    The `-Wsuprising' option can help find bugs involving expression
  12812. evaluation or in the way `DO' loops with non-integral iteration
  12813. variables are handled.  Cases found by this option might indicate a
  12814. difference of interpretation between the author of the code involved,
  12815. and a standard-conforming compiler such as `g77'.  Such a difference
  12816. might produce actual bugs.
  12817.    In any case, changing the code to explicitly do what the programmer
  12818. might have expected it to do, so `g77' and other compilers are more
  12819. likely to follow the programmer's expectations, might be worthwhile,
  12820. especially if such changes make the program work better.
  12821. File: g77.info,  Node: Aliasing Assumed To Work,  Next: Output Assumed To Flush,  Prev: Surprising Interpretations of Code,  Up: Working Programs
  12822. Aliasing Assumed To Work
  12823. ------------------------
  12824.    The `-falias-check', `-fargument-alias', `-fargument-noalias', and
  12825. `-fno-argument-noalias-global' options, introduced in version 0.5.20 and
  12826. `g77''s version 2.7.2.2.f.2 of `gcc', control the assumptions regarding
  12827. aliasing (overlapping) of writes and reads to main memory (core) made
  12828. by the `gcc' back end.
  12829.    They are effective only when compiling with `-O' (specifying any
  12830. level other than `-O0') or with `-falias-check'.
  12831.    The default for Fortran code is `-fargument-noalias-global'.  (The
  12832. default for C code and code written in other C-based languages is
  12833. `-fargument-alias'.  These defaults apply regardless of whether you use
  12834. `g77' or `gcc' to compile your code.)
  12835.    Note that, on some systems, compiling with `-fforce-addr' in effect
  12836. can produce more optimal code when the default aliasing options are in
  12837. effect (and when optimization is enabled).
  12838.    If your program is not working when compiled with optimization, it
  12839. is possible it is violating the Fortran standards (77 and 90) by
  12840. relying on the ability to "safely" modify variables and arrays that are
  12841. aliased, via procedure calls, to other variables and arrays, without
  12842. using `EQUIVALENCE' to explicitly set up this kind of aliasing.
  12843.    (The FORTRAN 77 standard's prohibition of this sort of overlap,
  12844. generally referred to therein as "storage assocation", appears in
  12845. Sections 15.9.3.6.  This prohibition allows implementations, such as
  12846. `g77', to, for example, implement the passing of procedures and even
  12847. values in `COMMON' via copy operations into local, perhaps more
  12848. efficiently accessed temporaries at entry to a procedure, and, where
  12849. appropriate, via copy operations back out to their original locations
  12850. in memory at exit from that procedure, without having to take into
  12851. consideration the order in which the local copies are updated by the
  12852. code, among other things.)
  12853.    To test this hypothesis, try compiling your program with the
  12854. `-fargument-alias' option, which causes the compiler to revert to
  12855. assumptions essentially the same as made by versions of `g77' prior to
  12856. 0.5.20.
  12857.    If the program works using this option, that strongly suggests that
  12858. the bug is in your program.  Finding and fixing the bug(s) should
  12859. result in a program that is more standard-conforming and that can be
  12860. compiled by `g77' in a way that results in a faster executable.
  12861.    (You might want to try compiling with `-fargument-noalias', a kind
  12862. of half-way point, to see if the problem is limited to aliasing between
  12863. dummy arguments and `COMMON' variables--this option assumes that such
  12864. aliasing is not done, while still allowing aliasing among dummy
  12865. arguments.)
  12866.    An example of aliasing that is invalid according to the standards is
  12867. shown in the following program, which might *not* produce the expected
  12868. results when executed:
  12869.      I = 1
  12870.      CALL FOO(I, I)
  12871.      PRINT *, I
  12872.      END
  12873.      
  12874.      SUBROUTINE FOO(J, K)
  12875.      J = J + K
  12876.      K = J * K
  12877.      PRINT *, J, K
  12878.      END
  12879.    The above program attempts to use the temporary aliasing of the `J'
  12880. and `K' arguments in `FOO' to effect a pathological behavior--the
  12881. simultaneous changing of the values of *both* `J' and `K' when either
  12882. one of them is written.
  12883.    The programmer likely expects the program to print these values:
  12884.      2  4
  12885.      4
  12886.    However, since the program is not standard-conforming, an
  12887. implementation's behavior when running it is undefined, because
  12888. subroutine `FOO' modifies at least one of the arguments, and they are
  12889. aliased with each other.  (Even if one of the assignment statements was
  12890. deleted, the program would still violate these rules.  This kind of
  12891. on-the-fly aliasing is permitted by the standard only when none of the
  12892. aliased items are defined, or written, while the aliasing is in effect.)
  12893.    As a practical example, an optimizing compiler might schedule the `J
  12894. =' part of the second line of `FOO' *after* the reading of `J' and `K'
  12895. for the `J * K' expression, resulting in the following output:
  12896.      2  2
  12897.      2
  12898.    Essentially, compilers are promised (by the standard and, therefore,
  12899. by programmers who write code they claim to be standard-conforming)
  12900. that if they cannot detect aliasing via static analysis of a single
  12901. program unit's `EQUIVALENCE' and `COMMON' statements, no such aliasing
  12902. exists.  In such cases, compilers are free to assume that an assignment
  12903. to one variable will not change the value of another variable, allowing
  12904. it to avoid generating code to re-read the value of the other variable,
  12905. to re-schedule reads and writes, and so on, to produce a faster
  12906. executable.
  12907.    The same promise holds true for arrays (as seen by the called
  12908. procedure)--an element of one dummy array cannot be aliased with, or
  12909. overlap, any element of another dummy array or be in a `COMMON' area
  12910. known to the procedure.
  12911.    (These restrictions apply only when the procedure defines, or writes
  12912. to, one of the aliased variables or arrays.)
  12913.    Unfortunately, there is no way to find *all* possible cases of
  12914. violations of the prohibitions against aliasing in Fortran code.
  12915. Static analysis is certainly imperfect, as is run-time analysis, since
  12916. neither can catch all violations.  (Static analysis can catch all
  12917. likely violations, and some that might never actually happen, while
  12918. run-time analysis can catch only those violations that actually happen
  12919. during a particular run.  Neither approach can cope with programs
  12920. mixing Fortran code with routines written in other languages, however.)
  12921.    Currently, `g77' provides neither static nor run-time facilities to
  12922. detect any cases of this problem, although other products might.
  12923. Run-time facilities are more likely to be offered by future versions of
  12924. `g77', though patches improving `g77' so that it provides either form
  12925. of detection are welcome.
  12926. File: g77.info,  Node: Output Assumed To Flush,  Next: Large File Unit Numbers,  Prev: Aliasing Assumed To Work,  Up: Working Programs
  12927. Output Assumed To Flush
  12928. -----------------------
  12929.    For several versions prior to 0.5.20, `g77' configured its version
  12930. of the `libf2c' run-time library so that one of its configuration
  12931. macros, `ALWAYS_FLUSH', was defined.
  12932.    This was done as a result of a belief that many programs expected
  12933. output to be flushed to the operating system (under UNIX, via the
  12934. `fflush()' library call) with the result that errors, such as disk
  12935. full, would be immediately flagged via the relevant `ERR=' and
  12936. `IOSTAT=' mechanism.
  12937.    Because of the adverse effects this approach had on the performance
  12938. of many programs, `g77' no longer configures `libf2c' to always flush
  12939. output.
  12940.    If your program depends on this behavior, either insert the
  12941. appropriate `CALL FLUSH' statements, or modify the sources to the
  12942. `libf2c', rebuild and reinstall `g77', and relink your programs with
  12943. the modified library.
  12944.    (Ideally, `libf2c' would offer the choice at run-time, so that a
  12945. compile-time option to `g77' or `f2c' could result in generating the
  12946. appropriate calls to flushing or non-flushing library routines.)
  12947.    *Note Always Flush Output::, for information on how to modify the
  12948. `g77' source tree so that a version of `libf2c' can be built and
  12949. installed with the `ALWAYS_FLUSH' macro defined.
  12950. File: g77.info,  Node: Large File Unit Numbers,  Prev: Output Assumed To Flush,  Up: Working Programs
  12951. Large File Unit Numbers
  12952. -----------------------
  12953.    If your program crashes at run time with a message including the
  12954. text `illegal unit number', that probably is a message from the
  12955. run-time library, `libf2c', used, and distributed with, `g77'.
  12956.    The message means that your program has attempted to use a file unit
  12957. number that is out of the range accepted by `libf2c'.  Normally, this
  12958. range is 0 through 99, and the high end of the range is controlled by a
  12959. `libf2c' source-file macro named `MXUNIT'.
  12960.    If you can easily change your program to use unit numbers in the
  12961. range 0 through 99, you should do so.
  12962.    Otherwise, see *Note Larger File Unit Numbers::, for information on
  12963. how to change `MXUNIT' in `libf2c' so you can build and install a new
  12964. version of `libf2c' that supports the larger unit numbers you need.
  12965.    *Note:* While `libf2c' places a limit on the range of Fortran
  12966. file-unit numbers, the underlying library and operating system might
  12967. impose different kinds of limits.  For example, some systems limit the
  12968. number of files simultaneously open by a running program.  Information
  12969. on how to increase these limits should be found in your system's
  12970. documentation.
  12971. File: g77.info,  Node: Overly Convenient Options,  Next: Faster Programs,  Prev: Working Programs,  Up: Collected Fortran Wisdom
  12972. Overly Convenient Command-line Options
  12973. ======================================
  12974.    These options should be used only as a quick-and-dirty way to
  12975. determine how well your program will run under different compilation
  12976. models without having to change the source.  Some are more problematic
  12977. than others, depending on how portable and maintainable you want the
  12978. program to be (and, of course, whether you are allowed to change it at
  12979. all is crucial).
  12980.    You should not continue to use these command-line options to compile
  12981. a given program, but rather should make changes to the source code:
  12982. `-finit-local-zero'
  12983.      (This option specifies that any uninitialized local variables and
  12984.      arrays have default initialization to binary zeros.)
  12985.      Many other compilers do this automatically, which means lots of
  12986.      Fortran code developed with those compilers depends on it.
  12987.      It is safer (and probably would produce a faster program) to find
  12988.      the variables and arrays that need such initialization and provide
  12989.      it explicitly via `DATA', so that `-finit-local-zero' is not
  12990.      needed.
  12991.      Consider using `-Wuninitialized' (which requires `-O') to find
  12992.      likely candidates, but do not specify `-finit-local-zero' or
  12993.      `-fno-automatic', or this technique won't work.
  12994. `-fno-automatic'
  12995.      (This option specifies that all local variables and arrays are to
  12996.      be treated as if they were named in `SAVE' statements.)
  12997.      Many other compilers do this automatically, which means lots of
  12998.      Fortran code developed with those compilers depends on it.
  12999.      The effect of this is that all non-automatic variables and arrays
  13000.      are made static, that is, not placed on the stack or in heap
  13001.      storage.  This might cause a buggy program to appear to work
  13002.      better.  If so, rather than relying on this command-line option
  13003.      (and hoping all compilers provide the equivalent one), add `SAVE'
  13004.      statements to some or all program unit sources, as appropriate.
  13005.      Consider using `-Wuninitialized' (which requires `-O') to find
  13006.      likely candidates, but do not specify `-finit-local-zero' or
  13007.      `-fno-automatic', or this technique won't work.
  13008.      The default is `-fautomatic', which tells `g77' to try and put
  13009.      variables and arrays on the stack (or in fast registers) where
  13010.      possible and reasonable.  This tends to make programs faster.
  13011.      *Note:* Automatic variables and arrays are not affected by this
  13012.      option.  These are variables and arrays that are *necessarily*
  13013.      automatic, either due to explicit statements, or due to the way
  13014.      they are declared.  Examples include local variables and arrays
  13015.      not given the `SAVE' attribute in procedures declared `RECURSIVE',
  13016.      and local arrays declared with non-constant bounds (automatic
  13017.      arrays).  Currently, `g77' supports only automatic arrays, not
  13018.      `RECURSIVE' procedures or other means of explicitly specifying
  13019.      that variables or arrays are automatic.
  13020. `-fugly'
  13021.      Fix the source code so that `-fno-ugly' will work.  Note that, for
  13022.      many programs, it is difficult to practically avoid using the
  13023.      features enabled via `-fugly-init', and these features pose the
  13024.      lowest risk of writing nonportable code, among the various "ugly"
  13025.      features.
  13026. `-fGROUP-intrinsics-hide'
  13027.      Change the source code to use `EXTERNAL' for any external procedure
  13028.      that might be the name of an intrinsic.  It is easy to find these
  13029.      using `-fGROUP-intrinsics-disable'.
  13030. File: g77.info,  Node: Faster Programs,  Prev: Overly Convenient Options,  Up: Collected Fortran Wisdom
  13031. Faster Programs
  13032. ===============
  13033.    Aside from the usual `gcc' options, such as `-O', `-ffast-math', and
  13034. so on, consider trying some of the following approaches to speed up
  13035. your program (once you get it working).
  13036. * Menu:
  13037. * Aligned Data::
  13038. * Prefer Automatic Uninitialized Variables::
  13039. * Avoid f2c Compatibility::
  13040. * Use Submodel Options::
  13041. File: g77.info,  Node: Aligned Data,  Next: Prefer Automatic Uninitialized Variables,  Up: Faster Programs
  13042. Aligned Data
  13043. ------------
  13044.    On some systems, such as those with Pentium Pro CPUs, programs that
  13045. make heavy use of `REAL(KIND=2)' (`DOUBLE PRECISION') might run much
  13046. slower than possible due to the compiler not aligning these 64-bit
  13047. values to 64-bit boundaries in memory.  (The effect also is present,
  13048. though to a lesser extent, on the 586 (Pentium) architecture.)
  13049.    The Intel x86 architecture generally ensures that these programs will
  13050. work on all its implementations, but particular implementations (such
  13051. as Pentium Pro) perform better with more strict alignment.  (Such
  13052. behavior isn't unique to the Intel x86 architecture.)  Other
  13053. architectures might *demand* 64-bit alignment of 64-bit data.
  13054.    There are a variety of approaches to use to address this problem:
  13055.    * Order your `COMMON' and `EQUIVALENCE' areas such that the
  13056.      variables and arrays with the widest alignment guidelines come
  13057.      first.
  13058.      For example, on most systems, this would mean placing
  13059.      `COMPLEX(KIND=2)', `REAL(KIND=2)', and `INTEGER(KIND=2)' entities
  13060.      first, followed by `REAL(KIND=1)', `INTEGER(KIND=1)', and
  13061.      `LOGICAL(KIND=1)' entities, then `INTEGER(KIND=6)' entities, and
  13062.      finally `CHARACTER' and `INTEGER(KIND=3)' entities.
  13063.      The reason to use such placement is it makes it more likely that
  13064.      your data will be aligned properly, without requiring you to do
  13065.      detailed analysis of each aggregate (`COMMON' and `EQUIVALENCE')
  13066.      area.
  13067.      Specifically, on systems where the above guidelines are
  13068.      appropriate, placing `CHARACTER' entities before `REAL(KIND=2)'
  13069.      entities can work just as well, but only if the number of bytes
  13070.      occupied by the `CHARACTER' entities is divisible by the
  13071.      recommended alignment for `REAL(KIND=2)'.
  13072.      By ordering the placement of entities in aggregate areas according
  13073.      to the simple guidelines above, you avoid having to carefully
  13074.      count the number of bytes occupied by each entity to determine
  13075.      whether the actual alignment of each subsequent entity meets the
  13076.      alignment guidelines for the type of that entity.
  13077.      If you don't ensure correct alignment of `COMMON' elements, the
  13078.      compiler may be forced by some systems to violate the Fortran
  13079.      semantics by adding padding to get `DOUBLE PRECISION' data
  13080.      properly aligned.  If the unfortunate practice is employed of
  13081.      overlaying different types of data in the `COMMON' block, the
  13082.      different variants of this block may become misaligned with
  13083.      respect to each other.  Even if your platform doesn't require
  13084.      strict alignment, `COMMON' should be laid out as above for
  13085.      portability.  (Unfortunately the FORTRAN 77 standard didn't
  13086.      anticipate this possible requirement, which is
  13087.      compiler-independent on a given platform.)
  13088.    * Use the (x86-specific) `-malign-double' option when compiling
  13089.      programs for the Pentium and Pentium Pro architectures (called 586
  13090.      and 686 in the `gcc' configuration subsystem).  The warning about
  13091.      this in the `gcc' manual isn't generally relevant to Fortran, but
  13092.      using it will force `COMMON' to be padded if necessary to align
  13093.      `DOUBLE PRECISION' data.
  13094.    * Ensure that `crt0.o' or `crt1.o' on your system guarantees a 64-bit
  13095.      aligned stack for `main()'.  The recent one from GNU (`glibc2')
  13096.      will do this on x86 systems, but we don't know of any other x86
  13097.      setups where it will be right.  Read your system's documentation
  13098.      to determine if it is appropriate to upgrade to a more recent
  13099.      version to obtain the optimal alignment.
  13100.    Progress is being made on making this work "out of the box" on
  13101. future versions of `g77', `gcc', and some of the relevant operating
  13102. systems (such as GNU/Linux).
  13103. File: g77.info,  Node: Prefer Automatic Uninitialized Variables,  Next: Avoid f2c Compatibility,  Prev: Aligned Data,  Up: Faster Programs
  13104. Prefer Automatic Uninitialized Variables
  13105. ----------------------------------------
  13106.    If you're using `-fno-automatic' already, you probably should change
  13107. your code to allow compilation with `-fautomatic' (the default), to
  13108. allow the program to run faster.
  13109.    Similarly, you should be able to use `-fno-init-local-zero' (the
  13110. default) instead of `-finit-local-zero'.  This is because it is rare
  13111. that every variable affected by these options in a given program
  13112. actually needs to be so affected.
  13113.    For example, `-fno-automatic', which effectively `SAVE's every local
  13114. non-automatic variable and array, affects even things like `DO'
  13115. iteration variables, which rarely need to be `SAVE'd, and this often
  13116. reduces run-time performances.  Similarly, `-fno-init-local-zero'
  13117. forces such variables to be initialized to zero--when `SAVE'd (such as
  13118. when `-fno-automatic'), this by itself generally affects only startup
  13119. time for a program, but when not `SAVE'd, it can slow down the
  13120. procedure every time it is called.
  13121.    *Note Overly Convenient Command-Line Options: Overly Convenient
  13122. Options, for information on the `-fno-automatic' and
  13123. `-finit-local-zero' options and how to convert their use into selective
  13124. changes in your own code.
  13125. File: g77.info,  Node: Avoid f2c Compatibility,  Next: Use Submodel Options,  Prev: Prefer Automatic Uninitialized Variables,  Up: Faster Programs
  13126. Avoid f2c Compatibility
  13127. -----------------------
  13128.    If you aren't linking with any code compiled using `f2c', try using
  13129. the `-fno-f2c' option when compiling *all* the code in your program.
  13130. (Note that `libf2c' is *not* an example of code that is compiled using
  13131. `f2c'--it is compiled by a C compiler, typically `gcc'.)
  13132. File: g77.info,  Node: Use Submodel Options,  Prev: Avoid f2c Compatibility,  Up: Faster Programs
  13133. Use Submodel Options
  13134. --------------------
  13135.    Using an appropriate `-m' option to generate specific code for your
  13136. CPU may be worthwhile, though it may mean the executable won't run on
  13137. other versions of the CPU that don't support the same instruction set.
  13138. *Note Hardware Models and Configurations: (gcc)Submodel Options.
  13139.    For recent CPUs that don't have explicit support in the released
  13140. version of `gcc', it may still be possible to get improvements.  For
  13141. instance, the flags recommended for 586/686 (Pentium(Pro)) chips for
  13142. building the Linux kernel are:
  13143.      -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
  13144.      -fomit-frame-pointer
  13145. `-fomit-frame-pointer' will, however, inhibit debugging on x86 systems.
  13146. File: g77.info,  Node: Trouble,  Next: Open Questions,  Prev: Collected Fortran Wisdom,  Up: Top
  13147. Known Causes of Trouble with GNU Fortran
  13148. ****************************************
  13149.    This section describes known problems that affect users of GNU
  13150. Fortran.  Most of these are not GNU Fortran bugs per se--if they were,
  13151. we would fix them.  But the result for a user might be like the result
  13152. of a bug.
  13153.    Some of these problems are due to bugs in other software, some are
  13154. missing features that are too much work to add, and some are places
  13155. where people's opinions differ as to what is best.
  13156.    Information on bugs that show up when configuring, porting, building,
  13157. or installing `g77' is not provided here.  *Note Problems Installing::.
  13158.    To find out about major bugs discovered in the current release and
  13159. possible workarounds for them, retrieve `ftp://alpha.gnu.org/g77.plan'.
  13160.    (Note that some of this portion of the manual is lifted directly
  13161. from the `gcc' manual, with minor modifications to tailor it to users
  13162. of `g77'.  Anytime a bug seems to have more to do with the `gcc'
  13163. portion of `g77', *Note Known Causes of Trouble with GNU CC:
  13164. (gcc)Trouble.)
  13165. * Menu:
  13166. * But-bugs::         Bugs really in other programs or elsewhere.
  13167. * Actual Bugs::      Bugs and misfeatures we will fix later.
  13168. * Missing Features:: Features we already know we want to add later.
  13169. * Disappointments::  Regrettable things we can't change.
  13170. * Non-bugs::         Things we think are right, but some others disagree.
  13171. * Warnings and Errors::  Which problems in your code get warnings,
  13172.                         and which get errors.
  13173. File: g77.info,  Node: But-bugs,  Next: Actual Bugs,  Up: Trouble
  13174. Bugs Not In GNU Fortran
  13175. =======================
  13176.    These are bugs to which the maintainers often have to reply, "but
  13177. that isn't a bug in `g77'...".  Some of these already are fixed in new
  13178. versions of other software; some still need to be fixed; some are
  13179. problems with how `g77' is installed or is being used; some are the
  13180. result of bad hardware that causes software to misbehave in sometimes
  13181. bizarre ways; some just cannot be addressed at this time until more is
  13182. known about the problem.
  13183.    Please don't re-report these bugs to the `g77' maintainers--if you
  13184. must remind someone how important it is to you that the problem be
  13185. fixed, talk to the people responsible for the other products identified
  13186. below, but preferably only after you've tried the latest versions of
  13187. those products.  The `g77' maintainers have their hands full working on
  13188. just fixing and improving `g77', without serving as a clearinghouse for
  13189. all bugs that happen to affect `g77' users.
  13190.    *Note Collected Fortran Wisdom::, for information on behavior of
  13191. Fortran programs, and the programs that compile them, that might be
  13192. *thought* to indicate bugs.
  13193. * Menu:
  13194. * Signal 11 and Friends::  Strange behavior by any software.
  13195. * Cannot Link Fortran Programs::  Unresolved references.
  13196. * Large Common Blocks::    Problems on older GNU/Linux systems.
  13197. * Debugger Problems::      When the debugger crashes.
  13198. * NeXTStep Problems::      Misbehaving executables.
  13199. * Stack Overflow::         More misbehaving executables.
  13200. * Nothing Happens::        Less behaving executables.
  13201. * Strange Behavior at Run Time::  Executables misbehaving due to
  13202.                             bugs in your program.
  13203. * Floating-point Errors::  The results look wrong, but....
  13204. File: g77.info,  Node: Signal 11 and Friends,  Next: Cannot Link Fortran Programs,  Up: But-bugs
  13205. Signal 11 and Friends
  13206. ---------------------
  13207.    A whole variety of strange behaviors can occur when the software, or
  13208. the way you are using the software, stresses the hardware in a way that
  13209. triggers hardware bugs.  This might seem hard to believe, but it
  13210. happens frequently enough that there exist documents explaining in
  13211. detail what the various causes of the problems are, what typical
  13212. symptoms look like, and so on.
  13213.    Generally these problems are referred to in this document as "signal
  13214. 11" crashes, because the Linux kernel, running on the most popular
  13215. hardware (the Intel x86 line), often stresses the hardware more than
  13216. other popular operating systems.  When hardware problems do occur under
  13217. GNU/Linux on x86 systems, these often manifest themselves as "signal 11"
  13218. problems, as illustrated by the following diagnostic:
  13219.      sh# g77 myprog.f
  13220.      gcc: Internal compiler error: program f771 got fatal signal 11
  13221.      sh#
  13222.    It is *very* important to remember that the above message is *not*
  13223. the only one that indicates a hardware problem, nor does it always
  13224. indicate a hardware problem.
  13225.    In particular, on systems other than those running the Linux kernel,
  13226. the message might appear somewhat or very different, as it will if the
  13227. error manifests itself while running a program other than the `g77'
  13228. compiler.  For example, it will appear somewhat different when running
  13229. your program, when running Emacs, and so on.
  13230.    How to cope with such problems is well beyond the scope of this
  13231. manual.
  13232.    However, users of Linux-based systems (such as GNU/Linux) should
  13233. review `http://www.bitwizard.nl/sig11', a source of detailed
  13234. information on diagnosing hardware problems, by recognizing their
  13235. common symptoms.
  13236.    Users of other operating systems and hardware might find this
  13237. reference useful as well.  If you know of similar material for another
  13238. hardware/software combination, please let us know so we can consider
  13239. including a reference to it in future versions of this manual.
  13240. File: g77.info,  Node: Cannot Link Fortran Programs,  Next: Large Common Blocks,  Prev: Signal 11 and Friends,  Up: But-bugs
  13241. Cannot Link Fortran Programs
  13242. ----------------------------
  13243.    On some systems, perhaps just those with out-of-date (shared?)
  13244. libraries, unresolved-reference errors happen when linking
  13245. `g77'-compiled programs (which should be done using `g77').
  13246.    If this happens to you, try appending `-lc' to the command you use
  13247. to link the program, e.g. `g77 foo.f -lc'.  `g77' already specifies
  13248. `-lf2c -lm' when it calls the linker, but it cannot also specify `-lc'
  13249. because not all systems have a file named `libc.a'.
  13250.    It is unclear at this point whether there are legitimately installed
  13251. systems where `-lf2c -lm' is insufficient to resolve code produced by
  13252. `g77'.
  13253.    If your program doesn't link due to unresolved references to names
  13254. like `_main', make sure you're using the `g77' command to do the link,
  13255. since this command ensures that the necessary libraries are loaded by
  13256. specifying `-lf2c -lm' when it invokes the `gcc' command to do the
  13257. actual link.  (Use the `-v' option to discover more about what actually
  13258. happens when you use the `g77' and `gcc' commands.)
  13259.    Also, try specifying `-lc' as the last item on the `g77' command
  13260. line, in case that helps.
  13261. File: g77.info,  Node: Large Common Blocks,  Next: Debugger Problems,  Prev: Cannot Link Fortran Programs,  Up: But-bugs
  13262. Large Common Blocks
  13263. -------------------
  13264.    On some older GNU/Linux systems, programs with common blocks larger
  13265. than 16MB cannot be linked without some kind of error message being
  13266. produced.
  13267.    This is a bug in older versions of `ld', fixed in more recent
  13268. versions of `binutils', such as version 2.6.
  13269. File: g77.info,  Node: Debugger Problems,  Next: NeXTStep Problems,  Prev: Large Common Blocks,  Up: But-bugs
  13270. Debugger Problems
  13271. -----------------
  13272.    There are some known problems when using `gdb' on code compiled by
  13273. `g77'.  Inadequate investigation as of the release of 0.5.16 results in
  13274. not knowing which products are the culprit, but `gdb-4.14' definitely
  13275. crashes when, for example, an attempt is made to print the contents of
  13276. a `COMPLEX(KIND=2)' dummy array, on at least some GNU/Linux machines,
  13277. plus some others.
  13278. File: g77.info,  Node: NeXTStep Problems,  Next: Stack Overflow,  Prev: Debugger Problems,  Up: But-bugs
  13279. NeXTStep Problems
  13280. -----------------
  13281.    Developers of Fortran code on NeXTStep (all architectures) have to
  13282. watch out for the following problem when writing programs with large,
  13283. statically allocated (i.e. non-stack based) data structures (common
  13284. blocks, saved arrays).
  13285.    Due to the way the native loader (`/bin/ld') lays out data
  13286. structures in virtual memory, it is very easy to create an executable
  13287. wherein the `__DATA' segment overlaps (has addresses in common) with
  13288. the `UNIX STACK' segment.
  13289.    This leads to all sorts of trouble, from the executable simply not
  13290. executing, to bus errors.  The NeXTStep command line tool `ebadexec'
  13291. points to the problem as follows:
  13292.      % /bin/ebadexec a.out
  13293.      /bin/ebadexec: __LINKEDIT segment (truncated address = 0x3de000
  13294.      rounded size = 0x2a000) of executable file: a.out overlaps with UNIX
  13295.      STACK segment (truncated address = 0x400000 rounded size =
  13296.      0x3c00000) of executable file: a.out
  13297.    (In the above case, it is the `__LINKEDIT' segment that overlaps the
  13298. stack segment.)
  13299.    This can be cured by assigning the `__DATA' segment (virtual)
  13300. addresses beyond the stack segment.  A conservative estimate for this
  13301. is from address 6000000 (hexadecimal) onwards--this has always worked
  13302. for me [Toon Moene]:
  13303.      % g77 -segaddr __DATA 6000000 test.f
  13304.      % ebadexec a.out
  13305.      ebadexec: file: a.out appears to be executable
  13306.      %
  13307.    Browsing through `gcc/f/Makefile.in', you will find that the `f771'
  13308. program itself also has to be linked with these flags--it has large
  13309. statically allocated data structures.  (Version 0.5.18 reduces this
  13310. somewhat, but probably not enough.)
  13311.    (The above item was contributed by Toon Moene
  13312. (<toon@moene.indiv.nluug.nl>).)
  13313. File: g77.info,  Node: Stack Overflow,  Next: Nothing Happens,  Prev: NeXTStep Problems,  Up: But-bugs
  13314. Stack Overflow
  13315. --------------
  13316.    `g77' code might fail at runtime (probably with a "segmentation
  13317. violation") due to overflowing the stack.  This happens most often on
  13318. systems with an environment that provides substantially more heap space
  13319. (for use when arbitrarily allocating and freeing memory) than stack
  13320. space.
  13321.    Often this can be cured by increasing or removing your shell's limit
  13322. on stack usage, typically using `limit stacksize' (in `csh' and
  13323. derivatives) or `ulimit -s' (in `sh' and derivatives).
  13324.    Increasing the allowed stack size might, however, require changing
  13325. some operating system or system configuration parameters.
  13326.    You might be able to work around the problem by compiling with the
  13327. `-fno-automatic' option to reduce stack usage, probably at the expense
  13328. of speed.
  13329.    *Note Maximum Stackable Size::, for information on patching `g77' to
  13330. use different criteria for placing local non-automatic variables and
  13331. arrays on the stack.
  13332.    However, if your program uses large automatic arrays (for example,
  13333. has declarations like `REAL A(N)' where `A' is a local array and `N' is
  13334. a dummy or `COMMON' variable that can have a large value), neither use
  13335. of `-fno-automatic', nor changing the cut-off point for `g77' for using
  13336. the stack, will solve the problem by changing the placement of these
  13337. large arrays, as they are *necessarily* automatic.
  13338.    `g77' currently provides no means to specify that automatic arrays
  13339. are to be allocated on the heap instead of the stack.  So, other than
  13340. increasing the stack size, your best bet is to change your source code
  13341. to avoid large automatic arrays.  Methods for doing this currently are
  13342. outside the scope of this document.
  13343.    (*Note:* If your system puts stack and heap space in the same memory
  13344. area, such that they are effectively combined, then a stack overflow
  13345. probably indicates a program that is either simply too large for the
  13346. system, or buggy.)
  13347. File: g77.info,  Node: Nothing Happens,  Next: Strange Behavior at Run Time,  Prev: Stack Overflow,  Up: But-bugs
  13348. Nothing Happens
  13349. ---------------
  13350.    It is occasionally reported that a "simple" program, such as a
  13351. "Hello, World!" program, does nothing when it is run, even though the
  13352. compiler reported no errors, despite the program containing nothing
  13353. other than a simple `PRINT' statement.
  13354.    This most often happens because the program has been compiled and
  13355. linked on a UNIX system and named `test', though other names can lead
  13356. to similarly unexpected run-time behavior on various systems.
  13357.    Essentially this problem boils down to giving your program a name
  13358. that is already known to the shell you are using to identify some other
  13359. program, which the shell continues to execute instead of your program
  13360. when you invoke it via, for example:
  13361.      sh# test
  13362.      sh#
  13363.    Under UNIX and many other system, a simple command name invokes a
  13364. searching mechanism that might well not choose the program located in
  13365. the current working directory if there is another alternative (such as
  13366. the `test' command commonly installed on UNIX systems).
  13367.    The reliable way to invoke a program you just linked in the current
  13368. directory under UNIX is to specify it using an explicit pathname, as in:
  13369.      sh# ./test
  13370.       Hello, World!
  13371.      sh#
  13372.    Users who encounter this problem should take the time to read up on
  13373. how their shell searches for commands, how to set their search path,
  13374. and so on.  The relevant UNIX commands to learn about include `man',
  13375. `info' (on GNU systems), `setenv' (or `set' and `env'), `which', and
  13376. `find'.
  13377. File: g77.info,  Node: Strange Behavior at Run Time,  Next: Floating-point Errors,  Prev: Nothing Happens,  Up: But-bugs
  13378. Strange Behavior at Run Time
  13379. ----------------------------
  13380.    `g77' code might fail at runtime with "segmentation violation", "bus
  13381. error", or even something as subtle as a procedure call overwriting a
  13382. variable or array element that it is not supposed to touch.
  13383.    These can be symptoms of a wide variety of actual bugs that occurred
  13384. earlier during the program's run, but manifested themselves as
  13385. *visible* problems some time later.
  13386.    Overflowing the bounds of an array--usually by writing beyond the
  13387. end of it--is one of two kinds of bug that often occurs in Fortran code.
  13388.    The other kind of bug is a mismatch between the actual arguments
  13389. passed to a procedure and the dummy arguments as declared by that
  13390. procedure.
  13391.    Both of these kinds of bugs, and some others as well, can be
  13392. difficult to track down, because the bug can change its behavior, or
  13393. even appear to not occur, when using a debugger.
  13394.    That is, these bugs can be quite sensitive to data, including data
  13395. representing the placement of other data in memory (that is, pointers,
  13396. such as the placement of stack frames in memory).
  13397.    Plans call for improving `g77' so that it can offer the ability to
  13398. catch and report some of these problems at compile, link, or run time,
  13399. such as by generating code to detect references to beyond the bounds of
  13400. an array, or checking for agreement between calling and called
  13401. procedures.
  13402.    In the meantime, finding and fixing the programming bugs that lead
  13403. to these behaviors is, ultimately, the user's responsibility, as
  13404. difficult as that task can sometimes be.
  13405.    One runtime problem that has been observed might have a simple
  13406. solution.  If a formatted `WRITE' produces an endless stream of spaces,
  13407. check that your program is linked against the correct version of the C
  13408. library.  The configuration process takes care to account for your
  13409. system's normal `libc' not being ANSI-standard, which will otherwise
  13410. cause this behaviour.  If your system's default library is
  13411. ANSI-standard and you subsequently link against a non-ANSI one, there
  13412. might be problems such as this one.
  13413.    Specifically, on Solaris2 systems, avoid picking up the `BSD'
  13414. library from `/usr/ucblib'.
  13415. File: g77.info,  Node: Floating-point Errors,  Prev: Strange Behavior at Run Time,  Up: But-bugs
  13416. Floating-point Errors
  13417. ---------------------
  13418.    Some programs appear to produce inconsistent floating-point results
  13419. compiled by `g77' versus by other compilers.
  13420.    Often the reason for this behavior is the fact that floating-point
  13421. values are represented on almost all Fortran systems by
  13422. *approximations*, and these approximations are inexact even for
  13423. apparently simple values like 0.1, 0.2, 0.3, 0.4, 0.6, 0.7, 0.8, 0.9,
  13424. 1.1, and so on.  Most Fortran systems, including all current ports of
  13425. `g77', use binary arithmetic to represent these approximations.
  13426.    Therefore, the exact value of any floating-point approximation as
  13427. manipulated by `g77'-compiled code is representable by adding some
  13428. combination of the values 1.0, 0.5, 0.25, 0.125, and so on (just keep
  13429. dividing by two) through the precision of the fraction (typically
  13430. around 23 bits for `REAL(KIND=1)', 52 for `REAL(KIND=2)'), then
  13431. multiplying the sum by a integral power of two (in Fortran, by `2**N')
  13432. that typically is between -127 and +128 for `REAL(KIND=1)' and -1023
  13433. and +1024 for `REAL(KIND=2)', then multiplying by -1 if the number is
  13434. negative.
  13435.    So, a value like 0.2 is exactly represented in decimal--since it is
  13436. a fraction, `2/10', with a denomenator that is compatible with the base
  13437. of the number system (base 10).  However, `2/10' cannot be represented
  13438. by any finite number of sums of any of 1.0, 0.5, 0.25, and so on, so
  13439. 0.2 cannot be exactly represented in binary notation.
  13440.    (On the other hand, decimal notation can represent any binary number
  13441. in a finite number of digits.  Decimal notation cannot do so with
  13442. ternary, or base-3, notation, which would represent floating-point
  13443. numbers as sums of any of `1/1', `1/3', `1/9', and so on.  After all,
  13444. no finite number of decimal digits can exactly represent `1/3'.
  13445. Fortunately, few systems use ternary notation.)
  13446.    Moreover, differences in the way run-time I/O libraries convert
  13447. between these approximations and the decimal representation often used
  13448. by programmers and the programs they write can result in apparent
  13449. differences between results that do not actually exist, or exist to
  13450. such a small degree that they usually are not worth worrying about.
  13451.    For example, consider the following program:
  13452.      PRINT *, 0.2
  13453.      END
  13454.    When compiled by `g77', the above program might output `0.20000003',
  13455. while another compiler might produce a executable that outputs `0.2'.
  13456.    This particular difference is due to the fact that, currently,
  13457. conversion of floating-point values by the `libf2c' library, used by
  13458. `g77', handles only double-precision values.
  13459.    Since `0.2' in the program is a single-precision value, it is
  13460. converted to double precision (still in binary notation) before being
  13461. converted back to decimal.  The conversion to binary appends _binary_
  13462. zero digits to the original value--which, again, is an inexact
  13463. approximation of 0.2--resulting in an approximation that is much less
  13464. exact than is connoted by the use of double precision.
  13465.    (The appending of binary zero digits has essentially the same effect
  13466. as taking a particular decimal approximation of `1/3', such as
  13467. `0.3333333', and appending decimal zeros to it, producing
  13468. `0.33333330000000000'.  Treating the resulting decimal approximation as
  13469. if it really had 18 or so digits of valid precision would make it seem
  13470. a very poor approximation of `1/3'.)
  13471.    As a result of converting the single-precision approximation to
  13472. double precision by appending binary zeros, the conversion of the
  13473. resulting double-precision value to decimal produces what looks like an
  13474. incorrect result, when in fact the result is *inexact*, and is probably
  13475. no less inaccurate or imprecise an approximation of 0.2 than is
  13476. produced by other compilers that happen to output the converted value
  13477. as "exactly" `0.2'.  (Some compilers behave in a way that can make them
  13478. appear to retain more accuracy across a conversion of a single-precision
  13479. constant to double precision.  *Note Context-Sensitive Constants::, to
  13480. see why this practice is illusory and even dangerous.)
  13481.    Note that a more exact approximation of the constant is computed
  13482. when the program is changed to specify a double-precision constant:
  13483.      PRINT *, 0.2D0
  13484.      END
  13485.    Future versions of `g77' and/or `libf2c' might convert
  13486. single-precision values directly to decimal, instead of converting them
  13487. to double precision first.  This would tend to result in output that is
  13488. more consistent with that produced by some other Fortran
  13489. implementations.
  13490. File: g77.info,  Node: Actual Bugs,  Next: Missing Features,  Prev: But-bugs,  Up: Trouble
  13491. Actual Bugs We Haven't Fixed Yet
  13492. ================================
  13493.    This section identifies bugs that `g77' *users* might run into.
  13494. This includes bugs that are actually in the `gcc' back end (GBE) or in
  13495. `libf2c', because those sets of code are at least somewhat under the
  13496. control of (and necessarily intertwined with) `g77', so it isn't worth
  13497. separating them out.
  13498.    For information on bugs that might afflict people who configure,
  13499. port, build, and install `g77', *Note Problems Installing::.
  13500.    * `g77''s version of `gcc', and probably `g77' itself, cannot be
  13501.      reliably used with the `-O2' option (or higher) on Digital
  13502.      Semiconductor Alpha AXP machines.  The problem is most immediately
  13503.      noticed in differences discovered by `make compare' following a
  13504.      bootstrap build using `-O2'.  It also manifests itself as a
  13505.      failure to compile `DATA' statements such as `DATA R/7./'
  13506.      correctly; in this case, `R' might be initialized to `4.0'.
  13507.      Until this bug is fixed, use only `-O1' or no optimization.
  13508.    * Something about `g77''s straightforward handling of label
  13509.      references and definitions sometimes prevents the GBE from
  13510.      unrolling loops.  Until this is solved, try inserting or removing
  13511.      `CONTINUE' statements as the terminal statement, using the `END DO'
  13512.      form instead, and so on.  (Probably improved, but not wholly
  13513.      fixed, in 0.5.21.)
  13514.    * The `g77' command itself should more faithfully process options
  13515.      the way the `gcc' command does.  For example, `gcc' accepts
  13516.      abbreviated forms of long options, `g77' generally doesn't.
  13517.    * Some confusion in diagnostics concerning failing `INCLUDE'
  13518.      statements from within `INCLUDE''d or `#include''d files.
  13519.    * `g77' assumes that `INTEGER(KIND=1)' constants range from `-2**31'
  13520.      to `2**31-1' (the range for two's-complement 32-bit values),
  13521.      instead of determining their range from the actual range of the
  13522.      type for the configuration (and, someday, for the constant).
  13523.      Further, it generally doesn't implement the handling of constants
  13524.      very well in that it makes assumptions about the configuration
  13525.      that it no longer makes regarding variables (types).
  13526.      Included with this item is the fact that `g77' doesn't recognize
  13527.      that, on IEEE-754/854-compliant systems, `0./0.' should produce a
  13528.      NaN and no warning instead of the value `0.' and a warning.  This
  13529.      is to be fixed in version 0.6, when `g77' will use the `gcc' back
  13530.      end's constant-handling mechanisms to replace its own.
  13531.    * `g77' uses way too much memory and CPU time to process large
  13532.      aggregate areas having any initialized elements.
  13533.      For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up
  13534.      way too much time and space, including the size of the generated
  13535.      assembler file.  This is to be mitigated somewhat in version 0.6.
  13536.      Version 0.5.18 improves cases like this--specifically, cases of
  13537.      *sparse* initialization that leave large, contiguous areas
  13538.      uninitialized--significantly.  However, even with the
  13539.      improvements, these cases still require too much memory and CPU
  13540.      time.
  13541.      (Version 0.5.18 also improves cases where the initial values are
  13542.      zero to a much greater degree, so if the above example ends with
  13543.      `DATA A(1)/0/', the compile-time performance will be about as good
  13544.      as it will ever get, aside from unrelated improvements to the
  13545.      compiler.)
  13546.      Note that `g77' does display a warning message to notify the user
  13547.      before the compiler appears to hang.  *Note Initialization of
  13548.      Large Aggregate Areas: Large Initialization, for information on
  13549.      how to change the point at which `g77' decides to issue this
  13550.      warning.
  13551.    * `g77' doesn't emit variable and array members of common blocks for
  13552.      use with a debugger (the `-g' command-line option).  The code is
  13553.      present to do this, but doesn't work with at least one debug
  13554.      format--perhaps it works with others.  And it turns out there's a
  13555.      similar bug for local equivalence areas, so that has been disabled
  13556.      as well.
  13557.      As of Version 0.5.19, a temporary kludge solution is provided
  13558.      whereby some rudimentary information on a member is written as a
  13559.      string that is the member's value as a character string.
  13560.      *Note Options for Code Generation Conventions: Code Gen Options,
  13561.      for information on the `-fdebug-kludge' option.
  13562.    * When debugging, after starting up the debugger but before being
  13563.      able to see the source code for the main program unit, the user
  13564.      must currently set a breakpoint at `MAIN__' (or `MAIN___' or
  13565.      `MAIN_' if `MAIN__' doesn't exist) and run the program until it
  13566.      hits the breakpoint.  At that point, the main program unit is
  13567.      activated and about to execute its first executable statement, but
  13568.      that's the state in which the debugger should start up, as is the
  13569.      case for languages like C.
  13570.    * Debugging `g77'-compiled code using debuggers other than `gdb' is
  13571.      likely not to work.
  13572.      Getting `g77' and `gdb' to work together is a known
  13573.      problem--getting `g77' to work properly with other debuggers, for
  13574.      which source code often is unavailable to `g77' developers, seems
  13575.      like a much larger, unknown problem, and is a lower priority than
  13576.      making `g77' and `gdb' work together properly.
  13577.      On the other hand, information about problems other debuggers have
  13578.      with `g77' output might make it easier to properly fix `g77', and
  13579.      perhaps even improve `gdb', so it is definitely welcome.  Such
  13580.      information might even lead to all relevant products working
  13581.      together properly sooner.
  13582.    * `g77' currently inserts needless padding for things like `COMMON
  13583.      A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)'
  13584.      on machines like x86, because the back end insists that `IPAD' be
  13585.      aligned to a 4-byte boundary, but the processor has no such
  13586.      requirement (though it's good for performance).
  13587.      It is possible that this is not a real bug, and could be considered
  13588.      a performance feature, but it might be important to provide the
  13589.      ability to Fortran code to specify minimum padding for aggregate
  13590.      areas such as common blocks--and, certainly, there is the
  13591.      potential, with the current setup, for interface differences in
  13592.      the way such areas are laid out between `g77' and other compilers.
  13593.    * `g77' doesn't work perfectly on 64-bit configurations such as the
  13594.      Alpha.  This problem is expected to be largely resolved as of
  13595.      version 0.5.20, and further addressed by 0.5.21.  Version 0.6
  13596.      should solve most or all related problems (such as 64-bit machines
  13597.      other than Digital Semiconductor ("DEC") Alphas).
  13598.      One known bug that causes a compile-time crash occurs when
  13599.      compiling code such as the following with optimization:
  13600.           SUBROUTINE CRASH (TEMP)
  13601.           INTEGER*2 HALF(2)
  13602.           REAL TEMP
  13603.           HALF(1) = NINT (TEMP)
  13604.           END
  13605.      It is expected that a future version of `g77' will have a fix for
  13606.      this problem, almost certainly by the time `g77' supports the
  13607.      forthcoming version 2.8.0 of `gcc'.
  13608.    * Maintainers of gcc report that the back end definitely has "broken"
  13609.      support for `COMPLEX' types.  Based on their input, it seems many
  13610.      of the problems affect only the more-general facilities for gcc's
  13611.      `__complex__' type, such as `__complex__ int' (where the real and
  13612.      imaginary parts are integers) that GNU Fortran does not use.
  13613.      Version 0.5.20 of `g77' works around this problem by not using the
  13614.      back end's support for `COMPLEX'.  The new option
  13615.      `-fno-emulate-complex' avoids the work-around, reverting to using
  13616.      the same "broken" mechanism as that used by versions of `g77'
  13617.      prior to 0.5.20.
  13618.    * There seem to be some problems with passing constants, and perhaps
  13619.      general expressions (other than simple variables/arrays), to
  13620.      procedures when compiling on some systems (such as i386) with
  13621.      `-fPIC', as in when compiling for ELF targets.  The symptom is
  13622.      that the assembler complains about invalid opcodes.  This bug is
  13623.      in the gcc back end, and it apparently occurs only when compiling
  13624.      sufficiently complicated functions *without* the `-O' option.
  13625. File: g77.info,  Node: Missing Features,  Next: Disappointments,  Prev: Actual Bugs,  Up: Trouble
  13626. Missing Features
  13627. ================
  13628.    This section lists features we know are missing from `g77', and
  13629. which we want to add someday.  (There is no priority implied in the
  13630. ordering below.)
  13631. * Menu:
  13632. GNU Fortran language:
  13633. * Better Source Model::
  13634. * Fortran 90 Support::
  13635. * Intrinsics in PARAMETER Statements::
  13636. * SELECT CASE on CHARACTER Type::
  13637. * RECURSIVE Keyword::
  13638. * Popular Non-standard Types::
  13639. * Full Support for Compiler Types::
  13640. * Array Bounds Expressions::
  13641. * POINTER Statements::
  13642. * Sensible Non-standard Constructs::
  13643. * FLUSH Statement::
  13644. * Expressions in FORMAT Statements::
  13645. * Explicit Assembler Code::
  13646. * Q Edit Descriptor::
  13647. GNU Fortran dialects:
  13648. * Old-style PARAMETER Statements::
  13649. * TYPE and ACCEPT I/O Statements::
  13650. * STRUCTURE UNION RECORD MAP::
  13651. * OPEN CLOSE and INQUIRE Keywords::
  13652. * ENCODE and DECODE::
  13653. * Suppressing Space Padding::
  13654. * Fortran Preprocessor::
  13655. * Bit Operations on Floating-point Data::
  13656. New facilities:
  13657. * POSIX Standard::
  13658. * Floating-point Exception Handling::
  13659. * Nonportable Conversions::
  13660. * Large Automatic Arrays::
  13661. * Support for Threads::
  13662. * Increasing Precision/Range::
  13663. Better diagnostics:
  13664. * Gracefully Handle Sensible Bad Code::
  13665. * Non-standard Conversions::
  13666. * Non-standard Intrinsics::
  13667. * Modifying DO Variable::
  13668. * Better Pedantic Compilation::
  13669. * Warn About Implicit Conversions::
  13670. * Invalid Use of Hollerith Constant::
  13671. * Dummy Array Without Dimensioning Dummy::
  13672. * Invalid FORMAT Specifiers::
  13673. * Ambiguous Dialects::
  13674. * Unused Labels::
  13675. * Informational Messages::
  13676. Run-time facilities:
  13677. * Uninitialized Variables at Run Time::
  13678. * Bounds Checking at Run Time::
  13679. Debugging:
  13680. * Labels Visible to Debugger::
  13681. File: g77.info,  Node: Better Source Model,  Next: Fortran 90 Support,  Up: Missing Features
  13682. Better Source Model
  13683. -------------------
  13684.    `g77' needs to provide, as the default source-line model, a "pure
  13685. visual" mode, where the interpretation of a source program in this mode
  13686. can be accurately determined by a user looking at a traditionally
  13687. displayed rendition of the program (assuming the user knows whether the
  13688. program is fixed or free form).
  13689.    The design should assume the user cannot tell tabs from spaces and
  13690. cannot see trailing spaces on lines, but has canonical tab stops and,
  13691. for fixed-form source, has the ability to always know exactly where
  13692. column 72 is (since the Fortran standard itself requires this for
  13693. fixed-form source).
  13694.    This would change the default treatment of fixed-form source to not
  13695. treat lines with tabs as if they were infinitely long--instead, they
  13696. would end at column 72 just as if the tabs were replaced by spaces in
  13697. the canonical way.
  13698.    As part of this, provide common alternate models (Digital, `f2c',
  13699. and so on) via command-line options.  This includes allowing
  13700. arbitrarily long lines for free-form source as well as fixed-form
  13701. source and providing various limits and diagnostics as appropriate.
  13702.    Also, `g77' should offer, perhaps even default to, warnings when
  13703. characters beyond the last valid column are anything other than spaces.
  13704. This would mean code with "sequence numbers" in columns 73 through 80
  13705. would be rejected, and there's a lot of that kind of code around, but
  13706. one of the most frequent bugs encountered by new users is accidentally
  13707. writing fixed-form source code into and beyond column 73.  So, maybe
  13708. the users of old code would be able to more easily handle having to
  13709. specify, say, a `-Wno-col73to80' option.
  13710. File: g77.info,  Node: Fortran 90 Support,  Next: Intrinsics in PARAMETER Statements,  Prev: Better Source Model,  Up: Missing Features
  13711. Fortran 90 Support
  13712. ------------------
  13713.    `g77' does not support many of the features that distinguish Fortran
  13714. 90 (and, now, Fortran 95) from ANSI FORTRAN 77.
  13715.    Some Fortran 90 features are supported, because they make sense to
  13716. offer even to die-hard users of F77.  For example, many of them codify
  13717. various ways F77 has been extended to meet users' needs during its
  13718. tenure, so `g77' might as well offer them as the primary way to meet
  13719. those same needs, even if it offers compatibility with one or more of
  13720. the ways those needs were met by other F77 compilers in the industry.
  13721.    Still, many important F90 features are not supported, because no
  13722. attempt has been made to research each and every feature and assess its
  13723. viability in `g77'.  In the meantime, users who need those features must
  13724. use Fortran 90 compilers anyway, and the best approach to adding some
  13725. F90 features to GNU Fortran might well be to fund a comprehensive
  13726. project to create GNU Fortran 95.
  13727. File: g77.info,  Node: Intrinsics in PARAMETER Statements,  Next: SELECT CASE on CHARACTER Type,  Prev: Fortran 90 Support,  Up: Missing Features
  13728. Intrinsics in `PARAMETER' Statements
  13729. ------------------------------------
  13730.    `g77' doesn't allow intrinsics in `PARAMETER' statements.  This
  13731. feature is considered to be absolutely vital, even though it is not
  13732. standard-conforming, and is scheduled for version 0.6.
  13733.    Related to this, `g77' doesn't allow non-integral exponentiation in
  13734. `PARAMETER' statements, such as `PARAMETER (R=2**.25)'.  It is unlikely
  13735. `g77' will ever support this feature, as doing it properly requires
  13736. complete emulation of a target computer's floating-point facilities when
  13737. building `g77' as a cross-compiler.  But, if the `gcc' back end is
  13738. enhanced to provide such a facility, `g77' will likely use that facility
  13739. in implementing this feature soon afterwards.
  13740. File: g77.info,  Node: SELECT CASE on CHARACTER Type,  Next: RECURSIVE Keyword,  Prev: Intrinsics in PARAMETER Statements,  Up: Missing Features
  13741. `SELECT CASE' on `CHARACTER' Type
  13742. ---------------------------------
  13743.    Character-type selector/cases for `SELECT CASE' currently are not
  13744. supported.
  13745. File: g77.info,  Node: RECURSIVE Keyword,  Next: Popular Non-standard Types,  Prev: SELECT CASE on CHARACTER Type,  Up: Missing Features
  13746. `RECURSIVE' Keyword
  13747. -------------------
  13748.    `g77' doesn't support the `RECURSIVE' keyword that F90 compilers do.
  13749. Nor does it provide any means for compiling procedures designed to do
  13750. recursion.
  13751.    All recursive code can be rewritten to not use recursion, but the
  13752. result is not pretty.
  13753. File: g77.info,  Node: Increasing Precision/Range,  Next: Gracefully Handle Sensible Bad Code,  Prev: Support for Threads,  Up: Missing Features
  13754. Increasing Precision/Range
  13755. --------------------------
  13756.    Some compilers, such as `f2c', have an option (`-r8' or similar)
  13757. that provides automatic treatment of `REAL' entities such that they
  13758. have twice the storage size, and a corresponding increase in the range
  13759. and precision, of what would normally be the `REAL(KIND=1)' (default
  13760. `REAL') type.  (This affects `COMPLEX' the same way.)
  13761.    They also typically offer another option (`-i8') to increase
  13762. `INTEGER' entities so they are twice as large (with roughly twice as
  13763. much range).
  13764.    (There are potential pitfalls in using these options.)
  13765.    `g77' does not yet offer any option that performs these kinds of
  13766. transformations.  Part of the problem is the lack of detailed
  13767. specifications regarding exactly how these options affect the
  13768. interpretation of constants, intrinsics, and so on.
  13769.    Until `g77' addresses this need, programmers could improve the
  13770. portability of their code by modifying it to not require compile-time
  13771. options to produce correct results.  Some free tools are available
  13772. which may help, specifically in Toolpack (which one would expect to be
  13773. sound) and the `fortran' section of the Netlib repository.
  13774.    Use of preprocessors can provide a fairly portable means to work
  13775. around the lack of widely portable methods in the Fortran language
  13776. itself (though increasing acceptance of Fortran 90 would alleviate this
  13777. problem).
  13778. File: g77.info,  Node: Popular Non-standard Types,  Next: Full Support for Compiler Types,  Prev: RECURSIVE Keyword,  Up: Missing Features
  13779. Popular Non-standard Types
  13780. --------------------------
  13781.    `g77' doesn't fully support `INTEGER*2', `LOGICAL*1', and similar.
  13782. Version 0.6 will provide full support for this very popular set of
  13783. features.  In the meantime, version 0.5.18 provides rudimentary support
  13784. for them.
  13785. File: g77.info,  Node: Full Support for Compiler Types,  Next: Array Bounds Expressions,  Prev: Popular Non-standard Types,  Up: Missing Features
  13786. Full Support for Compiler Types
  13787. -------------------------------
  13788.    `g77' doesn't support `INTEGER', `REAL', and `COMPLEX' equivalents
  13789. for *all* applicable back-end-supported types (`char', `short int',
  13790. `int', `long int', `long long int', and `long double').  This means
  13791. providing intrinsic support, and maybe constant support (using F90
  13792. syntax) as well, and, for most machines will result in automatic
  13793. support of `INTEGER*1', `INTEGER*2', `INTEGER*8', maybe even `REAL*16',
  13794. and so on.  This is scheduled for version 0.6.
  13795. File: g77.info,  Node: Array Bounds Expressions,  Next: POINTER Statements,  Prev: Full Support for Compiler Types,  Up: Missing Features
  13796. Array Bounds Expressions
  13797. ------------------------
  13798.    `g77' doesn't support more general expressions to dimension arrays,
  13799. such as array element references, function references, etc.
  13800.    For example, `g77' currently does not accept the following:
  13801.      SUBROUTINE X(M, N)
  13802.      INTEGER N(10), M(N(2), N(1))
  13803. File: g77.info,  Node: POINTER Statements,  Next: Sensible Non-standard Constructs,  Prev: Array Bounds Expressions,  Up: Missing Features
  13804. POINTER Statements
  13805. ------------------
  13806.    `g77' doesn't support pointers or allocatable objects (other than
  13807. automatic arrays).  This set of features is probably considered just
  13808. behind intrinsics in `PARAMETER' statements on the list of large,
  13809. important things to add to `g77'.
  13810.    In the meantime, consider using the `INTEGER(KIND=7)' declaration to
  13811. specify that a variable must be able to hold a pointer.  This construct
  13812. is not portable to other non-GNU compilers, but it is portable to all
  13813. machines GNU Fortran supports when `g77' is used.
  13814.    *Note Functions and Subroutines::, for information on `%VAL()',
  13815. `%REF()', and `%DESCR()' constructs, which are useful for passing
  13816. pointers to procedures written in languages other than Fortran.
  13817. File: g77.info,  Node: Sensible Non-standard Constructs,  Next: FLUSH Statement,  Prev: POINTER Statements,  Up: Missing Features
  13818. Sensible Non-standard Constructs
  13819. --------------------------------
  13820.    `g77' rejects things other compilers accept, like `INTRINSIC
  13821. SQRT,SQRT'.  As time permits in the future, some of these things that
  13822. are easy for humans to read and write and unlikely to be intended to
  13823. mean something else will be accepted by `g77' (though `-fpedantic'
  13824. should trigger warnings about such non-standard constructs).
  13825.    Until `g77' no longer gratuitously rejects sensible code, you might
  13826. as well fix your code to be more standard-conforming and portable.
  13827.    The kind of case that is important to except from the recommendation
  13828. to change your code is one where following good coding rules would
  13829. force you to write non-standard code that nevertheless has a clear
  13830. meaning.
  13831.    For example, when writing an `INCLUDE' file that defines a common
  13832. block, it might be appropriate to include a `SAVE' statement for the
  13833. common block (such as `SAVE /CBLOCK/'), so that variables defined in
  13834. the common block retain their values even when all procedures declaring
  13835. the common block become inactive (return to their callers).
  13836.    However, putting `SAVE' statements in an `INCLUDE' file would
  13837. prevent otherwise standard-conforming code from also specifying the
  13838. `SAVE' statement, by itself, to indicate that all local variables and
  13839. arrays are to have the `SAVE' attribute.
  13840.    For this reason, `g77' already has been changed to allow this
  13841. combination, because although the general problem of gratuitously
  13842. rejecting unambiguous and "safe" constructs still exists in `g77', this
  13843. particular construct was deemed useful enough that it was worth fixing
  13844. `g77' for just this case.
  13845.    So, while there is no need to change your code to avoid using this
  13846. particular construct, there might be other, equally appropriate but
  13847. non-standard constructs, that you shouldn't have to stop using just
  13848. because `g77' (or any other compiler) gratuitously rejects it.
  13849.    Until the general problem is solved, if you have any such construct
  13850. you believe is worthwhile using (e.g. not just an arbitrary, redundant
  13851. specification of an attribute), please submit a bug report with an
  13852. explanation, so we can consider fixing `g77' just for cases like yours.
  13853. File: g77.info,  Node: FLUSH Statement,  Next: Expressions in FORMAT Statements,  Prev: Sensible Non-standard Constructs,  Up: Missing Features
  13854. `FLUSH' Statement
  13855. -----------------
  13856.    `g77' could perhaps use a `FLUSH' statement that does what `CALL
  13857. FLUSH' does, but that supports `*' as the unit designator (same unit as
  13858. for `PRINT') and accepts `ERR=' and/or `IOSTAT=' specifiers.
  13859. File: g77.info,  Node: Expressions in FORMAT Statements,  Next: Explicit Assembler Code,  Prev: FLUSH Statement,  Up: Missing Features
  13860. Expressions in `FORMAT' Statements
  13861. ----------------------------------
  13862.    `g77' doesn't support `FORMAT(I<J>)' and the like.  Supporting this
  13863. requires a significant redesign or replacement of `libf2c'.
  13864.    However, `g77' does support this construct when the expression is
  13865. constant (as of version 0.5.22).  For example:
  13866.            PARAMETER (IWIDTH = 12)
  13867.      10    FORMAT (I<IWIDTH>)
  13868.    Otherwise, at least for output (`PRINT' and `WRITE'), Fortran code
  13869. making use of this feature can be rewritten to avoid it by constructing
  13870. the `FORMAT' string in a `CHARACTER' variable or array, then using that
  13871. variable or array in place of the `FORMAT' statement label to do the
  13872. original `PRINT' or `WRITE'.
  13873.    Many uses of this feature on input can be rewritten this way as
  13874. well, but not all can.  For example, this can be rewritten:
  13875.            READ 20, I
  13876.      20    FORMAT (I<J>)
  13877.    However, this cannot, in general, be rewritten, especially when
  13878. `ERR=' and `END=' constructs are employed:
  13879.            READ 30, J, I
  13880.      30    FORMAT (I<J>)
  13881. File: g77.info,  Node: Explicit Assembler Code,  Next: Q Edit Descriptor,  Prev: Expressions in FORMAT Statements,  Up: Missing Features
  13882. Explicit Assembler Code
  13883. -----------------------
  13884.    `g77' needs to provide some way, a la `gcc', for `g77' code to
  13885. specify explicit assembler code.
  13886. File: g77.info,  Node: Q Edit Descriptor,  Next: Old-style PARAMETER Statements,  Prev: Explicit Assembler Code,  Up: Missing Features
  13887. Q Edit Descriptor
  13888. -----------------
  13889.    The `Q' edit descriptor in `FORMAT's isn't supported.  (This is
  13890. meant to get the number of characters remaining in an input record.)
  13891. Supporting this requires a significant redesign or replacement of
  13892. `libf2c'.
  13893.    A workaround might be using internal I/O or the stream-based
  13894. intrinsics.  *Note FGetC Intrinsic (subroutine)::.
  13895. File: g77.info,  Node: Old-style PARAMETER Statements,  Next: TYPE and ACCEPT I/O Statements,  Prev: Q Edit Descriptor,  Up: Missing Features
  13896. Old-style PARAMETER Statements
  13897. ------------------------------
  13898.    `g77' doesn't accept `PARAMETER I=1'.  Supporting this obsolete form
  13899. of the `PARAMETER' statement would not be particularly hard, as most of
  13900. the parsing code is already in place and working.
  13901.    Until time/money is spent implementing it, you might as well fix
  13902. your code to use the standard form, `PARAMETER (I=1)' (possibly needing
  13903. `INTEGER I' preceding the `PARAMETER' statement as well, otherwise, in
  13904. the obsolete form of `PARAMETER', the type of the variable is set from
  13905. the type of the constant being assigned to it).
  13906. File: g77.info,  Node: TYPE and ACCEPT I/O Statements,  Next: STRUCTURE UNION RECORD MAP,  Prev: Old-style PARAMETER Statements,  Up: Missing Features
  13907. `TYPE' and `ACCEPT' I/O Statements
  13908. ----------------------------------
  13909.    `g77' doesn't support the I/O statements `TYPE' and `ACCEPT'.  These
  13910. are common extensions that should be easy to support, but also are
  13911. fairly easy to work around in user code.
  13912.    Generally, any `TYPE fmt,list' I/O statement can be replaced by
  13913. `PRINT fmt,list'.  And, any `ACCEPT fmt,list' statement can be replaced
  13914. by `READ fmt,list'.
  13915. File: g77.info,  Node: STRUCTURE UNION RECORD MAP,  Next: OPEN CLOSE and INQUIRE Keywords,  Prev: TYPE and ACCEPT I/O Statements,  Up: Missing Features
  13916. `STRUCTURE', `UNION', `RECORD', `MAP'
  13917. -------------------------------------
  13918.    `g77' doesn't support `STRUCTURE', `UNION', `RECORD', `MAP'.  This
  13919. set of extensions is quite a bit lower on the list of large, important
  13920. things to add to `g77', partly because it requires a great deal of work
  13921. either upgrading or replacing `libf2c'.
  13922. File: g77.info,  Node: OPEN CLOSE and INQUIRE Keywords,  Next: ENCODE and DECODE,  Prev: STRUCTURE UNION RECORD MAP,  Up: Missing Features
  13923. `OPEN', `CLOSE', and `INQUIRE' Keywords
  13924. ---------------------------------------
  13925.    `g77' doesn't have support for keywords such as `DISP='DELETE'' in
  13926. the `OPEN', `CLOSE', and `INQUIRE' statements.  These extensions are
  13927. easy to add to `g77' itself, but require much more work on `libf2c'.
  13928. File: g77.info,  Node: ENCODE and DECODE,  Next: Suppressing Space Padding,  Prev: OPEN CLOSE and INQUIRE Keywords,  Up: Missing Features
  13929. `ENCODE' and `DECODE'
  13930. ---------------------
  13931.    `g77' doesn't support `ENCODE' or `DECODE'.
  13932.    These statements are best replaced by READ and WRITE statements
  13933. involving internal files (CHARACTER variables and arrays).
  13934.    For example, replace a code fragment like
  13935.            INTEGER*1 LINE(80)
  13936.      ...
  13937.            DECODE (80, 9000, LINE) A, B, C
  13938.      ...
  13939.      9000  FORMAT (1X, 3(F10.5))
  13940. with:
  13941.            CHARACTER*80 LINE
  13942.      ...
  13943.            READ (UNIT=LINE, FMT=9000) A, B, C
  13944.      ...
  13945.      9000  FORMAT (1X, 3(F10.5))
  13946.    Similarly, replace a code fragment like
  13947.            INTEGER*1 LINE(80)
  13948.      ...
  13949.            ENCODE (80, 9000, LINE) A, B, C
  13950.      ...
  13951.      9000  FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
  13952. with:
  13953.            CHARACTER*80 LINE
  13954.      ...
  13955.            WRITE (UNIT=LINE, FMT=9000) A, B, C
  13956.      ...
  13957.      9000  FORMAT (1X, 'OUTPUT IS ', 3(F10.5))
  13958.    It is entirely possible that `ENCODE' and `DECODE' will be supported
  13959. by a future version of `g77'.
  13960. File: g77.info,  Node: Suppressing Space Padding,  Next: Fortran Preprocessor,  Prev: ENCODE and DECODE,  Up: Missing Features
  13961. Suppressing Space Padding of Source Lines
  13962. -----------------------------------------
  13963.    `g77' should offer VXT-Fortran-style suppression of virtual spaces
  13964. at the end of a source line if an appropriate command-line option is
  13965. specified.
  13966.    This affects cases where a character constant is continued onto the
  13967. next line in a fixed-form source file, as in the following example:
  13968.      10    PRINT *,'HOW MANY
  13969.           1 SPACES?'
  13970. `g77', and many other compilers, virtually extend the continued line
  13971. through column 72 with spaces that become part of the character
  13972. constant, but Digital Fortran normally didn't, leaving only one space
  13973. between `MANY' and `SPACES?'  in the output of the above statement.
  13974.    Fairly recently, at least one version of Digital Fortran was
  13975. enhanced to provide the other behavior when a command-line option is
  13976. specified, apparently due to demand from readers of the USENET group
  13977. `comp.lang.fortran' to offer conformance to this widespread practice in
  13978. the industry.  `g77' should return the favor by offering conformance to
  13979. Digital's approach to handling the above example.
  13980. File: g77.info,  Node: Fortran Preprocessor,  Next: Bit Operations on Floating-point Data,  Prev: Suppressing Space Padding,  Up: Missing Features
  13981. Fortran Preprocessor
  13982. --------------------
  13983.    `g77' should offer a preprocessor designed specifically for Fortran
  13984. to replace `cpp -traditional'.  There are several out there worth
  13985. evaluating, at least.
  13986.    Such a preprocessor would recognize Hollerith constants, properly
  13987. parse comments and character constants, and so on.  It might also
  13988. recognize, process, and thus preprocess files included via the
  13989. `INCLUDE' directive.
  13990. File: g77.info,  Node: Bit Operations on Floating-point Data,  Next: POSIX Standard,  Prev: Fortran Preprocessor,  Up: Missing Features
  13991. Bit Operations on Floating-point Data
  13992. -------------------------------------
  13993.    `g77' does not allow `REAL' and other non-integral types for
  13994. arguments to intrinsics like `AND', `OR', and `SHIFT'.
  13995.    For example, this program is rejected by `g77', because the
  13996. intrinsic `IAND' does not accept `REAL' arguments:
  13997.      DATA A/7.54/, B/9.112/
  13998.      PRINT *, IAND(A, B)
  13999.      END
  14000. File: g77.info,  Node: POSIX Standard,  Next: Floating-point Exception Handling,  Prev: Bit Operations on Floating-point Data,  Up: Missing Features
  14001. `POSIX' Standard
  14002. ----------------
  14003.    `g77' should support the POSIX standard for Fortran.
  14004. File: g77.info,  Node: Floating-point Exception Handling,  Next: Nonportable Conversions,  Prev: POSIX Standard,  Up: Missing Features
  14005. Floating-point Exception Handling
  14006. ---------------------------------
  14007.    The `gcc' backend and, consequently, `g77', currently provides no
  14008. control over whether or not floating-point exceptions are trapped or
  14009. ignored.  (Ignoring them typically results in NaN values being
  14010. propagated in systems that conform to IEEE 754.)  The behaviour is
  14011. inherited from the system-dependent startup code.
  14012.    Most systems provide some C-callable mechanism to change this; this
  14013. can be invoked at startup using `gcc''s `constructor' attribute.  For
  14014. example, just compiling and linking the following C code with your
  14015. program will turn on exception trapping for the "common" exceptions on
  14016. an x86-based GNU system:
  14017.      #include <fpu_control.h>
  14018.      void __attribute__ ((constructor))
  14019.      trapfpe () {
  14020.        (void) __setfpucw (_FPU_DEFAULT &
  14021.                           ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM));
  14022.      }
  14023. File: g77.info,  Node: Nonportable Conversions,  Next: Large Automatic Arrays,  Prev: Floating-point Exception Handling,  Up: Missing Features
  14024. Nonportable Conversions
  14025. -----------------------
  14026.    `g77' doesn't accept some particularly nonportable, silent data-type
  14027. conversions such as `LOGICAL' to `REAL' (as in `A=.FALSE.', where `A'
  14028. is type `REAL'), that other compilers might quietly accept.
  14029.    Some of these conversions are accepted by `g77' when the `-fugly'
  14030. option is specified.  Perhaps it should accept more or all of them.
  14031. File: g77.info,  Node: Large Automatic Arrays,  Next: Support for Threads,  Prev: Nonportable Conversions,  Up: Missing Features
  14032. Large Automatic Arrays
  14033. ----------------------
  14034.    Currently, automatic arrays always are allocated on the stack.  For
  14035. situations where the stack cannot be made large enough, `g77' should
  14036. offer a compiler option that specifies allocation of automatic arrays
  14037. in heap storage.
  14038. File: g77.info,  Node: Support for Threads,  Next: Increasing Precision/Range,  Prev: Large Automatic Arrays,  Up: Missing Features
  14039. Support for Threads
  14040. -------------------
  14041.    Neither the code produced by `g77' nor the `libf2c' library are
  14042. thread-safe, nor does `g77' have support for parallel processing (other
  14043. than the instruction-level parallelism available on some processors).
  14044. A package such as PVM might help here.
  14045. File: g77.info,  Node: Gracefully Handle Sensible Bad Code,  Next: Non-standard Conversions,  Prev: Increasing Precision/Range,  Up: Missing Features
  14046. Gracefully Handle Sensible Bad Code
  14047. -----------------------------------
  14048.    `g77' generally should continue processing for warnings and
  14049. recoverable (user) errors whenever possible--that is, it shouldn't
  14050. gratuitously make bad or useless code.
  14051.    For example:
  14052.      INTRINSIC ZABS
  14053.      CALL FOO(ZABS)
  14054.      END
  14055. When compiling the above with `-ff2c-intrinsics-disable', `g77' should
  14056. indeed complain about passing `ZABS', but it still should compile,
  14057. instead of rejecting the entire `CALL' statement.  (Some of this is
  14058. related to improving the compiler internals to improve how statements
  14059. are analyzed.)
  14060. File: g77.info,  Node: Non-standard Conversions,  Next: Non-standard Intrinsics,  Prev: Gracefully Handle Sensible Bad Code,  Up: Missing Features
  14061. Non-standard Conversions
  14062. ------------------------
  14063.    `-Wconversion' and related should flag places where non-standard
  14064. conversions are found.  Perhaps much of this would be part of `-Wugly*'.
  14065. File: g77.info,  Node: Non-standard Intrinsics,  Next: Modifying DO Variable,  Prev: Non-standard Conversions,  Up: Missing Features
  14066. Non-standard Intrinsics
  14067. -----------------------
  14068.    `g77' needs a new option, like `-Wintrinsics', to warn about use of
  14069. non-standard intrinsics without explicit `INTRINSIC' statements for
  14070. them.  This would help find code that might fail silently when ported
  14071. to another compiler.
  14072. File: g77.info,  Node: Modifying DO Variable,  Next: Better Pedantic Compilation,  Prev: Non-standard Intrinsics,  Up: Missing Features
  14073. Modifying `DO' Variable
  14074. -----------------------
  14075.    `g77' should warn about modifying `DO' variables via `EQUIVALENCE'.
  14076. (The internal information gathered to produce this warning might also
  14077. be useful in setting the internal "doiter" flag for a variable or even
  14078. array reference within a loop, since that might produce faster code
  14079. someday.)
  14080.    For example, this code is invalid, so `g77' should warn about the
  14081. invalid assignment to `NOTHER':
  14082.      EQUIVALENCE (I, NOTHER)
  14083.      DO I = 1, 100
  14084.         IF (I.EQ. 10) NOTHER = 20
  14085.      END DO
  14086. File: g77.info,  Node: Better Pedantic Compilation,  Next: Warn About Implicit Conversions,  Prev: Modifying DO Variable,  Up: Missing Features
  14087. Better Pedantic Compilation
  14088. ---------------------------
  14089.    `g77' needs to support `-fpedantic' more thoroughly, and use it only
  14090. to generate warnings instead of rejecting constructs outright.  Have it
  14091. warn: if a variable that dimensions an array is not a dummy or placed
  14092. explicitly in `COMMON' (F77 does not allow it to be placed in `COMMON'
  14093. via `EQUIVALENCE'); if specification statements follow
  14094. statement-function-definition statements; about all sorts of syntactic
  14095. extensions.
  14096. File: g77.info,  Node: Warn About Implicit Conversions,  Next: Invalid Use of Hollerith Constant,  Prev: Better Pedantic Compilation,  Up: Missing Features
  14097. Warn About Implicit Conversions
  14098. -------------------------------
  14099.    `g77' needs a `-Wpromotions' option to warn if source code appears
  14100. to expect automatic, silent, and somewhat dangerous compiler-assisted
  14101. conversion of `REAL(KIND=1)' constants to `REAL(KIND=2)' based on
  14102. context.
  14103.    For example, it would warn about cases like this:
  14104.      DOUBLE PRECISION FOO
  14105.      PARAMETER (TZPHI = 9.435784839284958)
  14106.      FOO = TZPHI * 3D0
  14107. File: g77.info,  Node: Invalid Use of Hollerith Constant,  Next: Dummy Array Without Dimensioning Dummy,  Prev: Warn About Implicit Conversions,  Up: Missing Features
  14108. Invalid Use of Hollerith Constant
  14109. ---------------------------------
  14110.    `g77' should disallow statements like `RETURN 2HAB', which are
  14111. invalid in both source forms (unlike `RETURN (2HAB)', which probably
  14112. still makes no sense but at least can be reliably parsed).  Fixed-form
  14113. processing rejects it, but not free-form, except in a way that is a bit
  14114. difficult to understand.
  14115. File: g77.info,  Node: Dummy Array Without Dimensioning Dummy,  Next: Invalid FORMAT Specifiers,  Prev: Invalid Use of Hollerith Constant,  Up: Missing Features
  14116. Dummy Array Without Dimensioning Dummy
  14117. --------------------------------------
  14118.    `g77' should complain when a list of dummy arguments containing an
  14119. adjustable dummy array does not also contain every variable listed in
  14120. the dimension list of the adjustable array.
  14121.    Currently, `g77' does complain about a variable that dimensions an
  14122. array but doesn't appear in any dummy list or `COMMON' area, but this
  14123. needs to be extended to catch cases where it doesn't appear in every
  14124. dummy list that also lists any arrays it dimensions.
  14125.    For example, `g77' should warn about the entry point `ALT' below,
  14126. since it includes `ARRAY' but not `ISIZE' in its list of arguments:
  14127.      SUBROUTINE PRIMARY(ARRAY, ISIZE)
  14128.      REAL ARRAY(ISIZE)
  14129.      ENTRY ALT(ARRAY)
  14130. File: g77.info,  Node: Invalid FORMAT Specifiers,  Next: Ambiguous Dialects,  Prev: Dummy Array Without Dimensioning Dummy,  Up: Missing Features
  14131. Invalid FORMAT Specifiers
  14132. -------------------------
  14133.    `g77' should check `FORMAT' specifiers for validity as it does
  14134. `FORMAT' statements.
  14135.    For example, a diagnostic would be produced for:
  14136.      PRINT 'HI THERE!'  !User meant PRINT *, 'HI THERE!'
  14137. File: g77.info,  Node: Ambiguous Dialects,  Next: Unused Labels,  Prev: Invalid FORMAT Specifiers,  Up: Missing Features
  14138. Ambiguous Dialects
  14139. ------------------
  14140.    `g77' needs a set of options such as `-Wugly*', `-Wautomatic',
  14141. `-Wvxt', `-Wf90', and so on.  These would warn about places in the
  14142. user's source where ambiguities are found, helpful in resolving
  14143. ambiguities in the program's dialect or dialects.
  14144. File: g77.info,  Node: Unused Labels,  Next: Informational Messages,  Prev: Ambiguous Dialects,  Up: Missing Features
  14145. Unused Labels
  14146. -------------
  14147.    `g77' should warn about unused labels when `-Wunused' is in effect.
  14148. File: g77.info,  Node: Informational Messages,  Next: Uninitialized Variables at Run Time,  Prev: Unused Labels,  Up: Missing Features
  14149. Informational Messages
  14150. ----------------------
  14151.    `g77' needs an option to suppress information messages (notes).
  14152. `-w' does this but also suppresses warnings.  The default should be to
  14153. suppress info messages.
  14154.    Perhaps info messages should simply be eliminated.
  14155. File: g77.info,  Node: Uninitialized Variables at Run Time,  Next: Bounds Checking at Run Time,  Prev: Informational Messages,  Up: Missing Features
  14156. Uninitialized Variables at Run Time
  14157. -----------------------------------
  14158.    `g77' needs an option to initialize everything (not otherwise
  14159. explicitly initialized) to "weird" (machine-dependent) values, e.g.
  14160. NaNs, bad (non-`NULL') pointers, and largest-magnitude integers, would
  14161. help track down references to some kinds of uninitialized variables at
  14162. run time.
  14163.    Note that use of the options `-O -Wuninitialized' can catch many
  14164. such bugs at compile time.
  14165. File: g77.info,  Node: Bounds Checking at Run Time,  Next: Labels Visible to Debugger,  Prev: Uninitialized Variables at Run Time,  Up: Missing Features
  14166. Bounds Checking at Run Time
  14167. ---------------------------
  14168.    `g77' should offer run-time bounds-checking of array/subscript
  14169. references in a fashion similar to `f2c'.
  14170.    Note that `g77' already warns about references to out-of-bounds
  14171. elements of arrays when it detects these at compile time.
  14172. File: g77.info,  Node: Labels Visible to Debugger,  Prev: Bounds Checking at Run Time,  Up: Missing Features
  14173. Labels Visible to Debugger
  14174. --------------------------
  14175.    `g77' should output debugging information for statements labels, for
  14176. use by debuggers that know how to support them.  Same with weirder
  14177. things like construct names.  It is not yet known if any debug formats
  14178. or debuggers support these.
  14179. File: g77.info,  Node: Disappointments,  Next: Non-bugs,  Prev: Missing Features,  Up: Trouble
  14180. Disappointments and Misunderstandings
  14181. =====================================
  14182.    These problems are perhaps regrettable, but we don't know any
  14183. practical way around them for now.
  14184. * Menu:
  14185. * Mangling of Names::                       `SUBROUTINE FOO' is given
  14186.                                               external name `foo_'.
  14187. * Multiple Definitions of External Names::  No doing both `COMMON /FOO/'
  14188.                                               and `SUBROUTINE FOO'.
  14189. * Limitation on Implicit Declarations::     No `IMPLICIT CHARACTER*(*)'.
  14190. File: g77.info,  Node: Mangling of Names,  Next: Multiple Definitions of External Names,  Up: Disappointments
  14191. Mangling of Names in Source Code
  14192. --------------------------------
  14193.    The current external-interface design, which includes naming of
  14194. external procedures, COMMON blocks, and the library interface, has
  14195. various usability problems, including things like adding underscores
  14196. where not really necessary (and preventing easier inter-language
  14197. operability) and yet not providing complete namespace freedom for user
  14198. C code linked with Fortran apps (due to the naming of functions in the
  14199. library, among other things).
  14200.    Project GNU should at least get all this "right" for systems it
  14201. fully controls, such as the Hurd, and provide defaults and options for
  14202. compatibility with existing systems and interoperability with popular
  14203. existing compilers.
  14204. File: g77.info,  Node: Multiple Definitions of External Names,  Next: Limitation on Implicit Declarations,  Prev: Mangling of Names,  Up: Disappointments
  14205. Multiple Definitions of External Names
  14206. --------------------------------------
  14207.    `g77' doesn't allow a common block and an external procedure or
  14208. `BLOCK DATA' to have the same name.  Some systems allow this, but `g77'
  14209. does not, to be compatible with `f2c'.
  14210.    `g77' could special-case the way it handles `BLOCK DATA', since it
  14211. is not compatible with `f2c' in this particular area (necessarily,
  14212. since `g77' offers an important feature here), but it is likely that
  14213. such special-casing would be very annoying to people with programs that
  14214. use `EXTERNAL FOO', with no other mention of `FOO' in the same program
  14215. unit, to refer to external procedures, since the result would be that
  14216. `g77' would treat these references as requests to force-load BLOCK DATA
  14217. program units.
  14218.    In that case, if `g77' modified names of `BLOCK DATA' so they could
  14219. have the same names as `COMMON', users would find that their programs
  14220. wouldn't link because the `FOO' procedure didn't have its name
  14221. translated the same way.
  14222.    (Strictly speaking, `g77' could emit a
  14223. null-but-externally-satisfying definition of `FOO' with its name
  14224. transformed as if it had been a `BLOCK DATA', but that probably invites
  14225. more trouble than it's worth.)
  14226. File: g77.info,  Node: Limitation on Implicit Declarations,  Prev: Multiple Definitions of External Names,  Up: Disappointments
  14227. Limitation on Implicit Declarations
  14228. -----------------------------------
  14229.    `g77' disallows `IMPLICIT CHARACTER*(*)'.  This is not
  14230. standard-conforming.
  14231. File: g77.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Disappointments,  Up: Trouble
  14232. Certain Changes We Don't Want to Make
  14233. =====================================
  14234.    This section lists changes that people frequently request, but which
  14235. we do not make because we think GNU Fortran is better without them.
  14236. * Menu:
  14237. * Backslash in Constants::           Why `'\\'' is a constant that
  14238.                                        is one, not two, characters long.
  14239. * Initializing Before Specifying::   Why `DATA VAR/1/' can't precede
  14240.                                        `COMMON VAR'.
  14241. * Context-Sensitive Intrinsicness::  Why `CALL SQRT' won't work.
  14242. * Context-Sensitive Constants::      Why `9.435784839284958' is a
  14243.                                        single-precision constant,
  14244.                                        and might be interpreted as
  14245.                                        `9.435785' or similar.
  14246. * Equivalence Versus Equality::      Why `.TRUE. .EQ. .TRUE.' won't work.
  14247. * Order of Side Effects::            Why `J = IFUNC() - IFUNC()' might
  14248.                                        not behave as expected.
  14249. File: g77.info,  Node: Backslash in Constants,  Next: Initializing Before Specifying,  Up: Non-bugs
  14250. Backslash in Constants
  14251. ----------------------
  14252.    In the opinion of many experienced Fortran users, `-fno-backslash'
  14253. should be the default, not `-fbackslash', as currently set by `g77'.
  14254.    First of all, you can always specify `-fno-backslash' to turn off
  14255. this processing.
  14256.    Despite not being within the spirit (though apparently within the
  14257. letter) of the ANSI FORTRAN 77 standard, `g77' defaults to
  14258. `-fbackslash' because that is what most UNIX `f77' commands default to,
  14259. and apparently lots of code depends on this feature.
  14260.    This is a particularly troubling issue.  The use of a C construct in
  14261. the midst of Fortran code is bad enough, worse when it makes existing
  14262. Fortran programs stop working (as happens when programs written for
  14263. non-UNIX systems are ported to UNIX systems with compilers that provide
  14264. the `-fbackslash' feature as the default--sometimes with no option to
  14265. turn it off).
  14266.    The author of GNU Fortran wished, for reasons of linguistic purity,
  14267. to make `-fno-backslash' the default for GNU Fortran and thus require
  14268. users of UNIX `f77' and `f2c' to specify `-fbackslash' to get the UNIX
  14269. behavior.
  14270.    However, the realization that `g77' is intended as a replacement for
  14271. *UNIX* `f77', caused the author to choose to make `g77' as compatible
  14272. with `f77' as feasible, which meant making `-fbackslash' the default.
  14273.    The primary focus on compatibility is at the source-code level, and
  14274. the question became "What will users expect a replacement for `f77' to
  14275. do, by default?"  Although at least one UNIX `f77' does not provide
  14276. `-fbackslash' as a default, it appears that the majority of them do,
  14277. which suggests that the majority of code that is compiled by UNIX `f77'
  14278. compilers expects `-fbackslash' to be the default.
  14279.    It is probably the case that more code exists that would *not* work
  14280. with `-fbackslash' in force than code that requires it be in force.
  14281.    However, most of *that* code is not being compiled with `f77', and
  14282. when it is, new build procedures (shell scripts, makefiles, and so on)
  14283. must be set up anyway so that they work under UNIX.  That makes a much
  14284. more natural and safe opportunity for non-UNIX users to adapt their
  14285. build procedures for `g77''s default of `-fbackslash' than would exist
  14286. for the majority of UNIX `f77' users who would have to modify existing,
  14287. working build procedures to explicitly specify `-fbackslash' if that was
  14288. not the default.
  14289.    One suggestion has been to configure the default for `-fbackslash'
  14290. (and perhaps other options as well) based on the configuration of `g77'.
  14291.    This is technically quite straightforward, but will be avoided even
  14292. in cases where not configuring defaults to be dependent on a particular
  14293. configuration greatly inconveniences some users of legacy code.
  14294.    Many users appreciate the GNU compilers because they provide an
  14295. environment that is uniform across machines.  These users would be
  14296. inconvenienced if the compiler treated things like the format of the
  14297. source code differently on certain machines.
  14298.    Occasionally users write programs intended only for a particular
  14299. machine type.  On these occasions, the users would benefit if the GNU
  14300. Fortran compiler were to support by default the same dialect as the
  14301. other compilers on that machine.  But such applications are rare.  And
  14302. users writing a program to run on more than one type of machine cannot
  14303. possibly benefit from this kind of compatibility.  (This is consistent
  14304. with the design goals for `gcc'.  To change them for `g77', you must
  14305. first change them for `gcc'.  Do not ask the maintainers of `g77' to do
  14306. this for you, or to disassociate `g77' from the widely understood, if
  14307. not widely agreed-upon, goals for GNU compilers in general.)
  14308.    This is why GNU Fortran does and will treat backslashes in the same
  14309. fashion on all types of machines (by default).  *Note Direction of
  14310. Language Development::, for more information on this overall philosophy
  14311. guiding the development of the GNU Fortran language.
  14312.    Of course, users strongly concerned about portability should indicate
  14313. explicitly in their build procedures which options are expected by
  14314. their source code, or write source code that has as few such
  14315. expectations as possible.
  14316.    For example, avoid writing code that depends on backslash (`\')
  14317. being interpreted either way in particular, such as by starting a
  14318. program unit with:
  14319.      CHARACTER BACKSL
  14320.      PARAMETER (BACKSL = '\\')
  14321. Then, use concatenation of `BACKSL' anyplace a backslash is desired.
  14322. In this way, users can write programs which have the same meaning in
  14323. many Fortran dialects.
  14324.    (However, this technique does not work for Hollerith constants--which
  14325. is just as well, since the only generally portable uses for Hollerith
  14326. constants are in places where character constants can and should be
  14327. used instead, for readability.)
  14328. File: g77.info,  Node: Initializing Before Specifying,  Next: Context-Sensitive Intrinsicness,  Prev: Backslash in Constants,  Up: Non-bugs
  14329. Initializing Before Specifying
  14330. ------------------------------
  14331.    `g77' does not allow `DATA VAR/1/' to appear in the source code
  14332. before `COMMON VAR', `DIMENSION VAR(10)', `INTEGER VAR', and so on.  In
  14333. general, `g77' requires initialization of a variable or array to be
  14334. specified *after* all other specifications of attributes (type, size,
  14335. placement, and so on) of that variable or array are specified (though
  14336. *confirmation* of data type is permitted).
  14337.    It is *possible* `g77' will someday allow all of this, even though
  14338. it is not allowed by the FORTRAN 77 standard.
  14339.    Then again, maybe it is better to have `g77' always require
  14340. placement of `DATA' so that it can possibly immediately write constants
  14341. to the output file, thus saving time and space.
  14342.    That is, `DATA A/1000000*1/' should perhaps always be immediately
  14343. writable to canonical assembler, unless it's already known to be in a
  14344. `COMMON' area following as-yet-uninitialized stuff, and to do this it
  14345. cannot be followed by `COMMON A'.
  14346. File: g77.info,  Node: Context-Sensitive Intrinsicness,  Next: Context-Sensitive Constants,  Prev: Initializing Before Specifying,  Up: Non-bugs
  14347. Context-Sensitive Intrinsicness
  14348. -------------------------------
  14349.    `g77' treats procedure references to *possible* intrinsic names as
  14350. always enabling their intrinsic nature, regardless of whether the
  14351. *form* of the reference is valid for that intrinsic.
  14352.    For example, `CALL SQRT' is interpreted by `g77' as an invalid
  14353. reference to the `SQRT' intrinsic function, because the reference is a
  14354. subroutine invocation.
  14355.    First, `g77' recognizes the statement `CALL SQRT' as a reference to
  14356. a *procedure* named `SQRT', not to a *variable* with that name (as it
  14357. would for a statement such as `V = SQRT').
  14358.    Next, `g77' establishes that, in the program unit being compiled,
  14359. `SQRT' is an intrinsic--not a subroutine that happens to have the same
  14360. name as an intrinsic (as would be the case if, for example, `EXTERNAL
  14361. SQRT' was present).
  14362.    Finally, `g77' recognizes that the *form* of the reference is
  14363. invalid for that particular intrinsic.  That is, it recognizes that it
  14364. is invalid for an intrinsic *function*, such as `SQRT', to be invoked as
  14365. a *subroutine*.
  14366.    At that point, `g77' issues a diagnostic.
  14367.    Some users claim that it is "obvious" that `CALL SQRT' references an
  14368. external subroutine of their own, not an intrinsic function.
  14369.    However, `g77' knows about intrinsic subroutines, not just
  14370. functions, and is able to support both having the same names, for
  14371. example.
  14372.    As a result of this, `g77' rejects calls to intrinsics that are not
  14373. subroutines, and function invocations of intrinsics that are not
  14374. functions, just as it (and most compilers) rejects invocations of
  14375. intrinsics with the wrong number (or types) of arguments.
  14376.    So, use the `EXTERNAL SQRT' statement in a program unit that calls a
  14377. user-written subroutine named `SQRT'.
  14378. File: g77.info,  Node: Context-Sensitive Constants,  Next: Equivalence Versus Equality,  Prev: Context-Sensitive Intrinsicness,  Up: Non-bugs
  14379. Context-Sensitive Constants
  14380. ---------------------------
  14381.    `g77' does not use context to determine the types of constants or
  14382. named constants (`PARAMETER'), except for (non-standard) typeless
  14383. constants such as `'123'O'.
  14384.    For example, consider the following statement:
  14385.      PRINT *, 9.435784839284958 * 2D0
  14386. `g77' will interpret the (truncated) constant `9.435784839284958' as a
  14387. `REAL(KIND=1)', not `REAL(KIND=2)', constant, because the suffix `D0'
  14388. is not specified.
  14389.    As a result, the output of the above statement when compiled by
  14390. `g77' will appear to have "less precision" than when compiled by other
  14391. compilers.
  14392.    In these and other cases, some compilers detect the fact that a
  14393. single-precision constant is used in a double-precision context and
  14394. therefore interpret the single-precision constant as if it was
  14395. *explicitly* specified as a double-precision constant.  (This has the
  14396. effect of appending *decimal*, not *binary*, zeros to the fractional
  14397. part of the number--producing different computational results.)
  14398.    The reason this misfeature is dangerous is that a slight, apparently
  14399. innocuous change to the source code can change the computational
  14400. results.  Consider:
  14401.      REAL ALMOST, CLOSE
  14402.      DOUBLE PRECISION FIVE
  14403.      PARAMETER (ALMOST = 5.000000000001)
  14404.      FIVE = 5
  14405.      CLOSE = 5.000000000001
  14406.      PRINT *, 5.000000000001 - FIVE
  14407.      PRINT *, ALMOST - FIVE
  14408.      PRINT *, CLOSE - FIVE
  14409.      END
  14410. Running the above program should result in the same value being printed
  14411. three times.  With `g77' as the compiler, it does.
  14412.    However, compiled by many other compilers, running the above program
  14413. would print two or three distinct values, because in two or three of
  14414. the statements, the constant `5.000000000001', which on most systems is
  14415. exactly equal to `5.'  when interpreted as a single-precision constant,
  14416. is instead interpreted as a double-precision constant, preserving the
  14417. represented precision.  However, this "clever" promotion of type does
  14418. not extend to variables or, in some compilers, to named constants.
  14419.    Since programmers often are encouraged to replace manifest constants
  14420. or permanently-assigned variables with named constants (`PARAMETER' in
  14421. Fortran), and might need to replace some constants with variables
  14422. having the same values for pertinent portions of code, it is important
  14423. that compilers treat code so modified in the same way so that the
  14424. results of such programs are the same.  `g77' helps in this regard by
  14425. treating constants just the same as variables in terms of determining
  14426. their types in a context-independent way.
  14427.    Still, there is a lot of existing Fortran code that has been written
  14428. to depend on the way other compilers freely interpret constants' types
  14429. based on context, so anything `g77' can do to help flag cases of this
  14430. in such code could be very helpful.
  14431. File: g77.info,  Node: Equivalence Versus Equality,  Next: Order of Side Effects,  Prev: Context-Sensitive Constants,  Up: Non-bugs
  14432. Equivalence Versus Equality
  14433. ---------------------------
  14434.    Use of `.EQ.' and `.NE.' on `LOGICAL' operands is not supported,
  14435. except via `-fugly', which is not recommended except for legacy code
  14436. (where the behavior expected by the *code* is assumed).
  14437.    Legacy code should be changed, as resources permit, to use `.EQV.'
  14438. and `.NEQV.' instead, as these are permitted by the various Fortran
  14439. standards.
  14440.    New code should never be written expecting `.EQ.' or `.NE.'  to work
  14441. if either of its operands is `LOGICAL'.
  14442.    The problem with supporting this "feature" is that there is unlikely
  14443. to be consensus on how it works, as illustrated by the following sample
  14444. program:
  14445.      LOGICAL L,M,N
  14446.      DATA L,M,N /3*.FALSE./
  14447.      IF (L.AND.M.EQ.N) PRINT *,'L.AND.M.EQ.N'
  14448.      END
  14449.    The issue raised by the above sample program is: what is the
  14450. precedence of `.EQ.' (and `.NE.') when applied to `LOGICAL' operands?
  14451.    Some programmers will argue that it is the same as the precedence
  14452. for `.EQ.' when applied to numeric (such as `INTEGER') operands.  By
  14453. this interpretation, the subexpression `M.EQ.N' must be evaluated first
  14454. in the above program, resulting in a program that, when run, does not
  14455. execute the `PRINT' statement.
  14456.    Other programmers will argue that the precedence is the same as the
  14457. precedence for `.EQV.', which is restricted by the standards to
  14458. `LOGICAL' operands.  By this interpretation, the subexpression
  14459. `L.AND.M' must be evaluated first, resulting in a program that *does*
  14460. execute the `PRINT' statement.
  14461.    Assigning arbitrary semantic interpretations to syntactic expressions
  14462. that might legitimately have more than one "obvious" interpretation is
  14463. generally unwise.
  14464.    The creators of the various Fortran standards have done a good job
  14465. in this case, requiring a distinct set of operators (which have their
  14466. own distinct precedence) to compare `LOGICAL' operands.  This
  14467. requirement results in expression syntax with more certain precedence
  14468. (without requiring substantial context), making it easier for
  14469. programmers to read existing code.  `g77' will avoid muddying up
  14470. elements of the Fortran language that were well-designed in the first
  14471. place.
  14472.    (Ask C programmers about the precedence of expressions such as `(a)
  14473. & (b)' and `(a) - (b)'--they cannot even tell you, without knowing more
  14474. context, whether the `&' and `-' operators are infix (binary) or unary!)
  14475. File: g77.info,  Node: Order of Side Effects,  Prev: Equivalence Versus Equality,  Up: Non-bugs
  14476. Order of Side Effects
  14477. ---------------------
  14478.    `g77' does not necessarily produce code that, when run, performs
  14479. side effects (such as those performed by function invocations) in the
  14480. same order as in some other compiler--or even in the same order as
  14481. another version, port, or invocation (using different command-line
  14482. options) of `g77'.
  14483.    It is never safe to depend on the order of evaluation of side
  14484. effects.  For example, an expression like this may very well behave
  14485. differently from one compiler to another:
  14486.      J = IFUNC() - IFUNC()
  14487. There is no guarantee that `IFUNC' will be evaluated in any particular
  14488. order.  Either invocation might happen first.  If `IFUNC' returns 5 the
  14489. first time it is invoked, and returns 12 the second time, `J' might end
  14490. up with the value `7', or it might end up with `-7'.
  14491.    Generally, in Fortran, procedures with side-effects intended to be
  14492. visible to the caller are best designed as *subroutines*, not functions.
  14493. Examples of such side-effects include:
  14494.    * The generation of random numbers that are intended to influence
  14495.      return values.
  14496.    * Performing I/O (other than internal I/O to local variables).
  14497.    * Updating information in common blocks.
  14498.    An example of a side-effect that is not intended to be visible to
  14499. the caller is a function that maintains a cache of recently calculated
  14500. results, intended solely to speed repeated invocations of the function
  14501. with identical arguments.  Such a function can be safely used in
  14502. expressions, because if the compiler optimizes away one or more calls
  14503. to the function, operation of the program is unaffected (aside from
  14504. being speeded up).
  14505. File: g77.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
  14506. Warning Messages and Error Messages
  14507. ===================================
  14508.    The GNU compiler can produce two kinds of diagnostics: errors and
  14509. warnings.  Each kind has a different purpose:
  14510.      *Errors* report problems that make it impossible to compile your
  14511.      program.  GNU Fortran reports errors with the source file name,
  14512.      line number, and column within the line where the problem is
  14513.      apparent.
  14514.      *Warnings* report other unusual conditions in your code that
  14515.      *might* indicate a problem, although compilation can (and does)
  14516.      proceed.  Warning messages also report the source file name, line
  14517.      number, and column information, but include the text `warning:' to
  14518.      distinguish them from error messages.
  14519.    Warnings might indicate danger points where you should check to make
  14520. sure that your program really does what you intend; or the use of
  14521. obsolete features; or the use of nonstandard features of GNU Fortran.
  14522. Many warnings are issued only if you ask for them, with one of the `-W'
  14523. options (for instance, `-Wall' requests a variety of useful warnings).
  14524.    *Note:* Currently, the text of the line and a pointer to the column
  14525. is printed in most `g77' diagnostics.  Probably, as of version 0.6,
  14526. `g77' will no longer print the text of the source line, instead printing
  14527. the column number following the file name and line number in a form
  14528. that GNU Emacs recognizes.  This change is expected to speed up and
  14529. reduce the memory usage of the `g77' compiler.
  14530.    *Note Options to Request or Suppress Warnings: Warning Options, for
  14531. more detail on these and related command-line options.
  14532. File: g77.info,  Node: Open Questions,  Next: Bugs,  Prev: Trouble,  Up: Top
  14533. Open Questions
  14534. **************
  14535.    Please consider offering useful answers to these questions!
  14536.    * How do system administrators and users manage multiple incompatible
  14537.      Fortran compilers on their systems?  How can `g77' contribute to
  14538.      this, or at least avoiding intefering with it?
  14539.      Currently, `g77' provides rudimentary ways to choose whether to
  14540.      overwrite portions of other Fortran compilation systems (such as
  14541.      the `f77' command and the `libf2c' library).  Is this sufficient?
  14542.      What happens when users choose not to overwrite these--does `g77'
  14543.      work properly in all such installations, picking up its own
  14544.      versions, or does it pick up the existing "alien" versions it
  14545.      didn't overwrite with its own, possibly leading to subtle bugs?
  14546.    * `LOC()' and other intrinsics are probably somewhat misclassified.
  14547.      Is the a need for more precise classification of intrinsics, and
  14548.      if so, what are the appropriate groupings?  Is there a need to
  14549.      individually enable/disable/delete/hide intrinsics from the
  14550.      command line?
  14551. File: g77.info,  Node: Bugs,  Next: Service,  Prev: Open Questions,  Up: Top
  14552. Reporting Bugs
  14553. **************
  14554.    Your bug reports play an essential role in making GNU Fortran
  14555. reliable.
  14556.    When you encounter a problem, the first thing to do is to see if it
  14557. is already known.  *Note Trouble::.  If it isn't known, then you should
  14558. report the problem.
  14559.    Reporting a bug might help you by bringing a solution to your
  14560. problem, or it might not.  (If it does not, look in the service
  14561. directory; see *Note Service::.)  In any case, the principal function
  14562. of a bug report is to help the entire community by making the next
  14563. version of GNU Fortran work better.  Bug reports are your contribution
  14564. to the maintenance of GNU Fortran.
  14565.    Since the maintainers are very overloaded, we cannot respond to every
  14566. bug report.  However, if the bug has not been fixed, we are likely to
  14567. send you a patch and ask you to tell us whether it works.
  14568.    In order for a bug report to serve its purpose, you must include the
  14569. information that makes for fixing the bug.
  14570. * Menu:
  14571. * Criteria: Bug Criteria.    Have you really found a bug?
  14572. * Where: Bug Lists.          Where to send your bug report.
  14573. * Reporting: Bug Reporting.  How to report a bug effectively.
  14574. * Patches: Sending Patches.  How to send a patch for GNU Fortran.
  14575.    *Note Known Causes of Trouble with GNU Fortran: Trouble, for
  14576. information on problems we already know about.
  14577.    *Note How To Get Help with GNU Fortran: Service, for information on
  14578. where to ask for help.
  14579. File: g77.info,  Node: Bug Criteria,  Next: Bug Lists,  Up: Bugs
  14580. Have You Found a Bug?
  14581. =====================
  14582.    If you are not sure whether you have found a bug, here are some
  14583. guidelines:
  14584.    * If the compiler gets a fatal signal, for any input whatever, that
  14585.      is a compiler bug.  Reliable compilers never crash--they just
  14586.      remain obsolete.
  14587.    * If the compiler produces invalid assembly code, for any input
  14588.      whatever, that is a compiler bug, unless the compiler reports
  14589.      errors (not just warnings) which would ordinarily prevent the
  14590.      assembler from being run.
  14591.    * If the compiler produces valid assembly code that does not
  14592.      correctly execute the input source code, that is a compiler bug.
  14593.      However, you must double-check to make sure, because you might
  14594.      have run into an incompatibility between GNU Fortran and
  14595.      traditional Fortran.  These incompatibilities might be considered
  14596.      bugs, but they are inescapable consequences of valuable features.
  14597.      Or you might have a program whose behavior is undefined, which
  14598.      happened by chance to give the desired results with another
  14599.      Fortran compiler.  It is best to check the relevant Fortran
  14600.      standard thoroughly if it is possible that the program indeed does
  14601.      something undefined.
  14602.      After you have localized the error to a single source line, it
  14603.      should be easy to check for these things.  If your program is
  14604.      correct and well defined, you have found a compiler bug.
  14605.      It might help if, in your submission, you identified the specific
  14606.      language in the relevant Fortran standard that specifies the
  14607.      desired behavior, if it isn't likely to be obvious and agreed-upon
  14608.      by all Fortran users.
  14609.    * If the compiler produces an error message for valid input, that is
  14610.      a compiler bug.
  14611.    * If the compiler does not produce an error message for invalid
  14612.      input, that is a compiler bug.  However, you should note that your
  14613.      idea of "invalid input" might be someone else's idea of "an
  14614.      extension" or "support for traditional practice".
  14615.    * If you are an experienced user of Fortran compilers, your
  14616.      suggestions for improvement of GNU Fortran are welcome in any case.
  14617.    Many, perhaps most, bug reports against `g77' turn out to be bugs in
  14618. the user's code.  While we find such bug reports educational, they
  14619. sometimes take a considerable amount of time to track down or at least
  14620. respond to--time we could be spending making `g77', not some user's
  14621. code, better.
  14622.    Some steps you can take to verify that the bug is not certainly in
  14623. the code you're compiling with `g77':
  14624.    * Compile your code using the `g77' options `-W -Wall -O'.  These
  14625.      options enable many useful warning; the `-O' option enables flow
  14626.      analysis that enables the uninitialized-variable warning.
  14627.      If you investigate the warnings and find evidence of possible bugs
  14628.      in your code, fix them first and retry `g77'.
  14629.    * Compile your code using the `g77' options `-finit-local-zero',
  14630.      `-fno-automatic', `-ffloat-store', and various combinations
  14631.      thereof.
  14632.      If your code works with any of these combinations, that is not
  14633.      proof that the bug isn't in `g77'--a `g77' bug exposed by your
  14634.      code might simply be avoided, or have a different, more subtle
  14635.      effect, when different options are used--but it can be a strong
  14636.      indicator that your code is making unawarranted assumptions about
  14637.      the Fortran dialect and/or underlying machine it is being compiled
  14638.      and run on.
  14639.      *Note Overly Convenient Command-Line Options: Overly Convenient
  14640.      Options, for information on the `-fno-automatic' and
  14641.      `-finit-local-zero' options and how to convert their use into
  14642.      selective changes in your own code.
  14643.    * Validate your code with `ftnchek' or a similar code-checking tool.
  14644.      `ftncheck' can be found at `ftp://ftp.netlib.org/fortran' or
  14645.      `ftp://ftp.dsm.fordham.edu'.
  14646.      Here are some sample `Makefile' rules using `ftnchek' "project"
  14647.      files to do cross-file checking and `sfmakedepend' (from
  14648.      `ftp://ahab.rutgers.edu/pub/perl/sfmakedepend') to maintain
  14649.      dependencies automatically.  These assume the use of GNU `make'.
  14650.           # Dummy suffix for ftnchek targets:
  14651.           .SUFFIXES: .chek
  14652.           .PHONY: chekall
  14653.           
  14654.           # How to compile .f files (for implicit rule):
  14655.           FC = g77
  14656.           # Assume `include' directory:
  14657.           FFLAGS = -Iinclude -g -O -Wall
  14658.           
  14659.           # Flags for ftnchek:
  14660.           CHEK1 = -array=0 -include=includes -noarray
  14661.           CHEK2 = -nonovice -usage=1 -notruncation
  14662.           CHEKFLAGS = $(CHEK1) $(CHEK2)
  14663.           
  14664.           # Run ftnchek with all the .prj files except the one corresponding
  14665.           # to the target's root:
  14666.           %.chek : %.f ; \
  14667.             ftnchek $(filter-out $*.prj,$(PRJS)) $(CHEKFLAGS) \
  14668.               -noextern -library $<
  14669.           
  14670.           # Derive a project file from a source file:
  14671.           %.prj : %.f ; \
  14672.             ftnchek $(CHEKFLAGS) -noextern -project -library $<
  14673.           
  14674.           # The list of objects is assumed to be in variable OBJS.
  14675.           # Sources corresponding to the objects:
  14676.           SRCS = $(OBJS:%.o=%.f)
  14677.           # ftnchek project files:
  14678.           PRJS = $(OBJS:%.o=%.prj)
  14679.           
  14680.           # Build the program
  14681.           prog: $(OBJS) ; \
  14682.             $(FC) -o $ $(OBJS)
  14683.           
  14684.           chekall: $(PRJS) ; \
  14685.             ftnchek $(CHEKFLAGS) $(PRJS)
  14686.           
  14687.           prjs: $(PRJS)
  14688.           
  14689.           # For Emacs M-x find-tag:
  14690.           TAGS: $(SRCS) ; \
  14691.             etags $(SRCS)
  14692.           
  14693.           # Rebuild dependencies:
  14694.           depend: ; \
  14695.             sfmakedepend -I $(PLTLIBDIR) -I includes -a prj $(SRCS1)
  14696.    * Try your code out using other Fortran compilers, such as `f2c'.
  14697.      If it does not work on at least one other compiler (assuming the
  14698.      compiler supports the features the code needs), that is a strong
  14699.      indicator of a bug in the code.
  14700.      However, even if your code works on many compilers *except* `g77',
  14701.      that does *not* mean the bug is in `g77'.  It might mean the bug
  14702.      is in your code, and that `g77' simply exposes it more readily
  14703.      than other compilers.
  14704. File: g77.info,  Node: Bug Lists,  Next: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
  14705. Where to Report Bugs
  14706. ====================
  14707.    Send bug reports for GNU Fortran to <fortran@gnu.org>.
  14708.    Often people think of posting bug reports to a newsgroup instead of
  14709. mailing them.  This sometimes appears to work, but it has one problem
  14710. which can be crucial: a newsgroup posting does not contain a mail path
  14711. back to the sender.  Thus, if maintainers need more information, they
  14712. might be unable to reach you.  For this reason, you should always send
  14713. bug reports by mail to the proper mailing list.
  14714.    As a last resort, send bug reports on paper to:
  14715.      GNU Compiler Bugs
  14716.      Free Software Foundation
  14717.      59 Temple Place - Suite 330
  14718.      Boston, MA 02111-1307, USA
  14719. File: g77.info,  Node: Bug Reporting,  Next: Sending Patches,  Prev: Bug Lists,  Up: Bugs
  14720. How to Report Bugs
  14721. ==================
  14722.    The fundamental principle of reporting bugs usefully is this:
  14723. *report all the facts*.  If you are not sure whether to state a fact or
  14724. leave it out, state it!
  14725.    Often people omit facts because they think they know what causes the
  14726. problem and they conclude that some details don't matter.  Thus, you
  14727. might assume that the name of the variable you use in an example does
  14728. not matter.  Well, probably it doesn't, but one cannot be sure.
  14729. Perhaps the bug is a stray memory reference which happens to fetch from
  14730. the location where that name is stored in memory; perhaps, if the name
  14731. were different, the contents of that location would fool the compiler
  14732. into doing the right thing despite the bug.  Play it safe and give a
  14733. specific, complete example.  That is the easiest thing for you to do,
  14734. and the most helpful.
  14735.    Keep in mind that the purpose of a bug report is to enable someone to
  14736. fix the bug if it is not known.  It isn't very important what happens if
  14737. the bug is already known.  Therefore, always write your bug reports on
  14738. the assumption that the bug is not known.
  14739.    Sometimes people give a few sketchy facts and ask, "Does this ring a
  14740. bell?"  This cannot help us fix a bug, so it is rarely helpful.  We
  14741. respond by asking for enough details to enable us to investigate.  You
  14742. might as well expedite matters by sending them to begin with.
  14743. (Besides, there are enough bells ringing around here as it is.)
  14744.    Try to make your bug report self-contained.  If we have to ask you
  14745. for more information, it is best if you include all the previous
  14746. information in your response, as well as the information that was
  14747. missing.
  14748.    Please report each bug in a separate message.  This makes it easier
  14749. for us to track which bugs have been fixed and to forward your bugs
  14750. reports to the appropriate maintainer.
  14751.    Do not compress and encode any part of your bug report using programs
  14752. such as `uuencode'.  If you do so it will slow down the processing of
  14753. your bug.  If you must submit multiple large files, use `shar', which
  14754. allows us to read your message without having to run any decompression
  14755. programs.
  14756.    (As a special exception for GNU Fortran bug-reporting, at least for
  14757. now, if you are sending more than a few lines of code, if your
  14758. program's source file format contains "interesting" things like
  14759. trailing spaces or strange characters, or if you need to include binary
  14760. data files, it is acceptable to put all the files together in a `tar'
  14761. archive, and, whether you need to do that, it is acceptable to then
  14762. compress the single file (`tar' archive or source file) using `gzip'
  14763. and encode it via `uuencode'.  Do not use any MIME stuff--the current
  14764. maintainer can't decode this.  Using `compress' instead of `gzip' is
  14765. acceptable, assuming you have licensed the use of the patented
  14766. algorithm in `compress' from Unisys.)
  14767.    To enable someone to investigate the bug, you should include all
  14768. these things:
  14769.    * The version of GNU Fortran.  You can get this by running `g77'
  14770.      with the `-v' option.  (Ignore any error messages that might be
  14771.      displayed when the linker is run.)
  14772.      Without this, we won't know whether there is any point in looking
  14773.      for the bug in the current version of GNU Fortran.
  14774.    * A complete input file that will reproduce the bug.  If the bug is
  14775.      in the compiler proper (`f771') and you are using the C
  14776.      preprocessor, run your source file through the C preprocessor by
  14777.      doing `g77 -E SOURCEFILE > OUTFILE', then include the contents of
  14778.      OUTFILE in the bug report.  (When you do this, use the same `-I',
  14779.      `-D' or `-U' options that you used in actual compilation.)
  14780.      A single statement is not enough of an example.  In order to
  14781.      compile it, it must be embedded in a complete file of compiler
  14782.      input; and the bug might depend on the details of how this is done.
  14783.      Without a real example one can compile, all anyone can do about
  14784.      your bug report is wish you luck.  It would be futile to try to
  14785.      guess how to provoke the bug.  For example, bugs in register
  14786.      allocation and reloading frequently depend on every little detail
  14787.      of the function they happen in.
  14788.    * Note that you should include with your bug report any files
  14789.      included by the source file (via the `#include' or `INCLUDE'
  14790.      directive) that you send, and any files they include, and so on.
  14791.      It is not necessary to replace the `#include' and `INCLUDE'
  14792.      directives with the actual files in the version of the source file
  14793.      that you send, but it might make submitting the bug report easier
  14794.      in the end.  However, be sure to *reproduce* the bug using the
  14795.      *exact* version of the source material you submit, to avoid
  14796.      wild-goose chases.
  14797.    * The command arguments you gave GNU Fortran to compile that example
  14798.      and observe the bug.  For example, did you use `-O'?  To guarantee
  14799.      you won't omit something important, list all the options.
  14800.      If we were to try to guess the arguments, we would probably guess
  14801.      wrong and then we would not encounter the bug.
  14802.    * The type of machine you are using, and the operating system name
  14803.      and version number.  (Much of this information is printed by `g77
  14804.      -v'--if you include that, send along any additional info you have
  14805.      that you don't see clearly represented in that output.)
  14806.    * The operands you gave to the `configure' command when you installed
  14807.      the compiler.
  14808.    * A complete list of any modifications you have made to the compiler
  14809.      source.  (We don't promise to investigate the bug unless it
  14810.      happens in an unmodified compiler.  But if you've made
  14811.      modifications and don't tell us, then you are sending us on a
  14812.      wild-goose chase.)
  14813.      Be precise about these changes.  A description in English is not
  14814.      enough--send a context diff for them.
  14815.      Adding files of your own (such as a machine description for a
  14816.      machine we don't support) is a modification of the compiler source.
  14817.    * Details of any other deviations from the standard procedure for
  14818.      installing GNU Fortran.
  14819.    * A description of what behavior you observe that you believe is
  14820.      incorrect.  For example, "The compiler gets a fatal signal," or,
  14821.      "The assembler instruction at line 208 in the output is incorrect."
  14822.      Of course, if the bug is that the compiler gets a fatal signal,
  14823.      then one can't miss it.  But if the bug is incorrect output, the
  14824.      maintainer might not notice unless it is glaringly wrong.  None of
  14825.      us has time to study all the assembler code from a 50-line Fortran
  14826.      program just on the chance that one instruction might be wrong.
  14827.      We need *you* to do this part!
  14828.      Even if the problem you experience is a fatal signal, you should
  14829.      still say so explicitly.  Suppose something strange is going on,
  14830.      such as, your copy of the compiler is out of synch, or you have
  14831.      encountered a bug in the C library on your system.  (This has
  14832.      happened!)  Your copy might crash and the copy here would not.  If
  14833.      you said to expect a crash, then when the compiler here fails to
  14834.      crash, we would know that the bug was not happening.  If you don't
  14835.      say to expect a crash, then we would not know whether the bug was
  14836.      happening.  We would not be able to draw any conclusion from our
  14837.      observations.
  14838.      If the problem is a diagnostic when building GNU Fortran with some
  14839.      other compiler, say whether it is a warning or an error.
  14840.      Often the observed symptom is incorrect output when your program
  14841.      is run.  Sad to say, this is not enough information unless the
  14842.      program is short and simple.  None of us has time to study a large
  14843.      program to figure out how it would work if compiled correctly,
  14844.      much less which line of it was compiled wrong.  So you will have
  14845.      to do that.  Tell us which source line it is, and what incorrect
  14846.      result happens when that line is executed.  A person who
  14847.      understands the program can find this as easily as finding a bug
  14848.      in the program itself.
  14849.    * If you send examples of assembler code output from GNU Fortran,
  14850.      please use `-g' when you make them.  The debugging information
  14851.      includes source line numbers which are essential for correlating
  14852.      the output with the input.
  14853.    * If you wish to mention something in the GNU Fortran source, refer
  14854.      to it by context, not by line number.
  14855.      The line numbers in the development sources don't match those in
  14856.      your sources.  Your line numbers would convey no convenient
  14857.      information to the maintainers.
  14858.    * Additional information from a debugger might enable someone to
  14859.      find a problem on a machine which he does not have available.
  14860.      However, you need to think when you collect this information if
  14861.      you want it to have any chance of being useful.
  14862.      For example, many people send just a backtrace, but that is never
  14863.      useful by itself.  A simple backtrace with arguments conveys little
  14864.      about GNU Fortran because the compiler is largely data-driven; the
  14865.      same functions are called over and over for different RTL insns,
  14866.      doing different things depending on the details of the insn.
  14867.      Most of the arguments listed in the backtrace are useless because
  14868.      they are pointers to RTL list structure.  The numeric values of the
  14869.      pointers, which the debugger prints in the backtrace, have no
  14870.      significance whatever; all that matters is the contents of the
  14871.      objects they point to (and most of the contents are other such
  14872.      pointers).
  14873.      In addition, most compiler passes consist of one or more loops that
  14874.      scan the RTL insn sequence.  The most vital piece of information
  14875.      about such a loop--which insn it has reached--is usually in a
  14876.      local variable, not in an argument.
  14877.      What you need to provide in addition to a backtrace are the values
  14878.      of the local variables for several stack frames up.  When a local
  14879.      variable or an argument is an RTX, first print its value and then
  14880.      use the GDB command `pr' to print the RTL expression that it points
  14881.      to.  (If GDB doesn't run on your machine, use your debugger to call
  14882.      the function `debug_rtx' with the RTX as an argument.)  In
  14883.      general, whenever a variable is a pointer, its value is no use
  14884.      without the data it points to.
  14885.    Here are some things that are not necessary:
  14886.    * A description of the envelope of the bug.
  14887.      Often people who encounter a bug spend a lot of time investigating
  14888.      which changes to the input file will make the bug go away and which
  14889.      changes will not affect it.
  14890.      This is often time consuming and not very useful, because the way
  14891.      we will find the bug is by running a single example under the
  14892.      debugger with breakpoints, not by pure deduction from a series of
  14893.      examples.  You might as well save your time for something else.
  14894.      Of course, if you can find a simpler example to report *instead* of
  14895.      the original one, that is a convenience.  Errors in the output
  14896.      will be easier to spot, running under the debugger will take less
  14897.      time, etc.  Most GNU Fortran bugs involve just one function, so
  14898.      the most straightforward way to simplify an example is to delete
  14899.      all the function definitions except the one where the bug occurs.
  14900.      Those earlier in the file may be replaced by external declarations
  14901.      if the crucial function depends on them.  (Exception: inline
  14902.      functions might affect compilation of functions defined later in
  14903.      the file.)
  14904.      However, simplification is not vital; if you don't want to do this,
  14905.      report the bug anyway and send the entire test case you used.
  14906.    * In particular, some people insert conditionals `#ifdef BUG' around
  14907.      a statement which, if removed, makes the bug not happen.  These
  14908.      are just clutter; we won't pay any attention to them anyway.
  14909.      Besides, you should send us preprocessor output, and that can't
  14910.      have conditionals.
  14911.    * A patch for the bug.
  14912.      A patch for the bug is useful if it is a good one.  But don't omit
  14913.      the necessary information, such as the test case, on the
  14914.      assumption that a patch is all we need.  We might see problems
  14915.      with your patch and decide to fix the problem another way, or we
  14916.      might not understand it at all.
  14917.      Sometimes with a program as complicated as GNU Fortran it is very
  14918.      hard to construct an example that will make the program follow a
  14919.      certain path through the code.  If you don't send the example, we
  14920.      won't be able to construct one, so we won't be able to verify that
  14921.      the bug is fixed.
  14922.      And if we can't understand what bug you are trying to fix, or why
  14923.      your patch should be an improvement, we won't install it.  A test
  14924.      case will help us to understand.
  14925.      *Note Sending Patches::, for guidelines on how to make it easy for
  14926.      us to understand and install your patches.
  14927.    * A guess about what the bug is or what it depends on.
  14928.      Such guesses are usually wrong.  Even the maintainer can't guess
  14929.      right about such things without first using the debugger to find
  14930.      the facts.
  14931.    * A core dump file.
  14932.      We have no way of examining a core dump for your type of machine
  14933.      unless we have an identical system--and if we do have one, we
  14934.      should be able to reproduce the crash ourselves.
  14935. File: g77.info,  Node: Sending Patches,  Prev: Bug Reporting,  Up: Bugs
  14936. Sending Patches for GNU Fortran
  14937. ===============================
  14938.    If you would like to write bug fixes or improvements for the GNU
  14939. Fortran compiler, that is very helpful.  Send suggested fixes to the
  14940. bug report mailing list, <fortran@gnu.org>.
  14941.    Please follow these guidelines so we can study your patches
  14942. efficiently.  If you don't follow these guidelines, your information
  14943. might still be useful, but using it will take extra work.  Maintaining
  14944. GNU Fortran is a lot of work in the best of circumstances, and we can't
  14945. keep up unless you do your best to help.
  14946.    * Send an explanation with your changes of what problem they fix or
  14947.      what improvement they bring about.  For a bug fix, just include a
  14948.      copy of the bug report, and explain why the change fixes the bug.
  14949.      (Referring to a bug report is not as good as including it, because
  14950.      then we will have to look it up, and we have probably already
  14951.      deleted it if we've already fixed the bug.)
  14952.    * Always include a proper bug report for the problem you think you
  14953.      have fixed.  We need to convince ourselves that the change is
  14954.      right before installing it.  Even if it is right, we might have
  14955.      trouble judging it if we don't have a way to reproduce the problem.
  14956.    * Include all the comments that are appropriate to help people
  14957.      reading the source in the future understand why this change was
  14958.      needed.
  14959.    * Don't mix together changes made for different reasons.  Send them
  14960.      *individually*.
  14961.      If you make two changes for separate reasons, then we might not
  14962.      want to install them both.  We might want to install just one.  If
  14963.      you send them all jumbled together in a single set of diffs, we
  14964.      have to do extra work to disentangle them--to figure out which
  14965.      parts of the change serve which purpose.  If we don't have time
  14966.      for this, we might have to ignore your changes entirely.
  14967.      If you send each change as soon as you have written it, with its
  14968.      own explanation, then the two changes never get tangled up, and we
  14969.      can consider each one properly without any extra work to
  14970.      disentangle them.
  14971.      Ideally, each change you send should be impossible to subdivide
  14972.      into parts that we might want to consider separately, because each
  14973.      of its parts gets its motivation from the other parts.
  14974.    * Send each change as soon as that change is finished.  Sometimes
  14975.      people think they are helping us by accumulating many changes to
  14976.      send them all together.  As explained above, this is absolutely
  14977.      the worst thing you could do.
  14978.      Since you should send each change separately, you might as well
  14979.      send it right away.  That gives us the option of installing it
  14980.      immediately if it is important.
  14981.    * Use `diff -c' to make your diffs.  Diffs without context are hard
  14982.      for us to install reliably.  More than that, they make it hard for
  14983.      us to study the diffs to decide whether we want to install them.
  14984.      Unidiff format is better than contextless diffs, but not as easy
  14985.      to read as `-c' format.
  14986.      If you have GNU `diff', use `diff -cp', which shows the name of the
  14987.      function that each change occurs in.  (The maintainer of GNU
  14988.      Fortran currently uses `diff -rcp2N'.)
  14989.    * Write the change log entries for your changes.  We get lots of
  14990.      changes, and we don't have time to do all the change log writing
  14991.      ourselves.
  14992.      Read the `ChangeLog' file to see what sorts of information to put
  14993.      in, and to learn the style that we use.  The purpose of the change
  14994.      log is to show people where to find what was changed.  So you need
  14995.      to be specific about what functions you changed; in large
  14996.      functions, it's often helpful to indicate where within the
  14997.      function the change was.
  14998.      On the other hand, once you have shown people where to find the
  14999.      change, you need not explain its purpose.  Thus, if you add a new
  15000.      function, all you need to say about it is that it is new.  If you
  15001.      feel that the purpose needs explaining, it probably does--but the
  15002.      explanation will be much more useful if you put it in comments in
  15003.      the code.
  15004.      If you would like your name to appear in the header line for who
  15005.      made the change, send us the header line.
  15006.    * When you write the fix, keep in mind that we can't install a
  15007.      change that would break other systems.
  15008.      People often suggest fixing a problem by changing
  15009.      machine-independent files such as `toplev.c' to do something
  15010.      special that a particular system needs.  Sometimes it is totally
  15011.      obvious that such changes would break GNU Fortran for almost all
  15012.      users.  We can't possibly make a change like that.  At best it
  15013.      might tell us how to write another patch that would solve the
  15014.      problem acceptably.
  15015.      Sometimes people send fixes that *might* be an improvement in
  15016.      general--but it is hard to be sure of this.  It's hard to install
  15017.      such changes because we have to study them very carefully.  Of
  15018.      course, a good explanation of the reasoning by which you concluded
  15019.      the change was correct can help convince us.
  15020.      The safest changes are changes to the configuration files for a
  15021.      particular machine.  These are safe because they can't create new
  15022.      bugs on other machines.
  15023.      Please help us keep up with the workload by designing the patch in
  15024.      a form that is good to install.
  15025. File: g77.info,  Node: Service,  Next: Adding Options,  Prev: Bugs,  Up: Top
  15026. How To Get Help with GNU Fortran
  15027. ********************************
  15028.    If you need help installing, using or changing GNU Fortran, there
  15029. are two ways to find it:
  15030.    * Look in the service directory for someone who might help you for a
  15031.      fee.  The service directory is found in the file named `SERVICE'
  15032.      in the GNU CC distribution.
  15033.    * Send a message to <fortran@gnu.org>.
  15034. File: g77.info,  Node: Adding Options,  Next: Projects,  Prev: Service,  Up: Top
  15035. Adding Options
  15036. **************
  15037.    To add a new command-line option to `g77', first decide what kind of
  15038. option you wish to add.  Search the `g77' and `gcc' documentation for
  15039. one or more options that is most closely like the one you want to add
  15040. (in terms of what kind of effect it has, and so on) to help clarify its
  15041. nature.
  15042.    * *Fortran options* are options that apply only when compiling
  15043.      Fortran programs.  They are accepted by `g77' and `gcc', but they
  15044.      apply only when compiling Fortran programs.
  15045.    * *Compiler options* are options that apply when compiling most any
  15046.      kind of program.
  15047.    *Fortran options* are listed in the file `gcc/f/lang-options.h',
  15048. which is used during the build of `gcc' to build a list of all options
  15049. that are accepted by at least one language's compiler.  This list goes
  15050. into the `lang_options' array in `gcc/toplev.c', which uses this array
  15051. to determine whether a particular option should be offered to the
  15052. linked-in front end for processing by calling `lang_option_decode',
  15053. which, for `g77', is in `gcc/f/com.c' and just calls
  15054. `ffe_decode_option'.
  15055.    If the linked-in front end "rejects" a particular option passed to
  15056. it, `toplev.c' just ignores the option, because *some* language's
  15057. compiler is willing to accept it.
  15058.    This allows commands like `gcc -fno-asm foo.c bar.f' to work, even
  15059. though Fortran compilation does not currently support the `-fno-asm'
  15060. option; even though the `f771' version of `lang_decode_option' rejects
  15061. `-fno-asm', `toplev.c' doesn't produce a diagnostic because some other
  15062. language (C) does accept it.
  15063.    This also means that commands like `g77 -fno-asm foo.f' yield no
  15064. diagnostics, despite the fact that no phase of the command was able to
  15065. recognize and process `-fno-asm'--perhaps a warning about this would be
  15066. helpful if it were possible.
  15067.    Code that processes Fortran options is found in `gcc/f/top.c',
  15068. function `ffe_decode_option'.  This code needs to check positive and
  15069. negative forms of each option.
  15070.    The defaults for Fortran options are set in their global
  15071. definitions, also found in `gcc/f/top.c'.  Many of these defaults are
  15072. actually macros defined in `gcc/f/target.h', since they might be
  15073. machine-specific.  However, since, in practice, GNU compilers should
  15074. behave the same way on all configurations (especially when it comes to
  15075. language constructs), the practice of setting defaults in `target.h' is
  15076. likely to be deprecated and, ultimately, stopped in future versions of
  15077. `g77'.
  15078.    Accessor macros for Fortran options, used by code in the `g77' FFE,
  15079. are defined in `gcc/f/top.h'.
  15080.    *Compiler options* are listed in `gcc/toplev.c' in the array
  15081. `f_options'.  An option not listed in `lang_options' is looked up in
  15082. `f_options' and handled from there.
  15083.    The defaults for compiler options are set in the global definitions
  15084. for the corresponding variables, some of which are in `gcc/toplev.c'.
  15085.    You can set different defaults for *Fortran-oriented* or
  15086. *Fortran-reticent* compiler options by changing the way `f771' handles
  15087. the `-fset-g77-defaults' option, which is always provided as the first
  15088. option when called by `g77' or `gcc'.
  15089.    This code is in `ffe_decode_options' in `gcc/f/top.c'.  Have it
  15090. change just the variables that you want to default to a different
  15091. setting for Fortran compiles compared to compiles of other languages.
  15092.    The `-fset-g77-defaults' option is passed to `f771' automatically
  15093. because of the specification information kept in `gcc/f/lang-specs.h'.
  15094. This file tells the `gcc' command how to recognize, in this case,
  15095. Fortran source files (those to be preprocessed, and those that are
  15096. not), and further, how to invoke the appropriate programs (including
  15097. `f771') to process those source files.
  15098.    It is in `gcc/f/lang-specs.h' that `-fset-g77-defaults',
  15099. `-fversion', and other options are passed, as appropriate, even when
  15100. the user has not explicitly specified them.  Other "internal" options
  15101. such as `-quiet' also are passed via this mechanism.
  15102. File: g77.info,  Node: Projects,  Next: Diagnostics,  Prev: Adding Options,  Up: Top
  15103. Projects
  15104. ********
  15105.    If you want to contribute to `g77' by doing research, design,
  15106. specification, documentation, coding, or testing, the following
  15107. information should give you some ideas.
  15108. * Menu:
  15109. * Efficiency::               Make `g77' itself compile code faster.
  15110. * Better Optimization::      Teach `g77' to generate faster code.
  15111. * Simplify Porting::         Make `g77' easier to configure, build,
  15112.                              and install.
  15113. * More Extensions::          Features many users won't know to ask for.
  15114. * Machine Model::            `g77' should better leverage `gcc'.
  15115. * Internals Documentation::  Make maintenance easier.
  15116. * Internals Improvements::   Make internals more robust.
  15117. * Better Diagnostics::       Make using `g77' on new code easier.
  15118. File: g77.info,  Node: Efficiency,  Next: Better Optimization,  Up: Projects
  15119. Improve Efficiency
  15120. ==================
  15121.    Don't bother doing any performance analysis until most of the
  15122. following items are taken care of, because there's no question they
  15123. represent serious space/time problems, although some of them show up
  15124. only given certain kinds of (popular) input.
  15125.    * Improve `malloc' package and its uses to specify more info about
  15126.      memory pools and, where feasible, use obstacks to implement them.
  15127.    * Skip over uninitialized portions of aggregate areas (arrays,
  15128.      `COMMON' areas, `EQUIVALENCE' areas) so zeros need not be output.
  15129.      This would reduce memory usage for large initialized aggregate
  15130.      areas, even ones with only one initialized element.
  15131.      As of version 0.5.18, a portion of this item has already been
  15132.      accomplished.
  15133.    * Prescan the statement (in `sta.c') so that the nature of the
  15134.      statement is determined as much as possible by looking entirely at
  15135.      its form, and not looking at any context (previous statements,
  15136.      including types of symbols).  This would allow ripping out of the
  15137.      statement-confirmation, symbol retraction/confirmation, and
  15138.      diagnostic inhibition mechanisms.  Plus, it would result in
  15139.      much-improved diagnostics.  For example, `CALL
  15140.      some-intrinsic(...)', where the intrinsic is not a subroutine
  15141.      intrinsic, would result actual error instead of the
  15142.      unimplemented-statement catch-all.
  15143.    * Throughout `g77', don't pass line/column pairs where a simple
  15144.      `ffewhere' type, which points to the error as much as is desired
  15145.      by the configuration, will do, and don't pass `ffelexToken' types
  15146.      where a simple `ffewhere' type will do.  Then, allow new default
  15147.      configuration of `ffewhere' such that the source line text is not
  15148.      preserved, and leave it to things like Emacs' next-error function
  15149.      to point to them (now that `next-error' supports column, or,
  15150.      perhaps, character-offset, numbers).  The change in calling
  15151.      sequences should improve performance somewhat, as should not
  15152.      having to save source lines.  (Whether this whole item will
  15153.      improve performance is questionable, but it should improve
  15154.      maintainability.)
  15155.    * Handle `DATA (A(I),I=1,1000000)/1000000*2/' more efficiently,
  15156.      especially as regards the assembly output.  Some of this might
  15157.      require improving the back end, but lots of improvement in
  15158.      space/time required in `g77' itself can be fairly easily obtained
  15159.      without touching the back end.  Maybe type-conversion, where
  15160.      necessary, can be speeded up as well in cases like the one shown
  15161.      (converting the `2' into `2.').
  15162.    * If analysis shows it to be worthwhile, optimize `lex.c'.
  15163.    * Consider redesigning `lex.c' to not need any feedback during
  15164.      tokenization, by keeping track of enough parse state on its own.
  15165. File: g77.info,  Node: Better Optimization,  Next: Simplify Porting,  Prev: Efficiency,  Up: Projects
  15166. Better Optimization
  15167. ===================
  15168.    Much of this work should be put off until after `g77' has all the
  15169. features necessary for its widespread acceptance as a useful F77
  15170. compiler.  However, perhaps this work can be done in parallel during
  15171. the feature-adding work.
  15172.    * Do the equivalent of the trick of putting `extern inline' in front
  15173.      of every function definition in `libf2c' and #include'ing the
  15174.      resulting file in `f2c'+`gcc'--that is, inline all
  15175.      run-time-library functions that are at all worth inlining.  (Some
  15176.      of this has already been done, such as for integral
  15177.      exponentiation.)
  15178.    * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types
  15179.      line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make
  15180.      `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'.
  15181.      (This is now done for `COMPLEX' variables.)
  15182.    * Design and implement Fortran-specific optimizations that don't
  15183.      really belong in the back end, or where the front end needs to
  15184.      give the back end more info than it currently does.
  15185.    * Design and implement a new run-time library interface, with the
  15186.      code going into `libgcc' so no special linking is required to link
  15187.      Fortran programs using standard language features.  This library
  15188.      would speed up lots of things, from I/O (using precompiled formats,
  15189.      doing just one, or, at most, very few, calls for arrays or array
  15190.      sections, and so on) to general computing (array/section
  15191.      implementations of various intrinsics, implementation of commonly
  15192.      performed loops that aren't likely to be optimally compiled
  15193.      otherwise, etc.).
  15194.      Among the important things the library would do are:
  15195.         * Be a one-stop-shop-type library, hence shareable and usable
  15196.           by all, in that what are now library-build-time options in
  15197.           `libf2c' would be moved at least to the `g77' compile phase,
  15198.           if not to finer grains (such as choosing how list-directed
  15199.           I/O formatting is done by default at `OPEN' time, for
  15200.           preconnected units via options or even statements in the main
  15201.           program unit, maybe even on a per-I/O basis with appropriate
  15202.           pragma-like devices).
  15203.    * Probably requiring the new library design, change interface to
  15204.      normally have `COMPLEX' functions return their values in the way
  15205.      `gcc' would if they were declared `__complex__ float', rather than
  15206.      using the mechanism currently used by `CHARACTER' functions
  15207.      (whereby the functions are compiled as returning void and their
  15208.      first arg is a pointer to where to store the result).  (Don't
  15209.      append underscores to external names for `COMPLEX' functions in
  15210.      some cases once `g77' uses `gcc' rather than `f2c' calling
  15211.      conventions.)
  15212.    * Do something useful with `doiter' references where possible.  For
  15213.      example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop
  15214.      that uses `I' as the iteration variable, and the back end might
  15215.      find that info useful in determining whether it needs to read `I'
  15216.      back into a register after the call.  (It normally has to do that,
  15217.      unless it knows `FOO' never modifies its passed-by-reference
  15218.      argument, which is rarely the case for Fortran-77 code.)
  15219. File: g77.info,  Node: Simplify Porting,  Next: More Extensions,  Prev: Better Optimization,  Up: Projects
  15220. Simplify Porting
  15221. ================
  15222.    Making `g77' easier to configure, port, build, and install, either
  15223. as a single-system compiler or as a cross-compiler, would be very
  15224. useful.
  15225.    * A new library (replacing `libf2c') should improve portability as
  15226.      well as produce more optimal code.  Further, `g77' and the new
  15227.      library should conspire to simplify naming of externals, such as
  15228.      by removing unnecessarily added underscores, and to
  15229.      reduce/eliminate the possibility of naming conflicts, while making
  15230.      debugger more straightforward.
  15231.      Also, it should make multi-language applications more feasible,
  15232.      such as by providing Fortran intrinsics that get Fortran unit
  15233.      numbers given C `FILE *' descriptors.
  15234.    * Possibly related to a new library, `g77' should produce the
  15235.      equivalent of a `gcc' `main(argc, argv)' function when it compiles
  15236.      a main program unit, instead of compiling something that must be
  15237.      called by a library implementation of `main()'.
  15238.      This would do many useful things such as provide more flexibility
  15239.      in terms of setting up exception handling, not requiring
  15240.      programmers to start their debugging sessions with `breakpoint
  15241.      MAIN__' followed by `run', and so on.
  15242.    * The GBE needs to understand the difference between alignment
  15243.      requirements and desires.  For example, on Intel x86 machines,
  15244.      `g77' currently imposes overly strict alignment requirements, due
  15245.      to the back end, but it would be useful for Fortran and C
  15246.      programmers to be able to override these *recommendations* as long
  15247.      as they don't violate the actual processor *requirements*.
  15248. File: g77.info,  Node: More Extensions,  Next: Machine Model,  Prev: Simplify Porting,  Up: Projects
  15249. More Extensions
  15250. ===============
  15251.    These extensions are not the sort of things users ask for "by name",
  15252. but they might improve the usability of `g77', and Fortran in general,
  15253. in the long run.  Some of these items really pertain to improving `g77'
  15254. internals so that some popular extensions can be more easily supported.
  15255.    * Look through all the documentation on the GNU Fortran language,
  15256.      dialects, compiler, missing features, bugs, and so on.  Many
  15257.      mentions of incomplete or missing features are sprinkled
  15258.      throughout.  It is not worth repeating them here.
  15259.    * Support arbitrary operands for concatenation, even in contexts
  15260.      where run-time allocation is required.
  15261.    * Consider adding a `NUMERIC' type to designate typeless numeric
  15262.      constants, named and unnamed.  The idea is to provide a
  15263.      forward-looking, effective replacement for things like the
  15264.      old-style `PARAMETER' statement when people really need
  15265.      typelessness in a maintainable, portable, clearly documented way.
  15266.      Maybe `TYPELESS' would include `CHARACTER', `POINTER', and
  15267.      whatever else might come along.  (This is not really a call for
  15268.      polymorphism per se, just an ability to express limited, syntactic
  15269.      polymorphism.)
  15270.    * Support `OPEN(...,KEY=(...),...)'.
  15271.    * Support arbitrary file unit numbers, instead of limiting them to 0
  15272.      through `MXUNIT-1'.  (This is a `libf2c' issue.)
  15273.    * `OPEN(NOSPANBLOCKS,...)' is treated as
  15274.      `OPEN(UNIT=NOSPANBLOCKS,...)', so a later `UNIT=' in the first
  15275.      example is invalid.  Make sure this is what users of this feature
  15276.      would expect.
  15277.    * Currently `g77' disallows `READ(1'10)' since it is an obnoxious
  15278.      syntax, but supporting it might be pretty easy if needed.  More
  15279.      details are needed, such as whether general expressions separated
  15280.      by an apostrophe are supported, or maybe the record number can be
  15281.      a general expression, and so on.
  15282.    * Support `STRUCTURE', `UNION', `MAP', and `RECORD' fully.
  15283.      Currently there is no support at all for `%FILL' in `STRUCTURE'
  15284.      and related syntax, whereas the rest of the stuff has at least
  15285.      some parsing support.  This requires either major changes to
  15286.      `libf2c' or its replacement.
  15287.    * F90 and `g77' probably disagree about label scoping relative to
  15288.      `INTERFACE' and `END INTERFACE', and their contained procedure
  15289.      interface bodies (blocks?).
  15290.    * `ENTRY' doesn't support F90 `RESULT()' yet, since that was added
  15291.      after S8.112.
  15292.    * Empty-statement handling (10 ;;CONTINUE;;) probably isn't
  15293.      consistent with the final form of the standard (it was vague at
  15294.      S8.112).
  15295.    * It seems to be an "open" question whether a file, immediately
  15296.      after being `OPEN'ed,is positioned at the beginning, the end, or
  15297.      wherever--it might be nice to offer an option of opening to
  15298.      "undefined" status, requiring an explicit absolute-positioning
  15299.      operation to be performed before any other (besides `CLOSE') to
  15300.      assist in making applications port to systems (some IBM?) that
  15301.      `OPEN' to the end of a file or some such thing.
  15302. File: g77.info,  Node: Machine Model,  Next: Internals Documentation,  Prev: More Extensions,  Up: Projects
  15303. Machine Model
  15304. =============
  15305.    This items pertain to generalizing `g77''s view of the machine model
  15306. to more fully accept whatever the GBE provides it via its configuration.
  15307.    * Switch to using `REAL_VALUE_TYPE' to represent floating-point
  15308.      constants exclusively so the target float format need not be
  15309.      required.  This means changing the way `g77' handles
  15310.      initialization of aggregate areas having more than one type, such
  15311.      as `REAL' and `INTEGER', because currently it initializes them as
  15312.      if they were arrays of `char' and uses the bit patterns of the
  15313.      constants of the various types in them to determine what to stuff
  15314.      in elements of the arrays.
  15315.    * Rely more and more on back-end info and capabilities, especially
  15316.      in the area of constants (where having the `g77' front-end's IL
  15317.      just store the appropriate tree nodes containing constants might
  15318.      be best).
  15319.    * Suite of C and Fortran programs that a user/administrator can run
  15320.      on a machine to help determine the configuration for `g77' before
  15321.      building and help determine if the compiler works (especially with
  15322.      whatever libraries are installed) after building.
  15323. File: g77.info,  Node: Internals Documentation,  Next: Internals Improvements,  Prev: Machine Model,  Up: Projects
  15324. Internals Documentation
  15325. =======================
  15326.    Better info on how `g77' works and how to port it is needed.  Much
  15327. of this should be done only after the redesign planned for 0.6 is
  15328. complete.
  15329. File: g77.info,  Node: Internals Improvements,  Next: Better Diagnostics,  Prev: Internals Documentation,  Up: Projects
  15330. Internals Improvements
  15331. ======================
  15332.    Some more items that would make `g77' more reliable and easier to
  15333. maintain:
  15334.    * Generally make expression handling focus more on critical syntax
  15335.      stuff, leaving semantics to callers.  For example, anything a
  15336.      caller can check, semantically, let it do so, rather than having
  15337.      `expr.c' do it.  (Exceptions might include things like diagnosing
  15338.      `FOO(I--K:)=BAR' where `FOO' is a `PARAMETER'--if it seems
  15339.      important to preserve the left-to-right-in-source order of
  15340.      production of diagnostics.)
  15341.    * Come up with better naming conventions for `-D' to establish
  15342.      requirements to achieve desired implementation dialect via
  15343.      `proj.h'.
  15344.    * Clean up used tokens and `ffewhere's in `ffeglobal_terminate_1'.
  15345.    * Replace `sta.c' `outpooldisp' mechanism with `malloc_pool_use'.
  15346.    * Check for `opANY' in more places in `com.c', `std.c', and `ste.c',
  15347.      and get rid of the `opCONVERT(opANY)' kludge (after determining if
  15348.      there is indeed no real need for it).
  15349.    * Utility to read and check `bad.def' messages and their references
  15350.      in the code, to make sure calls are consistent with message
  15351.      templates.
  15352.    * Search and fix `&ffe...' and similar so that `ffe...ptr...' macros
  15353.      are available instead (a good argument for wishing this could have
  15354.      written all this stuff in C++, perhaps).  On the other hand, it's
  15355.      questionable whether this sort of improvement is really necessary,
  15356.      given the availability of tools such as Emacs and Perl, which make
  15357.      finding any address-taking of structure members easy enough?
  15358.    * Some modules truly export the member names of their structures
  15359.      (and the structures themselves), maybe fix this, and fix other
  15360.      modules that just appear to as well (by appending `_', though it'd
  15361.      be ugly and probably not worth the time).
  15362.    * Implement C macros `RETURNS(value)' and `SETS(something,value)' in
  15363.      `proj.h' and use them throughout `g77' source code (especially in
  15364.      the definitions of access macros in `.h' files) so they can be
  15365.      tailored to catch code writing into a `RETURNS()' or reading from
  15366.      a `SETS()'.
  15367.    * Decorate throughout with `const' and other such stuff.
  15368.    * All F90 notational derivations in the source code are still based
  15369.      on the S8.112 version of the draft standard.  Probably should
  15370.      update to the official standard, or put documentation of the rules
  15371.      as used in the code...uh...in the code.
  15372.    * Some `ffebld_new' calls (those outside of `ffeexpr.c' or inside
  15373.      but invoked via paths not involving `ffeexpr_lhs' or
  15374.      `ffeexpr_rhs') might be creating things in improper pools, leading
  15375.      to such things staying around too long or (doubtful, but possible
  15376.      and dangerous) not long enough.
  15377.    * Some `ffebld_list_new' (or whatever) calls might not be matched by
  15378.      `ffebld_list_bottom' (or whatever) calls, which might someday
  15379.      matter.  (It definitely is not a problem just yet.)
  15380.    * Probably not doing clean things when we fail to `EQUIVALENCE'
  15381.      something due to alignment/mismatch or other problems--they end up
  15382.      without `ffestorag' objects, so maybe the backend (and other parts
  15383.      of the front end) can notice that and handle like an `opANY' (do
  15384.      what it wants, just don't complain or crash).  Most of this seems
  15385.      to have been addressed by now, but a code review wouldn't hurt.
  15386. File: g77.info,  Node: Better Diagnostics,  Prev: Internals Improvements,  Up: Projects
  15387. Better Diagnostics
  15388. ==================
  15389.    These are things users might not ask about, or that need to be
  15390. looked into, before worrying about.  Also here are items that involve
  15391. reducing unnecessary diagnostic clutter.
  15392.    * When `FUNCTION' and `ENTRY' point types disagree (`CHARACTER'
  15393.      lengths, type classes, and so on), `ANY'-ize the offending `ENTRY'
  15394.      point and any *new* dummies it specifies.
  15395.    * Speed up and improve error handling for data when repeat-count is
  15396.      specified.  For example, don't output 20 unnecessary messages
  15397.      after the first necessary one for:
  15398.           INTEGER X(20)
  15399.           CONTINUE
  15400.           DATA (X(I), J= 1, 20) /20*5/
  15401.           END
  15402.      (The `CONTINUE' statement ensures the `DATA' statement is
  15403.      processed in the context of executable, not specification,
  15404.      statements.)
  15405. File: g77.info,  Node: Diagnostics,  Next: Index,  Prev: Projects,  Up: Top
  15406. Diagnostics
  15407. ***********
  15408.    Some diagnostics produced by `g77' require sufficient explanation
  15409. that the explanations are given below, and the diagnostics themselves
  15410. identify the appropriate explanation.
  15411.    Identification uses the GNU Info format--specifically, the `info'
  15412. command that displays the explanation is given within square brackets
  15413. in the diagnostic.  For example:
  15414.      foo.f:5: Invalid statement [info -f g77 M FOOEY]
  15415.    More details about the above diagnostic is found in the `g77' Info
  15416. documentation, menu item `M', submenu item `FOOEY', which is displayed
  15417. by typing the UNIX command `info -f g77 M FOOEY'.
  15418.    Other Info readers, such as EMACS, may be just as easily used to
  15419. display the pertinent node.  In the above example, `g77' is the Info
  15420. document name, `M' is the top-level menu item to select, and, in that
  15421. node (named `Diagnostics', the name of this chapter, which is the very
  15422. text you're reading now), `FOOEY' is the menu item to select.
  15423. * Menu:
  15424. * CMPAMBIG::    Ambiguous use of intrinsic.
  15425. * EXPIMP::      Intrinsic used explicitly and implicitly.
  15426. * INTGLOB::     Intrinsic also used as name of global.
  15427. * LEX::         Various lexer messages
  15428. * GLOBALS::     Disagreements about globals.
  15429. File: g77.info,  Node: CMPAMBIG,  Next: EXPIMP,  Up: Diagnostics
  15430. `CMPAMBIG'
  15431. ==========
  15432.      Ambiguous use of intrinsic INTRINSIC ...
  15433.    The type of the argument to the invocation of the INTRINSIC
  15434. intrinsic is a `COMPLEX' type other than `COMPLEX(KIND=1)'.  Typically,
  15435. it is `COMPLEX(KIND=2)', also known as `DOUBLE COMPLEX'.
  15436.    The interpretation of this invocation depends on the particular
  15437. dialect of Fortran for which the code was written.  Some dialects
  15438. convert the real part of the argument to `REAL(KIND=1)', thus losing
  15439. precision; other dialects, and Fortran 90, do no such conversion.
  15440.    So, GNU Fortran rejects such invocations except under certain
  15441. circumstances, to avoid making an incorrect assumption that results in
  15442. generating the wrong code.
  15443.    To determine the dialect of the program unit, perhaps even whether
  15444. that particular invocation is properly coded, determine how the result
  15445. of the intrinsic is used.
  15446.    The result of INTRINSIC is expected (by the original programmer) to
  15447. be `REAL(KIND=1)' (the non-Fortran-90 interpretation) if:
  15448.    * It is passed as an argument to a procedure that explicitly or
  15449.      implicitly declares that argument `REAL(KIND=1)'.
  15450.      For example, a procedure with no `DOUBLE PRECISION' or `IMPLICIT
  15451.      DOUBLE PRECISION' statement specifying the dummy argument
  15452.      corresponding to an actual argument of `REAL(Z)', where `Z' is
  15453.      declared `DOUBLE COMPLEX', strongly suggests that the programmer
  15454.      expected `REAL(Z)' to return `REAL(KIND=1)' instead of
  15455.      `REAL(KIND=2)'.
  15456.    * It is used in a context that would otherwise not include any
  15457.      `REAL(KIND=2)' but where treating the INTRINSIC invocation as
  15458.      `REAL(KIND=2)' would result in unnecessary promotions and
  15459.      (typically) more expensive operations on the wider type.
  15460.      For example:
  15461.           DOUBLE COMPLEX Z
  15462.           ...
  15463.           R(1) = T * REAL(Z)
  15464.      The above example suggests the programmer expected the real part
  15465.      of `Z' to be converted to `REAL(KIND=1)' before being multiplied
  15466.      by `T' (presumed, along with `R' above, to be type `REAL(KIND=1)').
  15467.      Otherwise, the conversion would have to be delayed until after the
  15468.      multiplication, requiring not only an extra conversion (of `T' to
  15469.      `REAL(KIND=2)'), but a (typically) more expensive multiplication
  15470.      (a double-precision multiplication instead of a single-precision
  15471.      one).
  15472.    The result of INTRINSIC is expected (by the original programmer) to
  15473. be `REAL(KIND=2)' (the Fortran 90 interpretation) if:
  15474.    * It is passed as an argument to a procedure that explicitly or
  15475.      implicitly declares that argument `REAL(KIND=2)'.
  15476.      For example, a procedure specifying a `DOUBLE PRECISION' dummy
  15477.      argument corresponding to an actual argument of `REAL(Z)', where
  15478.      `Z' is declared `DOUBLE COMPLEX', strongly suggests that the
  15479.      programmer expected `REAL(Z)' to return `REAL(KIND=2)' instead of
  15480.      `REAL(KIND=1)'.
  15481.    * It is used in an expression context that includes other
  15482.      `REAL(KIND=2)' operands, or is assigned to a `REAL(KIND=2)'
  15483.      variable or array element.
  15484.      For example:
  15485.           DOUBLE COMPLEX Z
  15486.           DOUBLE PRECISION R, T
  15487.           ...
  15488.           R(1) = T * REAL(Z)
  15489.      The above example suggests the programmer expected the real part
  15490.      of `Z' to *not* be converted to `REAL(KIND=1)' by the `REAL()'
  15491.      intrinsic.
  15492.      Otherwise, the conversion would have to be immediately followed by
  15493.      a conversion back to `REAL(KIND=2)', losing the original, full
  15494.      precision of the real part of `Z', before being multiplied by `T'.
  15495.    Once you have determined whether a particular invocation of INTRINSIC
  15496. expects the Fortran 90 interpretation, you can:
  15497.    * Change it to `DBLE(EXPR)' (if INTRINSIC is `REAL') or
  15498.      `DIMAG(EXPR)' (if INTRINSIC is `AIMAG') if it expected the Fortran
  15499.      90 interpretation.
  15500.      This assumes EXPR is `COMPLEX(KIND=2)'--if it is some other type,
  15501.      such as `COMPLEX*32', you should use the appropriate intrinsic,
  15502.      such as the one to convert to `REAL*16' (perhaps `DBLEQ()' in
  15503.      place of `DBLE()', and `QIMAG()' in place of `DIMAG()').
  15504.    * Change it to `REAL(INTRINSIC(EXPR))', otherwise.  This converts to
  15505.      `REAL(KIND=1)' in all working Fortran compilers.
  15506.    If you don't want to change the code, and you are certain that all
  15507. ambiguous invocations of INTRINSIC in the source file have the same
  15508. expectation regarding interpretation, you can:
  15509.    * Compile with the `g77' option `-ff90', to enable the Fortran 90
  15510.      interpretation.
  15511.    * Compile with the `g77' options `-fno-f90 -fugly-complex', to
  15512.      enable the non-Fortran-90 interpretations.
  15513.    *Note REAL() and AIMAG() of Complex::, for more information on this
  15514. issue.
  15515.    Note: If the above suggestions don't produce enough evidence as to
  15516. whether a particular program expects the Fortran 90 interpretation of
  15517. this ambiguous invocation of INTRINSIC, there is one more thing you can
  15518.    If you have access to most or all the compilers used on the program
  15519. to create successfully tested and deployed executables, read the
  15520. documentation for, and *also* test out, each compiler to determine how
  15521. it treats the INTRINSIC intrinsic in this case.  (If all the compilers
  15522. don't agree on an interpretation, there might be lurking bugs in the
  15523. deployed versions of the program.)
  15524.    The following sample program might help:
  15525.            PROGRAM JCB003
  15526.      C
  15527.      C Written by James Craig Burley 1997-02-23.
  15528.      C Contact via Internet email: burley@gnu.org
  15529.      C
  15530.      C Determine how compilers handle non-standard REAL
  15531.      C and AIMAG on DOUBLE COMPLEX operands.
  15532.      C
  15533.            DOUBLE COMPLEX Z
  15534.            REAL R
  15535.            Z = (3.3D0, 4.4D0)
  15536.            R = Z
  15537.            CALL DUMDUM(Z, R)
  15538.            R = REAL(Z) - R
  15539.            IF (R .NE. 0.) PRINT *, 'REAL() is Fortran 90'
  15540.            IF (R .EQ. 0.) PRINT *, 'REAL() is not Fortran 90'
  15541.            R = 4.4D0
  15542.            CALL DUMDUM(Z, R)
  15543.            R = AIMAG(Z) - R
  15544.            IF (R .NE. 0.) PRINT *, 'AIMAG() is Fortran 90'
  15545.            IF (R .EQ. 0.) PRINT *, 'AIMAG() is not Fortran 90'
  15546.            END
  15547.      C
  15548.      C Just to make sure compiler doesn't use naive flow
  15549.      C analysis to optimize away careful work above,
  15550.      C which might invalidate results....
  15551.      C
  15552.            SUBROUTINE DUMDUM(Z, R)
  15553.            DOUBLE COMPLEX Z
  15554.            REAL R
  15555.            END
  15556.    If the above program prints contradictory results on a particular
  15557. compiler, run away!
  15558. File: g77.info,  Node: EXPIMP,  Next: INTGLOB,  Prev: CMPAMBIG,  Up: Diagnostics
  15559. `EXPIMP'
  15560. ========
  15561.      Intrinsic INTRINSIC referenced ...
  15562.    The INTRINSIC is explicitly declared in one program unit in the
  15563. source file and implicitly used as an intrinsic in another program unit
  15564. in the same source file.
  15565.    This diagnostic is designed to catch cases where a program might
  15566. depend on using the name INTRINSIC as an intrinsic in one program unit
  15567. and as a global name (such as the name of a subroutine or function) in
  15568. another, but `g77' recognizes the name as an intrinsic in both cases.
  15569.    After verifying that the program unit making implicit use of the
  15570. intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC
  15571. INTRINSIC' statement to that program unit to prevent this warning.
  15572.    This and related warnings are disabled by using the `-Wno-globals'
  15573. option when compiling.
  15574.    Note that this warning is not issued for standard intrinsics.
  15575. Standard intrinsics include those described in the FORTRAN 77 standard
  15576. and, if `-ff90' is specified, those described in the Fortran 90
  15577. standard.  Such intrinsics are not as likely to be confused with user
  15578. procedures as intrinsics provided as extensions to the standard by
  15579. `g77'.
  15580. File: g77.info,  Node: INTGLOB,  Next: LEX,  Prev: EXPIMP,  Up: Diagnostics
  15581. `INTGLOB'
  15582. =========
  15583.      Same name `INTRINSIC' given ...
  15584.    The name INTRINSIC is used for a global entity (a common block or a
  15585. program unit) in one program unit and implicitly used as an intrinsic
  15586. in another program unit.
  15587.    This diagnostic is designed to catch cases where a program intends
  15588. to use a name entirely as a global name, but `g77' recognizes the name
  15589. as an intrinsic in the program unit that references the name, a
  15590. situation that would likely produce incorrect code.
  15591.    For example:
  15592.      INTEGER FUNCTION TIME()
  15593.      ...
  15594.      END
  15595.      ...
  15596.      PROGRAM SAMP
  15597.      INTEGER TIME
  15598.      PRINT *, 'Time is ', TIME()
  15599.      END
  15600.    The above example defines a program unit named `TIME', but the
  15601. reference to `TIME' in the main program unit `SAMP' is normally treated
  15602. by `g77' as a reference to the intrinsic `TIME()' (unless a
  15603. command-line option that prevents such treatment has been specified).
  15604.    As a result, the program `SAMP' will *not* invoke the `TIME'
  15605. function in the same source file.
  15606.    Since `g77' recognizes `libU77' procedures as intrinsics, and since
  15607. some existing code uses the same names for its own procedures as used
  15608. by some `libU77' procedures, this situation is expected to arise often
  15609. enough to make this sort of warning worth issuing.
  15610.    After verifying that the program unit making implicit use of the
  15611. intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC
  15612. INTRINSIC' statement to that program unit to prevent this warning.
  15613.    Or, if you believe the program unit is designed to invoke the
  15614. program-defined procedure instead of the intrinsic (as recognized by
  15615. `g77'), add an `EXTERNAL INTRINSIC' statement to the program unit that
  15616. references the name to prevent this warning.
  15617.    This and related warnings are disabled by using the `-Wno-globals'
  15618. option when compiling.
  15619.    Note that this warning is not issued for standard intrinsics.
  15620. Standard intrinsics include those described in the FORTRAN 77 standard
  15621. and, if `-ff90' is specified, those described in the Fortran 90
  15622. standard.  Such intrinsics are not as likely to be confused with user
  15623. procedures as intrinsics provided as extensions to the standard by
  15624. `g77'.
  15625. File: g77.info,  Node: LEX,  Next: GLOBALS,  Prev: INTGLOB,  Up: Diagnostics
  15626. `LEX'
  15627. =====
  15628.      Unrecognized character ...
  15629.      Invalid first character ...
  15630.      Line too long ...
  15631.      Non-numeric character ...
  15632.      Continuation indicator ...
  15633.      Label at ... invalid with continuation line indicator ...
  15634.      Character constant ...
  15635.      Continuation line ...
  15636.      Statement at ... begins with invalid token
  15637.    Although the diagnostics identify specific problems, they can be
  15638. produced when general problems such as the following occur:
  15639.    * The source file contains something other than Fortran code.
  15640.      If the code in the file does not look like many of the examples
  15641.      elsewhere in this document, it might not be Fortran code.  (Note
  15642.      that Fortran code often is written in lower case letters, while
  15643.      the examples in this document use upper case letters, for
  15644.      stylistic reasons.)
  15645.      For example, if the file contains lots of strange-looking
  15646.      characters, it might be APL source code; if it contains lots of
  15647.      parentheses, it might be Lisp source code; if it contains lots of
  15648.      bugs, it might be C++ source code.
  15649.    * The source file contains free-form Fortran code, but `-ffree-form'
  15650.      was not specified on the command line to compile it.
  15651.      Free form is a newer form for Fortran code.  The older, classic
  15652.      form is called fixed form.
  15653.      Fixed-form code is visually fairly distinctive, because numerical
  15654.      labels and comments are all that appear in the first five columns
  15655.      of a line, the sixth column is reserved to denote continuation
  15656.      lines, and actual statements start at or beyond column 7.  Spaces
  15657.      generally are not significant, so if you see statements such as
  15658.      `REALX,Y' and `DO10I=1,100', you are looking at fixed-form code.
  15659.      Comment lines are indicated by the letter `C' or the symbol `*' in
  15660.      column 1.  (Some code uses `!' or `/*' to begin in-line comments,
  15661.      which many compilers support.)
  15662.      Free-form code is distinguished from fixed-form source primarily
  15663.      by the fact that statements may start anywhere.  (If lots of
  15664.      statements start in columns 1 through 6, that's a strong indicator
  15665.      of free-form source.)  Consecutive keywords must be separated by
  15666.      spaces, so `REALX,Y' is not valid, while `REAL X,Y' is.  There are
  15667.      no comment lines per se, but `!' starts a comment anywhere in a
  15668.      line (other than within a character or hollerith constant).
  15669.      *Note Source Form::, for more information.
  15670.    * The source file is in fixed form and has been edited without
  15671.      sensitivity to the column requirements.
  15672.      Statements in fixed-form code must be entirely contained within
  15673.      columns 7 through 72 on a given line.  Starting them "early" is
  15674.      more likely to result in diagnostics than finishing them "late",
  15675.      though both kinds of errors are often caught at compile time.
  15676.      For example, if the following code fragment is edited by following
  15677.      the commented instructions literally, the result, shown afterward,
  15678.      would produce a diagnostic when compiled:
  15679.           C On XYZZY systems, remove "C" on next line:
  15680.           C     CALL XYZZY_RESET
  15681.      The result of editing the above line might be:
  15682.           C On XYZZY systems, remove "C" on next line:
  15683.                CALL XYZZY_RESET
  15684.      However, that leaves the first `C' in the `CALL' statement in
  15685.      column 6, making it a comment line, which is not really what the
  15686.      author intended, and which is likely to result in one of the
  15687.      above-listed diagnostics.
  15688.      *Replacing* the `C' in column 1 with a space is the proper change
  15689.      to make, to ensure the `CALL' keyword starts in or after column 7.
  15690.      Another common mistake like this is to forget that fixed-form
  15691.      source lines are significant through only column 72, and that,
  15692.      normally, any text beyond column 72 is ignored or is diagnosed at
  15693.      compile time.
  15694.      *Note Source Form::, for more information.
  15695.    * The source file requires preprocessing, and the preprocessing is
  15696.      not being specified at compile time.
  15697.      A source file containing lines beginning with `#define',
  15698.      `#include', `#if', and so on is likely one that requires
  15699.      preprocessing.
  15700.      If the file's suffix is `.f' or `.for', the file will normally be
  15701.      compiled *without* preprocessing by `g77'.
  15702.      Change the file's suffix from `.f' to `.F' (or, on systems with
  15703.      case-insensitive file names, to `.fpp') or from `.for' to `.fpp'.
  15704.      `g77' compiles files with such names *with* preprocessing.
  15705.      Or, learn how to use `gcc''s `-x' option to specify the language
  15706.      `f77-cpp-input' for Fortran files that require preprocessing.
  15707.      *Note gcc: (Using and Porting GNU CC)Overall Options.
  15708.    * The source file is preprocessed, and the results of preprocessing
  15709.      result in syntactic errors that are not necessarily obvious to
  15710.      someone examining the source file itself.
  15711.      Examples of errors resulting from preprocessor macro expansion
  15712.      include exceeding the line-length limit, improperly starting,
  15713.      terminating, or incorporating the apostrophe or double-quote in a
  15714.      character constant, improperly forming a hollerith constant, and
  15715.      so on.
  15716.      *Note Options Controlling the Kind of Output: Overall Options, for
  15717.      suggestions about how to use, and not use, preprocessing for
  15718.      Fortran code.
  15719. File: g77.info,  Node: GLOBALS,  Prev: LEX,  Up: Diagnostics
  15720. `GLOBALS'
  15721. =========
  15722.      Global name NAME defined at ... already defined...
  15723.      Global name NAME at ... has different type...
  15724.      Too many arguments passed to NAME at ...
  15725.      Too few arguments passed to NAME at ...
  15726.      Argument #N of NAME is ...
  15727.    These messages all identify disagreements about the global procedure
  15728. named NAME among different program units (usually including NAME
  15729. itself).
  15730.    These disagreements, if not diagnosed, could result in a compiler
  15731. crash if the compiler attempted to inline a reference to NAME within a
  15732. calling program unit that disagreed with the NAME program unit
  15733. regarding whether the procedure is a subroutine or function, the type
  15734. of the return value of the procedure (if it is a function), the number
  15735. of arguments the procedure accepts, or the type of each argument.
  15736.    Such disagreements *should* be fixed in the Fortran code itself.
  15737. However, if that is not immediately practical, and the code has been
  15738. working for some time, it is possible it will work when compiled by
  15739. `g77' with the `-fno-globals' option.
  15740.    The `-fno-globals' option disables these diagnostics, and also
  15741. disables all inlining of references to global procedures to avoid
  15742. compiler crashes.  The diagnostics are actually produced, but as
  15743. warnings, unless the `-Wno-globals' option also is specified.
  15744.    After using `-fno-globals' to work around these problems, it is wise
  15745. to stop using that option and address them by fixing the Fortran code,
  15746. because such problems, while they might not actually result in bugs on
  15747. some systems, indicate that the code is not as portable as it could be.
  15748. In particular, the code might appear to work on a particular system,
  15749. but have bugs that affect the reliability of the data without
  15750. exhibiting any other outward manifestations of the bugs.
  15751. File: g77.info,  Node: Index,  Prev: Diagnostics,  Up: Top
  15752. Index
  15753. *****
  15754. * Menu:
  15755. * "infinite spaces" printed:             Strange Behavior at Run Time.
  15756. * #define:                               Overall Options.
  15757. * #if:                                   Overall Options.
  15758. * #include:                              Overall Options.
  15759. * #include directive:                    Bug Reporting.
  15760. * $:                                     Dollar Signs.
  15761. * %DESCR() construct:                    %DESCR().
  15762. * %LOC() construct:                      %LOC().
  15763. * %REF() construct:                      %REF().
  15764. * %VAL() construct:                      %VAL().
  15765. * *N notation <1>:                       Compiler Types.
  15766. * *N notation:                           Star Notation.
  15767. * --driver option <1>:                   G77 and GCC.
  15768. * --driver option:                       Invoking G77.
  15769. * -falias-check option <1>:              Code Gen Options.
  15770. * -falias-check option:                  Aliasing Assumed To Work.
  15771. * -fargument-alias option <1>:           Aliasing Assumed To Work.
  15772. * -fargument-alias option:               Code Gen Options.
  15773. * -fargument-noalias option <1>:         Code Gen Options.
  15774. * -fargument-noalias option:             Aliasing Assumed To Work.
  15775. * -fbadu77-intrinsics-delete option:     Fortran Dialect Options.
  15776. * -fbadu77-intrinsics-disable option:    Fortran Dialect Options.
  15777. * -fbadu77-intrinsics-enable option:     Fortran Dialect Options.
  15778. * -fbadu77-intrinsics-hide option:       Fortran Dialect Options.
  15779. * -fcaller-saves option:                 Optimize Options.
  15780. * -fcase-initcap option:                 Fortran Dialect Options.
  15781. * -fcase-lower option:                   Fortran Dialect Options.
  15782. * -fcase-preserve option:                Fortran Dialect Options.
  15783. * -fcase-strict-lower option:            Fortran Dialect Options.
  15784. * -fcase-strict-upper option:            Fortran Dialect Options.
  15785. * -fcase-upper option:                   Fortran Dialect Options.
  15786. * -fdebug-kludge option:                 Code Gen Options.
  15787. * -fdelayed-branch option:               Optimize Options.
  15788. * -fdollar-ok option:                    Fortran Dialect Options.
  15789. * -fexpensive-optimizations option:      Optimize Options.
  15790. * -ff2c-intrinsics-delete option:        Fortran Dialect Options.
  15791. * -ff2c-intrinsics-disable option:       Fortran Dialect Options.
  15792. * -ff2c-intrinsics-enable option:        Fortran Dialect Options.
  15793. * -ff2c-intrinsics-hide option:          Fortran Dialect Options.
  15794. * -ff2c-library option:                  Code Gen Options.
  15795. * -ff66 option:                          Shorthand Options.
  15796. * -ff77 option:                          Shorthand Options.
  15797. * -ff90 option:                          Fortran Dialect Options.
  15798. * -ff90-intrinsics-delete option:        Fortran Dialect Options.
  15799. * -ff90-intrinsics-disable option:       Fortran Dialect Options.
  15800. * -ff90-intrinsics-enable option:        Fortran Dialect Options.
  15801. * -ff90-intrinsics-hide option:          Fortran Dialect Options.
  15802. * -ffast-math option:                    Optimize Options.
  15803. * -ffixed-line-length-N option:          Fortran Dialect Options.
  15804. * -ffloat-store option:                  Optimize Options.
  15805. * -fforce-addr option:                   Optimize Options.
  15806. * -fforce-mem option:                    Optimize Options.
  15807. * -ffree-form option:                    Fortran Dialect Options.
  15808. * -fgnu-intrinsics-delete option:        Fortran Dialect Options.
  15809. * -fgnu-intrinsics-disable option:       Fortran Dialect Options.
  15810. * -fgnu-intrinsics-enable option:        Fortran Dialect Options.
  15811. * -fgnu-intrinsics-hide option:          Fortran Dialect Options.
  15812. * -fGROUP-intrinsics-hide option:        Overly Convenient Options.
  15813. * -finit-local-zero option <1>:          Code Gen Options.
  15814. * -finit-local-zero option:              Overly Convenient Options.
  15815. * -fintrin-case-any option:              Fortran Dialect Options.
  15816. * -fintrin-case-initcap option:          Fortran Dialect Options.
  15817. * -fintrin-case-lower option:            Fortran Dialect Options.
  15818. * -fintrin-case-upper option:            Fortran Dialect Options.
  15819. * -fmatch-case-any option:               Fortran Dialect Options.
  15820. * -fmatch-case-initcap option:           Fortran Dialect Options.
  15821. * -fmatch-case-lower option:             Fortran Dialect Options.
  15822. * -fmatch-case-upper option:             Fortran Dialect Options.
  15823. * -fmil-intrinsics-delete option:        Fortran Dialect Options.
  15824. * -fmil-intrinsics-disable option:       Fortran Dialect Options.
  15825. * -fmil-intrinsics-enable option:        Fortran Dialect Options.
  15826. * -fmil-intrinsics-hide option:          Fortran Dialect Options.
  15827. * -fno-argument-noalias-global option <1>: Code Gen Options.
  15828. * -fno-argument-noalias-global option:   Aliasing Assumed To Work.
  15829. * -fno-automatic option <1>:             Code Gen Options.
  15830. * -fno-automatic option:                 Overly Convenient Options.
  15831. * -fno-backslash option:                 Fortran Dialect Options.
  15832. * -fno-common option:                    Code Gen Options.
  15833. * -fno-emulate-complex option:           Code Gen Options.
  15834. * -fno-f2c option <1>:                   Avoid f2c Compatibility.
  15835. * -fno-f2c option:                       Code Gen Options.
  15836. * -fno-f77 option:                       Shorthand Options.
  15837. * -fno-fixed-form option:                Fortran Dialect Options.
  15838. * -fno-globals option:                   Code Gen Options.
  15839. * -fno-ident option:                     Code Gen Options.
  15840. * -fno-inline option:                    Optimize Options.
  15841. * -fno-move-all-movables option:         Optimize Options.
  15842. * -fno-reduce-all-givs option:           Optimize Options.
  15843. * -fno-rerun-loop-opt option:            Optimize Options.
  15844. * -fno-second-underscore:                f2c Skeletons and Prototypes.
  15845. * -fno-second-underscore option <1>:     Code Gen Options.
  15846. * -fno-second-underscore option:         Names.
  15847. * -fno-silent option:                    Overall Options.
  15848. * -fno-ugly option:                      Shorthand Options.
  15849. * -fno-ugly-args option:                 Fortran Dialect Options.
  15850. * -fno-ugly-init option:                 Fortran Dialect Options.
  15851. * -fno-underscoring option <1>:          Names.
  15852. * -fno-underscoring option:              Code Gen Options.
  15853. * -fonetrip option:                      Fortran Dialect Options.
  15854. * -fpack-struct option:                  Code Gen Options.
  15855. * -fpcc-struct-return option:            Code Gen Options.
  15856. * -fpedantic option:                     Warning Options.
  15857. * -fPIC option:                          Actual Bugs.
  15858. * -freg-struct-return option:            Code Gen Options.
  15859. * -frerun-cse-after-loop option:         Optimize Options.
  15860. * -fschedule-insns option:               Optimize Options.
  15861. * -fschedule-insns2 option:              Optimize Options.
  15862. * -fset-g77-defaults option:             Overall Options.
  15863. * -fshort-double option:                 Code Gen Options.
  15864. * -fsource-case-lower option:            Fortran Dialect Options.
  15865. * -fsource-case-preserve option:         Fortran Dialect Options.
  15866. * -fsource-case-upper option:            Fortran Dialect Options.
  15867. * -fstrength-reduce option:              Optimize Options.
  15868. * -fsymbol-case-any option:              Fortran Dialect Options.
  15869. * -fsymbol-case-initcap option:          Fortran Dialect Options.
  15870. * -fsymbol-case-lower option:            Fortran Dialect Options.
  15871. * -fsymbol-case-upper option:            Fortran Dialect Options.
  15872. * -fsyntax-only option:                  Warning Options.
  15873. * -ftypeless-boz option:                 Fortran Dialect Options.
  15874. * -fugly option <1>:                     Overly Convenient Options.
  15875. * -fugly option:                         Shorthand Options.
  15876. * -fugly-assign option:                  Fortran Dialect Options.
  15877. * -fugly-assumed option:                 Fortran Dialect Options.
  15878. * -fugly-comma option:                   Fortran Dialect Options.
  15879. * -fugly-complex option:                 Fortran Dialect Options.
  15880. * -fugly-logint option:                  Fortran Dialect Options.
  15881. * -funix-intrinsics-delete option:       Fortran Dialect Options.
  15882. * -funix-intrinsics-disable option:      Fortran Dialect Options.
  15883. * -funix-intrinsics-enable option:       Fortran Dialect Options.
  15884. * -funix-intrinsics-hide option:         Fortran Dialect Options.
  15885. * -funroll-all-loops option:             Optimize Options.
  15886. * -funroll-loops option:                 Optimize Options.
  15887. * -fversion option:                      Overall Options.
  15888. * -fvxt option:                          Fortran Dialect Options.
  15889. * -fvxt-intrinsics-delete option:        Fortran Dialect Options.
  15890. * -fvxt-intrinsics-disable option:       Fortran Dialect Options.
  15891. * -fvxt-intrinsics-enable option:        Fortran Dialect Options.
  15892. * -fvxt-intrinsics-hide option:          Fortran Dialect Options.
  15893. * -fzeros option:                        Code Gen Options.
  15894. * -g option:                             Debugging Options.
  15895. * -I- option:                            Directory Options.
  15896. * -i8:                                   Increasing Precision/Range.
  15897. * -Idir option:                          Directory Options.
  15898. * -malign-double option <1>:             Optimize Options.
  15899. * -malign-double option:                 Aligned Data.
  15900. * -Nl option:                            Compiler Limits.
  15901. * -Nx option:                            Compiler Limits.
  15902. * -O2 <1>:                               News.
  15903. * -O2:                                   Actual Bugs.
  15904. * -pedantic option:                      Warning Options.
  15905. * -pedantic-errors option:               Warning Options.
  15906. * -r8:                                   Increasing Precision/Range.
  15907. * -u option:                             Warning Options.
  15908. * -v option:                             G77 and GCC.
  15909. * -W option:                             Warning Options.
  15910. * -w option:                             Warning Options.
  15911. * -Waggregate-return option:             Warning Options.
  15912. * -Wall option:                          Warning Options.
  15913. * -Wcomment option:                      Warning Options.
  15914. * -Wconversion option:                   Warning Options.
  15915. * -Werror option:                        Warning Options.
  15916. * -Wformat option:                       Warning Options.
  15917. * -Wid-clash-LEN option:                 Warning Options.
  15918. * -Wimplicit option:                     Warning Options.
  15919. * -Wlarger-than-LEN option:              Warning Options.
  15920. * -Wno-globals option:                   Warning Options.
  15921. * -Wparentheses option:                  Warning Options.
  15922. * -Wredundant-decls option:              Warning Options.
  15923. * -Wshadow option:                       Warning Options.
  15924. * -Wsurprising option:                   Warning Options.
  15925. * -Wswitch option:                       Warning Options.
  15926. * -Wtraditional option:                  Warning Options.
  15927. * -Wuninitialized option:                Warning Options.
  15928. * -Wunused option:                       Warning Options.
  15929. * .EQV., with integer operands:          Equivalence Versus Equality.
  15930. * .F filename suffix:                    Overall Options.
  15931. * .fpp filename suffix:                  Overall Options.
  15932. * .gdbinit:                              Main Program Unit.
  15933. * .r filename suffix:                    Overall Options.
  15934. * /WARNINGS=DECLARATIONS switch:         Warning Options.
  15935. * 586/686 CPUs:                          Use Submodel Options.
  15936. * 64-bit systems:                        Alpha Problems Fixed.
  15937. * _strtoul:                              Missing strtoul.
  15938. * Abort intrinsic:                       Abort Intrinsic.
  15939. * Abs intrinsic:                         Abs Intrinsic.
  15940. * ACCEPT statement:                      TYPE and ACCEPT I/O Statements.
  15941. * Access intrinsic:                      Access Intrinsic.
  15942. * AChar intrinsic:                       AChar Intrinsic.
  15943. * ACos intrinsic:                        ACos Intrinsic.
  15944. * ACosD intrinsic:                       ACosD Intrinsic.
  15945. * adding options:                        Adding Options.
  15946. * adjustable arrays:                     Adjustable Arrays.
  15947. * AdjustL intrinsic:                     AdjustL Intrinsic.
  15948. * AdjustR intrinsic:                     AdjustR Intrinsic.
  15949. * aggregate initialization:              Large Initialization.
  15950. * AIMAG intrinsic:                       REAL() and AIMAG() of Complex.
  15951. * AImag intrinsic:                       AImag Intrinsic.
  15952. * AIMax0 intrinsic:                      AIMax0 Intrinsic.
  15953. * AIMin0 intrinsic:                      AIMin0 Intrinsic.
  15954. * AInt intrinsic:                        AInt Intrinsic.
  15955. * AJMax0 intrinsic:                      AJMax0 Intrinsic.
  15956. * AJMin0 intrinsic:                      AJMin0 Intrinsic.
  15957. * Alarm intrinsic:                       Alarm Intrinsic.
  15958. * aliasing:                              Aliasing Assumed To Work.
  15959. * aligned data:                          Aligned Data.
  15960. * aligned stack:                         Aligned Data.
  15961. * All intrinsic:                         All Intrinsic.
  15962. * all warnings:                          Warning Options.
  15963. * Allocated intrinsic:                   Allocated Intrinsic.
  15964. * ALog intrinsic:                        ALog Intrinsic.
  15965. * ALog10 intrinsic:                      ALog10 Intrinsic.
  15966. * Alpha:                                 Actual Bugs.
  15967. * Alpha, Digital:                        System-specific Problems.
  15968. * Alpha, support <1>:                    Actual Bugs.
  15969. * Alpha, support:                        Alpha Problems Fixed.
  15970. * alternate entry points:                Alternate Entry Points.
  15971. * alternate returns:                     Alternate Returns.
  15972. * ALWAYS_FLUSH <1>:                      Always Flush Output.
  15973. * ALWAYS_FLUSH:                          Output Assumed To Flush.
  15974. * AMax0 intrinsic:                       AMax0 Intrinsic.
  15975. * AMax1 intrinsic:                       AMax1 Intrinsic.
  15976. * AMin0 intrinsic:                       AMin0 Intrinsic.
  15977. * AMin1 intrinsic:                       AMin1 Intrinsic.
  15978. * AMod intrinsic:                        AMod Intrinsic.
  15979. * ampersand continuation line:           Ampersands.
  15980. * AND intrinsic:                         Bit Operations on Floating-point Data.
  15981. * And intrinsic:                         And Intrinsic.
  15982. * ANInt intrinsic:                       ANInt Intrinsic.
  15983. * ANSI FORTRAN 77 standard:              Language.
  15984. * ANSI FORTRAN 77 support:               Standard Support.
  15985. * anti-aliasing:                         Aliasing Assumed To Work.
  15986. * Any intrinsic:                         Any Intrinsic.
  15987. * arguments, null:                       Ugly Null Arguments.
  15988. * arguments, omitting:                   Ugly Null Arguments.
  15989. * arguments, unused <1>:                 Warning Options.
  15990. * arguments, unused:                     Unused Arguments.
  15991. * array bounds, adjustable:              Array Bounds Expressions.
  15992. * array elements, in adjustable array bounds: Array Bounds Expressions.
  15993. * array ordering:                        Arrays.
  15994. * arrays:                                Arrays.
  15995. * arrays, adjustable:                    Adjustable Arrays.
  15996. * arrays, assumed-size:                  Ugly Assumed-Size Arrays.
  15997. * arrays, automatic <1>:                 Overly Convenient Options.
  15998. * arrays, automatic <2>:                 Adjustable Arrays.
  15999. * arrays, automatic <3>:                 Large Automatic Arrays.
  16000. * arrays, automatic:                     Stack Overflow.
  16001. * arrays, dimensioning:                  Adjustable Arrays.
  16002. * as command:                            What is GNU Fortran?.
  16003. * ASin intrinsic:                        ASin Intrinsic.
  16004. * ASinD intrinsic:                       ASinD Intrinsic.
  16005. * assembler:                             What is GNU Fortran?.
  16006. * assembly code:                         What is GNU Fortran?.
  16007. * assembly code, invalid:                Bug Criteria.
  16008. * ASSIGN statement <1>:                  Ugly Assigned Labels.
  16009. * ASSIGN statement:                      Assigned Statement Labels.
  16010. * assigned labels:                       Ugly Assigned Labels.
  16011. * assigned statement labels:             Assigned Statement Labels.
  16012. * Associated intrinsic:                  Associated Intrinsic.
  16013. * association, storage:                  Aliasing Assumed To Work.
  16014. * assumed-size arrays:                   Ugly Assumed-Size Arrays.
  16015. * ATan intrinsic:                        ATan Intrinsic.
  16016. * ATan2 intrinsic:                       ATan2 Intrinsic.
  16017. * ATan2D intrinsic:                      ATan2D Intrinsic.
  16018. * ATanD intrinsic:                       ATanD Intrinsic.
  16019. * automatic arrays <1>:                  Overly Convenient Options.
  16020. * automatic arrays <2>:                  Large Automatic Arrays.
  16021. * automatic arrays <3>:                  Adjustable Arrays.
  16022. * automatic arrays:                      Stack Overflow.
  16023. * AXP:                                   System-specific Problems.
  16024. * back end, gcc:                         What is GNU Fortran?.
  16025. * backslash <1>:                         Backslash in Constants.
  16026. * backslash:                             Fortran Dialect Options.
  16027. * backtrace for bug reports:             Bug Reporting.
  16028. * badu77 intrinsics:                     Fortran Dialect Options.
  16029. * badu77 intrinsics group:               Intrinsic Groups.
  16030. * basic concepts:                        What is GNU Fortran?.
  16031. * beginners:                             Getting Started.
  16032. * BesJ0 intrinsic:                       BesJ0 Intrinsic.
  16033. * BesJ1 intrinsic:                       BesJ1 Intrinsic.
  16034. * BesJN intrinsic:                       BesJN Intrinsic.
  16035. * BesY0 intrinsic:                       BesY0 Intrinsic.
  16036. * BesY1 intrinsic:                       BesY1 Intrinsic.
  16037. * BesYN intrinsic:                       BesYN Intrinsic.
  16038. * binaries, distributing:                Distributing Binaries.
  16039. * bison:                                 Missing bison?.
  16040. * bit patterns:                          Floating-point Bit Patterns.
  16041. * Bit_Size intrinsic:                    Bit_Size Intrinsic.
  16042. * BITest intrinsic:                      BITest Intrinsic.
  16043. * BJTest intrinsic:                      BJTest Intrinsic.
  16044. * blanks (spaces) <1>:                   Lines.
  16045. * blanks (spaces):                       Character Set.
  16046. * block data:                            Multiple Definitions of External Names.
  16047. * block data and libraries:              Block Data and Libraries.
  16048. * BLOCK DATA statement <1>:              Multiple Definitions of External Names.
  16049. * BLOCK DATA statement:                  Block Data and Libraries.
  16050. * bootstrap build:                       Bootstrap Build.
  16051. * BTest intrinsic:                       BTest Intrinsic.
  16052. * bug criteria:                          Bug Criteria.
  16053. * bug report mailing lists:              Bug Lists.
  16054. * bugs:                                  Bugs.
  16055. * bugs, finding:                         What is GNU Fortran?.
  16056. * bugs, known:                           Trouble.
  16057. * build, bootstrap:                      Bootstrap Build.
  16058. * build, straight:                       Straight Build.
  16059. * building g77:                          Building gcc.
  16060. * building gcc <1>:                      Building GNU CC Necessary.
  16061. * building gcc:                          Building gcc.
  16062. * bus error <1>:                         Strange Behavior at Run Time.
  16063. * bus error:                             NeXTStep Problems.
  16064. * but-bugs:                              But-bugs.
  16065. * C library:                             Strange Behavior at Run Time.
  16066. * C preprocessor:                        Overall Options.
  16067. * C routines calling Fortran:            Debugging and Interfacing.
  16068. * C++:                                   C++ Considerations.
  16069. * C++, linking with:                     Interoperating with C and C++.
  16070. * C, linking with:                       Interoperating with C and C++.
  16071. * CAbs intrinsic:                        CAbs Intrinsic.
  16072. * calling C routines:                    Debugging and Interfacing.
  16073. * card image:                            Fortran Dialect Options.
  16074. * carriage returns:                      Carriage Returns.
  16075. * case sensitivity:                      Case Sensitivity.
  16076. * cc1 program:                           What is GNU Fortran?.
  16077. * cc1plus program:                       What is GNU Fortran?.
  16078. * CCos intrinsic:                        CCos Intrinsic.
  16079. * CDAbs intrinsic:                       CDAbs Intrinsic.
  16080. * CDCos intrinsic:                       CDCos Intrinsic.
  16081. * CDExp intrinsic:                       CDExp Intrinsic.
  16082. * CDLog intrinsic:                       CDLog Intrinsic.
  16083. * CDSin intrinsic:                       CDSin Intrinsic.
  16084. * CDSqRt intrinsic:                      CDSqRt Intrinsic.
  16085. * Ceiling intrinsic:                     Ceiling Intrinsic.
  16086. * CExp intrinsic:                        CExp Intrinsic.
  16087. * cfortran.h:                            C Interfacing Tools.
  16088. * changes, user-visible:                 Changes.
  16089. * Char intrinsic:                        Char Intrinsic.
  16090. * character constants <1>:               Character and Hollerith Constants.
  16091. * character constants <2>:               Fortran Dialect Options.
  16092. * character constants <3>:               Double Quote Meaning.
  16093. * character constants:                   Ugly Conversion of Initializers.
  16094. * character set:                         Fortran Dialect Options.
  16095. * CHARACTER*(*):                         More Extensions.
  16096. * CHARACTER, null:                       Character Type.
  16097. * characters:                            Character Set.
  16098. * characters, comment:                   Exclamation Point.
  16099. * characters, continuation:              Exclamation Point.
  16100. * ChDir intrinsic <1>:                   ChDir Intrinsic (subroutine).
  16101. * ChDir intrinsic:                       ChDir Intrinsic (function).
  16102. * ChMod intrinsic <1>:                   ChMod Intrinsic (function).
  16103. * ChMod intrinsic:                       ChMod Intrinsic (subroutine).
  16104. * CLog intrinsic:                        CLog Intrinsic.
  16105. * CLOSE statement:                       OPEN CLOSE and INQUIRE Keywords.
  16106. * Cmplx intrinsic:                       Cmplx Intrinsic.
  16107. * CMPLX intrinsic:                       CMPLX() of DOUBLE PRECISION.
  16108. * code generation conventions:           Code Gen Options.
  16109. * code generation, improving:            Better Optimization.
  16110. * code generator:                        What is GNU Fortran?.
  16111. * code, assembly:                        What is GNU Fortran?.
  16112. * code, displaying main source:          Actual Bugs.
  16113. * code, distributing:                    Distributing Binaries.
  16114. * code, in-line:                         What is GNU Fortran?.
  16115. * code, legacy:                          Collected Fortran Wisdom.
  16116. * code, machine:                         What is GNU Fortran?.
  16117. * code, modifying <1>:                   Unpacking.
  16118. * code, modifying:                       Overall Options.
  16119. * code, source <1>:                      Case Sensitivity.
  16120. * code, source <2>:                      Lines.
  16121. * code, source <3>:                      Source Form.
  16122. * code, source <4>:                      Unpacking.
  16123. * code, source:                          What is GNU Fortran?.
  16124. * code, stack variables:                 Maximum Stackable Size.
  16125. * code, user:                            Cannot Link Fortran Programs.
  16126. * code, writing:                         Collected Fortran Wisdom.
  16127. * column-major ordering:                 Arrays.
  16128. * columns 73 through 80:                 Better Source Model.
  16129. * command options:                       Invoking G77.
  16130. * commands, as:                          What is GNU Fortran?.
  16131. * commands, f77:                         Installing f77.
  16132. * commands, g77 <1>:                     What is GNU Fortran?.
  16133. * commands, g77:                         G77 and GCC.
  16134. * commands, gcc <1>:                     G77 and GCC.
  16135. * commands, gcc:                         What is GNU Fortran?.
  16136. * commands, gdb:                         What is GNU Fortran?.
  16137. * commands, ld:                          What is GNU Fortran?.
  16138. * commas, trailing:                      Ugly Null Arguments.
  16139. * comment character:                     Exclamation Point.
  16140. * comments, trailing:                    Statements Comments Lines.
  16141. * common blocks <1>:                     Debugging Options.
  16142. * common blocks <2>:                     Common Blocks.
  16143. * common blocks <3>:                     Actual Bugs.
  16144. * common blocks <4>:                     Mangling of Names.
  16145. * common blocks:                         Actual Bugs.
  16146. * common blocks, large:                  Large Common Blocks.
  16147. * COMMON statement <1>:                  Multiple Definitions of External Names.
  16148. * COMMON statement:                      Common Blocks.
  16149. * COMMON, layout:                        Aligned Data.
  16150. * comparing logical expressions:         Equivalence Versus Equality.
  16151. * compatibility, f2c <1>:                Shorthand Options.
  16152. * compatibility, f2c <2>:                Overall Options.
  16153. * compatibility, f2c <3>:                Block Data and Libraries.
  16154. * compatibility, f2c <4>:                Code Gen Options.
  16155. * compatibility, f2c:                    Avoid f2c Compatibility.
  16156. * compatibility, f77:                    Shorthand Options.
  16157. * compatibility, FORTRAN 66 <1>:         Fortran Dialect Options.
  16158. * compatibility, FORTRAN 66:             Shorthand Options.
  16159. * compatibility, FORTRAN 77:             Standard Support.
  16160. * compatibility, Fortran 90:             Fortran 90.
  16161. * compilation status:                    Overall Options.
  16162. * compilation, in-line:                  Optimize Options.
  16163. * compilation, pedantic:                 Pedantic Compilation.
  16164. * compiler bugs, reporting:              Bug Reporting.
  16165. * compiler limits:                       Compiler Limits.
  16166. * compiler memory usage:                 Actual Bugs.
  16167. * compiler speed:                        Actual Bugs.
  16168. * compilers:                             What is GNU Fortran?.
  16169. * compiling programs:                    G77 and GCC.
  16170. * Complex intrinsic:                     Complex Intrinsic.
  16171. * COMPLEX intrinsics:                    Fortran Dialect Options.
  16172. * COMPLEX statement:                     Complex Variables.
  16173. * COMPLEX support:                       Actual Bugs.
  16174. * complex values:                        Ugly Complex Part Extraction.
  16175. * complex variables:                     Complex Variables.
  16176. * COMPLEX(KIND=1) type:                  Compiler Types.
  16177. * COMPLEX(KIND=2) type:                  Compiler Types.
  16178. * components of g77:                     What is GNU Fortran?.
  16179. * concatenation:                         More Extensions.
  16180. * concepts, basic:                       What is GNU Fortran?.
  16181. * conformance, IEEE:                     Optimize Options.
  16182. * Conjg intrinsic:                       Conjg Intrinsic.
  16183. * constants <1>:                         Constants.
  16184. * constants:                             Compiler Constants.
  16185. * constants, character <1>:              Double Quote Meaning.
  16186. * constants, character <2>:              Character and Hollerith Constants.
  16187. * constants, character:                  Ugly Conversion of Initializers.
  16188. * constants, context-sensitive:          Context-Sensitive Constants.
  16189. * constants, Hollerith <1>:              Character and Hollerith Constants.
  16190. * constants, Hollerith <2>:              Ugly Implicit Argument Conversion.
  16191. * constants, Hollerith:                  Ugly Conversion of Initializers.
  16192. * constants, integer:                    Actual Bugs.
  16193. * constants, octal:                      Double Quote Meaning.
  16194. * constants, prefix-radix:               Fortran Dialect Options.
  16195. * constants, types:                      Fortran Dialect Options.
  16196. * construct names:                       Construct Names.
  16197. * context-sensitive constants:           Context-Sensitive Constants.
  16198. * context-sensitive intrinsics:          Context-Sensitive Intrinsicness.
  16199. * continuation character:                Exclamation Point.
  16200. * continuation line, ampersand:          Ampersands.
  16201. * continuation lines, number of:         Continuation Line.
  16202. * contributors:                          Contributors.
  16203. * conversions, nonportable:              Nonportable Conversions.
  16204. * core dump:                             Bug Criteria.
  16205. * Cos intrinsic:                         Cos Intrinsic.
  16206. * CosD intrinsic:                        CosD Intrinsic.
  16207. * CosH intrinsic:                        CosH Intrinsic.
  16208. * Count intrinsic:                       Count Intrinsic.
  16209. * cpp preprocessor:                      Overall Options.
  16210. * cpp program <1>:                       Bug Reporting.
  16211. * cpp program <2>:                       What is GNU Fortran?.
  16212. * cpp program <3>:                       Overall Options.
  16213. * cpp program:                           Preprocessor Options.
  16214. * CPU_Time intrinsic:                    CPU_Time Intrinsic.
  16215. * Cray pointers:                         POINTER Statements.
  16216. * creating patch files:                  Merging Distributions.
  16217. * credits:                               Contributors.
  16218. * cross-compiler, building:              Floating-point Bit Patterns.
  16219. * cross-compiler, problems:              Cross-compiler Problems.
  16220. * CShift intrinsic:                      CShift Intrinsic.
  16221. * CSin intrinsic:                        CSin Intrinsic.
  16222. * CSqRt intrinsic:                       CSqRt Intrinsic.
  16223. * CTime intrinsic <1>:                   CTime Intrinsic (subroutine).
  16224. * CTime intrinsic:                       CTime Intrinsic (function).
  16225. * DAbs intrinsic:                        DAbs Intrinsic.
  16226. * DACos intrinsic:                       DACos Intrinsic.
  16227. * DACosD intrinsic:                      DACosD Intrinsic.
  16228. * DASin intrinsic:                       DASin Intrinsic.
  16229. * DASinD intrinsic:                      DASinD Intrinsic.
  16230. * DATA statement <1>:                    Actual Bugs.
  16231. * DATA statement:                        Code Gen Options.
  16232. * data types:                            Compiler Types.
  16233. * data, aligned:                         Aligned Data.
  16234. * data, overwritten:                     Strange Behavior at Run Time.
  16235. * DATan intrinsic:                       DATan Intrinsic.
  16236. * DATan2 intrinsic:                      DATan2 Intrinsic.
  16237. * DATan2D intrinsic:                     DATan2D Intrinsic.
  16238. * DATanD intrinsic:                      DATanD Intrinsic.
  16239. * Date intrinsic:                        Date Intrinsic.
  16240. * Date_and_Time intrinsic:               Date_and_Time Intrinsic.
  16241. * DbesJ0 intrinsic:                      DbesJ0 Intrinsic.
  16242. * DbesJ1 intrinsic:                      DbesJ1 Intrinsic.
  16243. * DbesJN intrinsic:                      DbesJN Intrinsic.
  16244. * DbesY0 intrinsic:                      DbesY0 Intrinsic.
  16245. * DbesY1 intrinsic:                      DbesY1 Intrinsic.
  16246. * DbesYN intrinsic:                      DbesYN Intrinsic.
  16247. * Dble intrinsic:                        Dble Intrinsic.
  16248. * DbleQ intrinsic:                       DbleQ Intrinsic.
  16249. * DCmplx intrinsic:                      DCmplx Intrinsic.
  16250. * DConjg intrinsic:                      DConjg Intrinsic.
  16251. * DCos intrinsic:                        DCos Intrinsic.
  16252. * DCosD intrinsic:                       DCosD Intrinsic.
  16253. * DCosH intrinsic:                       DCosH Intrinsic.
  16254. * DDiM intrinsic:                        DDiM Intrinsic.
  16255. * debug line:                            Debug Line.
  16256. * debug_rtx:                             Bug Reporting.
  16257. * debugger <1>:                          Actual Bugs.
  16258. * debugger:                              What is GNU Fortran?.
  16259. * debugging <1>:                         Actual Bugs.
  16260. * debugging <2>:                         Names.
  16261. * debugging <3>:                         Main Program Unit.
  16262. * debugging:                             Debugging and Interfacing.
  16263. * debugging information options:         Debugging Options.
  16264. * debugging main source code:            Actual Bugs.
  16265. * DEC Alpha:                             System-specific Problems.
  16266. * DECODE statement:                      ENCODE and DECODE.
  16267. * deleted intrinsics:                    Intrinsic Groups.
  16268. * DErF intrinsic:                        DErF Intrinsic.
  16269. * DErFC intrinsic:                       DErFC Intrinsic.
  16270. * DExp intrinsic:                        DExp Intrinsic.
  16271. * DFloat intrinsic:                      DFloat Intrinsic.
  16272. * DFlotI intrinsic:                      DFlotI Intrinsic.
  16273. * DFlotJ intrinsic:                      DFlotJ Intrinsic.
  16274. * diagnostics:                           Diagnostics.
  16275. * diagnostics, incorrect:                What is GNU Fortran?.
  16276. * dialect options:                       Fortran Dialect Options.
  16277. * differences between object files:      Object File Differences.
  16278. * Digital Alpha:                         System-specific Problems.
  16279. * Digital Fortran features:              Fortran Dialect Options.
  16280. * Digits intrinsic:                      Digits Intrinsic.
  16281. * DiM intrinsic:                         DiM Intrinsic.
  16282. * DImag intrinsic:                       DImag Intrinsic.
  16283. * DIMENSION statement <1>:               Arrays.
  16284. * DIMENSION statement <2>:               Adjustable Arrays.
  16285. * DIMENSION statement:                   Array Bounds Expressions.
  16286. * DIMENSION X(1):                        Ugly Assumed-Size Arrays.
  16287. * dimensioning arrays:                   Adjustable Arrays.
  16288. * DInt intrinsic:                        DInt Intrinsic.
  16289. * direction of language development:     Direction of Language Development.
  16290. * directive, #include:                   Bug Reporting.
  16291. * directive, INCLUDE <1>:                Bug Reporting.
  16292. * directive, INCLUDE <2>:                Preprocessor Options.
  16293. * directive, INCLUDE:                    Directory Options.
  16294. * directory options:                     Directory Options.
  16295. * directory search paths for inclusion:  Directory Options.
  16296. * directory, updating info:              Updating Documentation.
  16297. * disabled intrinsics:                   Intrinsic Groups.
  16298. * disk full <1>:                         Output Assumed To Flush.
  16299. * disk full:                             Always Flush Output.
  16300. * displaying main source code:           Actual Bugs.
  16301. * disposition of files:                  OPEN CLOSE and INQUIRE Keywords.
  16302. * distensions:                           Distensions.
  16303. * distributions, unpacking:              Unpacking.
  16304. * distributions, why separate:           Merging Distributions.
  16305. * DLog intrinsic:                        DLog Intrinsic.
  16306. * DLog10 intrinsic:                      DLog10 Intrinsic.
  16307. * DMax1 intrinsic:                       DMax1 Intrinsic.
  16308. * DMin1 intrinsic:                       DMin1 Intrinsic.
  16309. * DMod intrinsic:                        DMod Intrinsic.
  16310. * DNInt intrinsic:                       DNInt Intrinsic.
  16311. * DNRM2:                                 News.
  16312. * DO loops, one-trip:                    Fortran Dialect Options.
  16313. * DO statement <1>:                      Loops.
  16314. * DO statement:                          Warning Options.
  16315. * DO WHILE:                              DO WHILE.
  16316. * documentation:                         Updating Documentation.
  16317. * dollar sign <1>:                       Dollar Signs.
  16318. * dollar sign:                           Fortran Dialect Options.
  16319. * Dot_Product intrinsic:                 Dot_Product Intrinsic.
  16320. * DOUBLE COMPLEX:                        DOUBLE COMPLEX.
  16321. * DOUBLE COMPLEX type:                   Compiler Types.
  16322. * DOUBLE PRECISION type:                 Compiler Types.
  16323. * double quotes:                         Double Quote Meaning.
  16324. * DProd intrinsic:                       DProd Intrinsic.
  16325. * DReal intrinsic:                       DReal Intrinsic.
  16326. * driver, gcc command as:                What is GNU Fortran?.
  16327. * DSign intrinsic:                       DSign Intrinsic.
  16328. * DSin intrinsic:                        DSin Intrinsic.
  16329. * DSinD intrinsic:                       DSinD Intrinsic.
  16330. * DSinH intrinsic:                       DSinH Intrinsic.
  16331. * DSqRt intrinsic:                       DSqRt Intrinsic.
  16332. * DTan intrinsic:                        DTan Intrinsic.
  16333. * DTanD intrinsic:                       DTanD Intrinsic.
  16334. * DTanH intrinsic:                       DTanH Intrinsic.
  16335. * Dtime intrinsic <1>:                   Dtime Intrinsic (function).
  16336. * Dtime intrinsic:                       Dtime Intrinsic (subroutine).
  16337. * dummies, unused:                       Warning Options.
  16338. * effecting IMPLICIT NONE:               Warning Options.
  16339. * efficiency:                            Efficiency.
  16340. * ELF support:                           Actual Bugs.
  16341. * empty CHARACTER strings:               Character Type.
  16342. * enabled intrinsics:                    Intrinsic Groups.
  16343. * ENCODE statement:                      ENCODE and DECODE.
  16344. * END DO:                                END DO.
  16345. * entry points:                          Alternate Entry Points.
  16346. * ENTRY statement:                       Alternate Entry Points.
  16347. * environment variables:                 Environment Variables.
  16348. * EOShift intrinsic:                     EOShift Intrinsic.
  16349. * Epsilon intrinsic:                     Epsilon Intrinsic.
  16350. * equivalence areas <1>:                 Actual Bugs.
  16351. * equivalence areas <2>:                 Debugging Options.
  16352. * equivalence areas <3>:                 Local Equivalence Areas.
  16353. * equivalence areas:                     Actual Bugs.
  16354. * EQUIVALENCE statement:                 Local Equivalence Areas.
  16355. * ErF intrinsic:                         ErF Intrinsic.
  16356. * ErFC intrinsic:                        ErFC Intrinsic.
  16357. * error messages <1>:                    Run-time Library Errors.
  16358. * error messages:                        Warnings and Errors.
  16359. * error messages, incorrect:             What is GNU Fortran?.
  16360. * error values:                          Run-time Library Errors.
  16361. * errors, linker:                        Large Common Blocks.
  16362. * ETime intrinsic <1>:                   ETime Intrinsic (subroutine).
  16363. * ETime intrinsic:                       ETime Intrinsic (function).
  16364. * exceptions, floating point:            Floating-point Exception Handling.
  16365. * exclamation points:                    Exclamation Point.
  16366. * executable file:                       What is GNU Fortran?.
  16367. * Exit intrinsic:                        Exit Intrinsic.
  16368. * Exp intrinsic:                         Exp Intrinsic.
  16369. * Exponent intrinsic:                    Exponent Intrinsic.
  16370. * extended-source option:                Fortran Dialect Options.
  16371. * extensions, file name:                 Overall Options.
  16372. * extensions, more:                      More Extensions.
  16373. * extensions, VXT:                       VXT Fortran.
  16374. * external names:                        Mangling of Names.
  16375. * extra warnings:                        Warning Options.
  16376. * f2c:                                   Increasing Precision/Range.
  16377. * f2c compatibility <1>:                 Debugging and Interfacing.
  16378. * f2c compatibility <2>:                 Block Data and Libraries.
  16379. * f2c compatibility <3>:                 Shorthand Options.
  16380. * f2c compatibility <4>:                 Avoid f2c Compatibility.
  16381. * f2c compatibility <5>:                 Code Gen Options.
  16382. * f2c compatibility:                     Overall Options.
  16383. * f2c intrinsics:                        Fortran Dialect Options.
  16384. * f2c intrinsics group:                  Intrinsic Groups.
  16385. * F2C_INSTALL_FLAG:                      Installing f2c.
  16386. * F2CLIBOK:                              Installing f2c.
  16387. * f77 command:                           Installing f77.
  16388. * f77 compatibility:                     Shorthand Options.
  16389. * f77 support:                           Backslash in Constants.
  16390. * f771 program:                          What is GNU Fortran?.
  16391. * f771, linking error for:               Missing strtoul.
  16392. * F77_INSTALL_FLAG:                      Installing f77.
  16393. * f90 intrinsics group:                  Intrinsic Groups.
  16394. * fatal signal:                          Bug Criteria.
  16395. * Fdate intrinsic <1>:                   Fdate Intrinsic (function).
  16396. * Fdate intrinsic:                       Fdate Intrinsic (subroutine).
  16397. * features, language:                    Direction of Language Development.
  16398. * features, ugly <1>:                    Shorthand Options.
  16399. * features, ugly <2>:                    Distensions.
  16400. * features, ugly:                        Shorthand Options.
  16401. * FFE:                                   What is GNU Fortran?.
  16402. * FFECOM_sizeMAXSTACKITEM:               Maximum Stackable Size.
  16403. * fflush() <1>:                          Always Flush Output.
  16404. * fflush():                              Output Assumed To Flush.
  16405. * FGet intrinsic <1>:                    FGet Intrinsic (subroutine).
  16406. * FGet intrinsic:                        FGet Intrinsic (function).
  16407. * FGetC intrinsic <1>:                   FGetC Intrinsic (subroutine).
  16408. * FGetC intrinsic:                       FGetC Intrinsic (function).
  16409. * file format not recognized:            What is GNU Fortran?.
  16410. * file name extension:                   Overall Options.
  16411. * file name suffix:                      Overall Options.
  16412. * file type:                             Overall Options.
  16413. * file, source:                          What is GNU Fortran?.
  16414. * files, executable:                     What is GNU Fortran?.
  16415. * files, source <1>:                     Lines.
  16416. * files, source:                         Source Form.
  16417. * fixed form <1>:                        Lines.
  16418. * fixed form <2>:                        Fortran Dialect Options.
  16419. * fixed form:                            Source Form.
  16420. * fixed-form line length:                Fortran Dialect Options.
  16421. * Float intrinsic:                       Float Intrinsic.
  16422. * FloatI intrinsic:                      FloatI Intrinsic.
  16423. * floating point exceptions:             Floating-point Exception Handling.
  16424. * floating-point bit patterns:           Floating-point Bit Patterns.
  16425. * floating-point errors:                 Floating-point Errors.
  16426. * FloatJ intrinsic:                      FloatJ Intrinsic.
  16427. * Floor intrinsic:                       Floor Intrinsic.
  16428. * Flush intrinsic:                       Flush Intrinsic.
  16429. * flushing output <1>:                   Output Assumed To Flush.
  16430. * flushing output:                       Always Flush Output.
  16431. * FNum intrinsic:                        FNum Intrinsic.
  16432. * FORMAT statement <1>:                  Expressions in FORMAT Statements.
  16433. * FORMAT statement:                      Q Edit Descriptor.
  16434. * FORTRAN 66 <1>:                        Fortran Dialect Options.
  16435. * FORTRAN 66:                            Shorthand Options.
  16436. * FORTRAN 77 compatibility:              Standard Support.
  16437. * Fortran 90 compatibility:              Fortran 90.
  16438. * Fortran 90 features:                   Fortran Dialect Options.
  16439. * Fortran 90 intrinsics:                 Fortran Dialect Options.
  16440. * Fortran 90 support:                    Fortran 90 Support.
  16441. * Fortran preprocessor:                  Overall Options.
  16442. * FPE handling:                          Floating-point Exception Handling.
  16443. * FPut intrinsic <1>:                    FPut Intrinsic (function).
  16444. * FPut intrinsic:                        FPut Intrinsic (subroutine).
  16445. * FPutC intrinsic <1>:                   FPutC Intrinsic (function).
  16446. * FPutC intrinsic:                       FPutC Intrinsic (subroutine).
  16447. * Fraction intrinsic:                    Fraction Intrinsic.
  16448. * free form <1>:                         Fortran Dialect Options.
  16449. * free form <2>:                         Lines.
  16450. * free form:                             Source Form.
  16451. * front end, g77:                        What is GNU Fortran?.
  16452. * FSeek intrinsic:                       FSeek Intrinsic.
  16453. * FSF, funding the:                      Funding GNU Fortran.
  16454. * FStat intrinsic <1>:                   FStat Intrinsic (subroutine).
  16455. * FStat intrinsic:                       FStat Intrinsic (function).
  16456. * FTell intrinsic <1>:                   FTell Intrinsic (function).
  16457. * FTell intrinsic:                       FTell Intrinsic (subroutine).
  16458. * function references, in adjustable array bounds: Array Bounds Expressions.
  16459. * FUNCTION statement <1>:                Functions.
  16460. * FUNCTION statement:                    Procedures.
  16461. * functions:                             Functions.
  16462. * functions, mistyped:                   Not My Type.
  16463. * funding improvements:                  Funding GNU Fortran.
  16464. * funding the FSF:                       Funding GNU Fortran.
  16465. * g77 command <1>:                       G77 and GCC.
  16466. * g77 command:                           What is GNU Fortran?.
  16467. * g77 front end:                         What is GNU Fortran?.
  16468. * g77 options, --driver <1>:             Invoking G77.
  16469. * g77 options, --driver:                 G77 and GCC.
  16470. * g77 options, -v:                       G77 and GCC.
  16471. * g77 version number:                    Merging Distributions.
  16472. * g77, components of:                    What is GNU Fortran?.
  16473. * g77, installation of:                  Installation of Binaries.
  16474. * GBE <1>:                               Patching GNU CC Necessary.
  16475. * GBE:                                   What is GNU Fortran?.
  16476. * gcc back end:                          What is GNU Fortran?.
  16477. * gcc command <1>:                       What is GNU Fortran?.
  16478. * gcc command:                           G77 and GCC.
  16479. * gcc command as driver:                 What is GNU Fortran?.
  16480. * gcc not recognizing Fortran source:    What is GNU Fortran?.
  16481. * gcc version numbering:                 Merging Distributions.
  16482. * gcc versions supported by g77:         Merging Distributions.
  16483. * gcc will not compile Fortran programs: Where to Install.
  16484. * gcc, building:                         Building GNU CC Necessary.
  16485. * gcc, installation of:                  Installation of Binaries.
  16486. * gdb command:                           What is GNU Fortran?.
  16487. * gdb support:                           Debugger Problems.
  16488. * generic intrinsics:                    Generics and Specifics.
  16489. * GError intrinsic:                      GError Intrinsic.
  16490. * GetArg intrinsic:                      GetArg Intrinsic.
  16491. * GETARG() intrinsic:                    Main Program Unit.
  16492. * GetCWD intrinsic <1>:                  GetCWD Intrinsic (function).
  16493. * GetCWD intrinsic:                      GetCWD Intrinsic (subroutine).
  16494. * GetEnv intrinsic:                      GetEnv Intrinsic.
  16495. * GetGId intrinsic:                      GetGId Intrinsic.
  16496. * GetLog intrinsic:                      GetLog Intrinsic.
  16497. * GetPId intrinsic:                      GetPId Intrinsic.
  16498. * getting started:                       Getting Started.
  16499. * GetUId intrinsic:                      GetUId Intrinsic.
  16500. * global names, warning <1>:             Warning Options.
  16501. * global names, warning:                 Code Gen Options.
  16502. * GMTime intrinsic:                      GMTime Intrinsic.
  16503. * GNU Back End (GBE):                    What is GNU Fortran?.
  16504. * GNU C required:                        GNU C Required.
  16505. * GNU Fortran command options:           Invoking G77.
  16506. * GNU Fortran Front End (FFE):           What is GNU Fortran?.
  16507. * gnu intrinsics group:                  Intrinsic Groups.
  16508. * GNU version numbering:                 Merging Distributions.
  16509. * GOTO statement:                        Assigned Statement Labels.
  16510. * gperf:                                 Missing gperf?.
  16511. * groups of intrinsics:                  Intrinsic Groups.
  16512. * hardware errors:                       Signal 11 and Friends.
  16513. * hidden intrinsics:                     Intrinsic Groups.
  16514. * Hollerith constants <1>:               Ugly Conversion of Initializers.
  16515. * Hollerith constants <2>:               Ugly Implicit Argument Conversion.
  16516. * Hollerith constants <3>:               Fortran Dialect Options.
  16517. * Hollerith constants:                   Character and Hollerith Constants.
  16518. * HostNm intrinsic <1>:                  HostNm Intrinsic (function).
  16519. * HostNm intrinsic:                      HostNm Intrinsic (subroutine).
  16520. * Huge intrinsic:                        Huge Intrinsic.
  16521. * I/O, errors:                           Run-time Library Errors.
  16522. * I/O, flushing <1>:                     Always Flush Output.
  16523. * I/O, flushing:                         Output Assumed To Flush.
  16524. * IAbs intrinsic:                        IAbs Intrinsic.
  16525. * IAChar intrinsic:                      IAChar Intrinsic.
  16526. * IAnd intrinsic:                        IAnd Intrinsic.
  16527. * IArgC intrinsic:                       IArgC Intrinsic.
  16528. * IARGC() intrinsic:                     Main Program Unit.
  16529. * IBClr intrinsic:                       IBClr Intrinsic.
  16530. * IBits intrinsic:                       IBits Intrinsic.
  16531. * IBSet intrinsic:                       IBSet Intrinsic.
  16532. * IChar intrinsic:                       IChar Intrinsic.
  16533. * IDate intrinsic <1>:                   IDate Intrinsic (UNIX).
  16534. * IDate intrinsic:                       IDate Intrinsic (VXT).
  16535. * IDiM intrinsic:                        IDiM Intrinsic.
  16536. * IDInt intrinsic:                       IDInt Intrinsic.
  16537. * IDNInt intrinsic:                      IDNInt Intrinsic.
  16538. * IEEE conformance:                      Optimize Options.
  16539. * IEOr intrinsic:                        IEOr Intrinsic.
  16540. * IErrNo intrinsic:                      IErrNo Intrinsic.
  16541. * IFix intrinsic:                        IFix Intrinsic.
  16542. * IIAbs intrinsic:                       IIAbs Intrinsic.
  16543. * IIAnd intrinsic:                       IIAnd Intrinsic.
  16544. * IIBClr intrinsic:                      IIBClr Intrinsic.
  16545. * IIBits intrinsic:                      IIBits Intrinsic.
  16546. * IIBSet intrinsic:                      IIBSet Intrinsic.
  16547. * IIDiM intrinsic:                       IIDiM Intrinsic.
  16548. * IIDInt intrinsic:                      IIDInt Intrinsic.
  16549. * IIDNnt intrinsic:                      IIDNnt Intrinsic.
  16550. * IIEOr intrinsic:                       IIEOr Intrinsic.
  16551. * IIFix intrinsic:                       IIFix Intrinsic.
  16552. * IInt intrinsic:                        IInt Intrinsic.
  16553. * IIOr intrinsic:                        IIOr Intrinsic.
  16554. * IIQint intrinsic:                      IIQint Intrinsic.
  16555. * IIQNnt intrinsic:                      IIQNnt Intrinsic.
  16556. * IIShftC intrinsic:                     IIShftC Intrinsic.
  16557. * IISign intrinsic:                      IISign Intrinsic.
  16558. * illegal unit number <1>:               Larger File Unit Numbers.
  16559. * illegal unit number:                   Large File Unit Numbers.
  16560. * Imag intrinsic:                        Imag Intrinsic.
  16561. * imaginary part:                        Ugly Complex Part Extraction.
  16562. * imaginary part of complex:             Complex Variables.
  16563. * ImagPart intrinsic:                    ImagPart Intrinsic.
  16564. * IMax0 intrinsic:                       IMax0 Intrinsic.
  16565. * IMax1 intrinsic:                       IMax1 Intrinsic.
  16566. * IMin0 intrinsic:                       IMin0 Intrinsic.
  16567. * IMin1 intrinsic:                       IMin1 Intrinsic.
  16568. * IMod intrinsic:                        IMod Intrinsic.
  16569. * IMPLICIT CHARACTER*(*) statement:      Limitation on Implicit Declarations.
  16570. * implicit declaration, warning:         Warning Options.
  16571. * IMPLICIT NONE, similar effect:         Warning Options.
  16572. * implicit typing:                       Not My Type.
  16573. * improvements, funding:                 Funding GNU Fortran.
  16574. * in-line code:                          What is GNU Fortran?.
  16575. * in-line compilation:                   Optimize Options.
  16576. * INCLUDE:                               INCLUDE.
  16577. * INCLUDE directive <1>:                 Preprocessor Options.
  16578. * INCLUDE directive <2>:                 Bug Reporting.
  16579. * INCLUDE directive:                     Directory Options.
  16580. * included files:                        Bug Reporting.
  16581. * inclusion, directory search paths for: Directory Options.
  16582. * inconsistent floating-point results:   Floating-point Errors.
  16583. * incorrect diagnostics:                 What is GNU Fortran?.
  16584. * incorrect error messages:              What is GNU Fortran?.
  16585. * incorrect use of language:             What is GNU Fortran?.
  16586. * increasing maximum unit number <1>:    Large File Unit Numbers.
  16587. * increasing maximum unit number:        Larger File Unit Numbers.
  16588. * increasing precision:                  Increasing Precision/Range.
  16589. * increasing range:                      Increasing Precision/Range.
  16590. * Index intrinsic:                       Index Intrinsic.
  16591. * info, updating directory:              Updating Documentation.
  16592. * INInt intrinsic:                       INInt Intrinsic.
  16593. * initialization:                        Actual Bugs.
  16594. * initialization of local variables:     Code Gen Options.
  16595. * initialization, runtime:               Startup Code.
  16596. * initialization, statement placement:   Initializing Before Specifying.
  16597. * INot intrinsic:                        INot Intrinsic.
  16598. * INQUIRE statement:                     OPEN CLOSE and INQUIRE Keywords.
  16599. * installation of binaries:              Installation of Binaries.
  16600. * installation problems:                 Problems Installing.
  16601. * installation trouble:                  Trouble.
  16602. * installing GNU Fortran:                Installation.
  16603. * installing, checking before:           Pre-installation Checks.
  16604. * Int intrinsic:                         Int Intrinsic.
  16605. * Int2 intrinsic:                        Int2 Intrinsic.
  16606. * Int8 intrinsic:                        Int8 Intrinsic.
  16607. * integer constants:                     Actual Bugs.
  16608. * INTEGER(KIND=1) type:                  Compiler Types.
  16609. * INTEGER(KIND=2) type:                  Compiler Types.
  16610. * INTEGER(KIND=3) type:                  Compiler Types.
  16611. * INTEGER(KIND=6) type:                  Compiler Types.
  16612. * INTEGER*2 support:                     Popular Non-standard Types.
  16613. * interfacing:                           Debugging and Interfacing.
  16614. * intrinsics, Abort:                     Abort Intrinsic.
  16615. * intrinsics, Abs:                       Abs Intrinsic.
  16616. * intrinsics, Access:                    Access Intrinsic.
  16617. * intrinsics, AChar:                     AChar Intrinsic.
  16618. * intrinsics, ACos:                      ACos Intrinsic.
  16619. * intrinsics, ACosD:                     ACosD Intrinsic.
  16620. * intrinsics, AdjustL:                   AdjustL Intrinsic.
  16621. * intrinsics, AdjustR:                   AdjustR Intrinsic.
  16622. * intrinsics, AIMAG:                     REAL() and AIMAG() of Complex.
  16623. * intrinsics, AImag:                     AImag Intrinsic.
  16624. * intrinsics, AIMax0:                    AIMax0 Intrinsic.
  16625. * intrinsics, AIMin0:                    AIMin0 Intrinsic.
  16626. * intrinsics, AInt:                      AInt Intrinsic.
  16627. * intrinsics, AJMax0:                    AJMax0 Intrinsic.
  16628. * intrinsics, AJMin0:                    AJMin0 Intrinsic.
  16629. * intrinsics, Alarm:                     Alarm Intrinsic.
  16630. * intrinsics, All:                       All Intrinsic.
  16631. * intrinsics, Allocated:                 Allocated Intrinsic.
  16632. * intrinsics, ALog:                      ALog Intrinsic.
  16633. * intrinsics, ALog10:                    ALog10 Intrinsic.
  16634. * intrinsics, AMax0:                     AMax0 Intrinsic.
  16635. * intrinsics, AMax1:                     AMax1 Intrinsic.
  16636. * intrinsics, AMin0:                     AMin0 Intrinsic.
  16637. * intrinsics, AMin1:                     AMin1 Intrinsic.
  16638. * intrinsics, AMod:                      AMod Intrinsic.
  16639. * intrinsics, AND:                       Bit Operations on Floating-point Data.
  16640. * intrinsics, And:                       And Intrinsic.
  16641. * intrinsics, ANInt:                     ANInt Intrinsic.
  16642. * intrinsics, Any:                       Any Intrinsic.
  16643. * intrinsics, ASin:                      ASin Intrinsic.
  16644. * intrinsics, ASinD:                     ASinD Intrinsic.
  16645. * intrinsics, Associated:                Associated Intrinsic.
  16646. * intrinsics, ATan:                      ATan Intrinsic.
  16647. * intrinsics, ATan2:                     ATan2 Intrinsic.
  16648. * intrinsics, ATan2D:                    ATan2D Intrinsic.
  16649. * intrinsics, ATanD:                     ATanD Intrinsic.
  16650. * intrinsics, badu77:                    Fortran Dialect Options.
  16651. * intrinsics, BesJ0:                     BesJ0 Intrinsic.
  16652. * intrinsics, BesJ1:                     BesJ1 Intrinsic.
  16653. * intrinsics, BesJN:                     BesJN Intrinsic.
  16654. * intrinsics, BesY0:                     BesY0 Intrinsic.
  16655. * intrinsics, BesY1:                     BesY1 Intrinsic.
  16656. * intrinsics, BesYN:                     BesYN Intrinsic.
  16657. * intrinsics, Bit_Size:                  Bit_Size Intrinsic.
  16658. * intrinsics, BITest:                    BITest Intrinsic.
  16659. * intrinsics, BJTest:                    BJTest Intrinsic.
  16660. * intrinsics, BTest:                     BTest Intrinsic.
  16661. * intrinsics, CAbs:                      CAbs Intrinsic.
  16662. * intrinsics, CCos:                      CCos Intrinsic.
  16663. * intrinsics, CDAbs:                     CDAbs Intrinsic.
  16664. * intrinsics, CDCos:                     CDCos Intrinsic.
  16665. * intrinsics, CDExp:                     CDExp Intrinsic.
  16666. * intrinsics, CDLog:                     CDLog Intrinsic.
  16667. * intrinsics, CDSin:                     CDSin Intrinsic.
  16668. * intrinsics, CDSqRt:                    CDSqRt Intrinsic.
  16669. * intrinsics, Ceiling:                   Ceiling Intrinsic.
  16670. * intrinsics, CExp:                      CExp Intrinsic.
  16671. * intrinsics, Char:                      Char Intrinsic.
  16672. * intrinsics, ChDir <1>:                 ChDir Intrinsic (function).
  16673. * intrinsics, ChDir:                     ChDir Intrinsic (subroutine).
  16674. * intrinsics, ChMod <1>:                 ChMod Intrinsic (subroutine).
  16675. * intrinsics, ChMod:                     ChMod Intrinsic (function).
  16676. * intrinsics, CLog:                      CLog Intrinsic.
  16677. * intrinsics, CMPLX:                     CMPLX() of DOUBLE PRECISION.
  16678. * intrinsics, Cmplx:                     Cmplx Intrinsic.
  16679. * intrinsics, COMPLEX:                   Fortran Dialect Options.
  16680. * intrinsics, Complex:                   Complex Intrinsic.
  16681. * intrinsics, Conjg:                     Conjg Intrinsic.
  16682. * intrinsics, context-sensitive:         Context-Sensitive Intrinsicness.
  16683. * intrinsics, Cos:                       Cos Intrinsic.
  16684. * intrinsics, CosD:                      CosD Intrinsic.
  16685. * intrinsics, CosH:                      CosH Intrinsic.
  16686. * intrinsics, Count:                     Count Intrinsic.
  16687. * intrinsics, CPU_Time:                  CPU_Time Intrinsic.
  16688. * intrinsics, CShift:                    CShift Intrinsic.
  16689. * intrinsics, CSin:                      CSin Intrinsic.
  16690. * intrinsics, CSqRt:                     CSqRt Intrinsic.
  16691. * intrinsics, CTime <1>:                 CTime Intrinsic (subroutine).
  16692. * intrinsics, CTime:                     CTime Intrinsic (function).
  16693. * intrinsics, DAbs:                      DAbs Intrinsic.
  16694. * intrinsics, DACos:                     DACos Intrinsic.
  16695. * intrinsics, DACosD:                    DACosD Intrinsic.
  16696. * intrinsics, DASin:                     DASin Intrinsic.
  16697. * intrinsics, DASinD:                    DASinD Intrinsic.
  16698. * intrinsics, DATan:                     DATan Intrinsic.
  16699. * intrinsics, DATan2:                    DATan2 Intrinsic.
  16700. * intrinsics, DATan2D:                   DATan2D Intrinsic.
  16701. * intrinsics, DATanD:                    DATanD Intrinsic.
  16702. * intrinsics, Date:                      Date Intrinsic.
  16703. * intrinsics, Date_and_Time:             Date_and_Time Intrinsic.
  16704. * intrinsics, DbesJ0:                    DbesJ0 Intrinsic.
  16705. * intrinsics, DbesJ1:                    DbesJ1 Intrinsic.
  16706. * intrinsics, DbesJN:                    DbesJN Intrinsic.
  16707. * intrinsics, DbesY0:                    DbesY0 Intrinsic.
  16708. * intrinsics, DbesY1:                    DbesY1 Intrinsic.
  16709. * intrinsics, DbesYN:                    DbesYN Intrinsic.
  16710. * intrinsics, Dble:                      Dble Intrinsic.
  16711. * intrinsics, DbleQ:                     DbleQ Intrinsic.
  16712. * intrinsics, DCmplx:                    DCmplx Intrinsic.
  16713. * intrinsics, DConjg:                    DConjg Intrinsic.
  16714. * intrinsics, DCos:                      DCos Intrinsic.
  16715. * intrinsics, DCosD:                     DCosD Intrinsic.
  16716. * intrinsics, DCosH:                     DCosH Intrinsic.
  16717. * intrinsics, DDiM:                      DDiM Intrinsic.
  16718. * intrinsics, deleted:                   Intrinsic Groups.
  16719. * intrinsics, DErF:                      DErF Intrinsic.
  16720. * intrinsics, DErFC:                     DErFC Intrinsic.
  16721. * intrinsics, DExp:                      DExp Intrinsic.
  16722. * intrinsics, DFloat:                    DFloat Intrinsic.
  16723. * intrinsics, DFlotI:                    DFlotI Intrinsic.
  16724. * intrinsics, DFlotJ:                    DFlotJ Intrinsic.
  16725. * intrinsics, Digits:                    Digits Intrinsic.
  16726. * intrinsics, DiM:                       DiM Intrinsic.
  16727. * intrinsics, DImag:                     DImag Intrinsic.
  16728. * intrinsics, DInt:                      DInt Intrinsic.
  16729. * intrinsics, disabled:                  Intrinsic Groups.
  16730. * intrinsics, DLog:                      DLog Intrinsic.
  16731. * intrinsics, DLog10:                    DLog10 Intrinsic.
  16732. * intrinsics, DMax1:                     DMax1 Intrinsic.
  16733. * intrinsics, DMin1:                     DMin1 Intrinsic.
  16734. * intrinsics, DMod:                      DMod Intrinsic.
  16735. * intrinsics, DNInt:                     DNInt Intrinsic.
  16736. * intrinsics, Dot_Product:               Dot_Product Intrinsic.
  16737. * intrinsics, DProd:                     DProd Intrinsic.
  16738. * intrinsics, DReal:                     DReal Intrinsic.
  16739. * intrinsics, DSign:                     DSign Intrinsic.
  16740. * intrinsics, DSin:                      DSin Intrinsic.
  16741. * intrinsics, DSinD:                     DSinD Intrinsic.
  16742. * intrinsics, DSinH:                     DSinH Intrinsic.
  16743. * intrinsics, DSqRt:                     DSqRt Intrinsic.
  16744. * intrinsics, DTan:                      DTan Intrinsic.
  16745. * intrinsics, DTanD:                     DTanD Intrinsic.
  16746. * intrinsics, DTanH:                     DTanH Intrinsic.
  16747. * intrinsics, Dtime <1>:                 Dtime Intrinsic (function).
  16748. * intrinsics, Dtime:                     Dtime Intrinsic (subroutine).
  16749. * intrinsics, enabled:                   Intrinsic Groups.
  16750. * intrinsics, EOShift:                   EOShift Intrinsic.
  16751. * intrinsics, Epsilon:                   Epsilon Intrinsic.
  16752. * intrinsics, ErF:                       ErF Intrinsic.
  16753. * intrinsics, ErFC:                      ErFC Intrinsic.
  16754. * intrinsics, ETime <1>:                 ETime Intrinsic (subroutine).
  16755. * intrinsics, ETime:                     ETime Intrinsic (function).
  16756. * intrinsics, Exit:                      Exit Intrinsic.
  16757. * intrinsics, Exp:                       Exp Intrinsic.
  16758. * intrinsics, Exponent:                  Exponent Intrinsic.
  16759. * intrinsics, f2c:                       Fortran Dialect Options.
  16760. * intrinsics, Fdate <1>:                 Fdate Intrinsic (function).
  16761. * intrinsics, Fdate:                     Fdate Intrinsic (subroutine).
  16762. * intrinsics, FGet <1>:                  FGet Intrinsic (subroutine).
  16763. * intrinsics, FGet:                      FGet Intrinsic (function).
  16764. * intrinsics, FGetC <1>:                 FGetC Intrinsic (subroutine).
  16765. * intrinsics, FGetC:                     FGetC Intrinsic (function).
  16766. * intrinsics, Float:                     Float Intrinsic.
  16767. * intrinsics, FloatI:                    FloatI Intrinsic.
  16768. * intrinsics, FloatJ:                    FloatJ Intrinsic.
  16769. * intrinsics, Floor:                     Floor Intrinsic.
  16770. * intrinsics, Flush:                     Flush Intrinsic.
  16771. * intrinsics, FNum:                      FNum Intrinsic.
  16772. * intrinsics, Fortran 90:                Fortran Dialect Options.
  16773. * intrinsics, FPut <1>:                  FPut Intrinsic (function).
  16774. * intrinsics, FPut:                      FPut Intrinsic (subroutine).
  16775. * intrinsics, FPutC <1>:                 FPutC Intrinsic (subroutine).
  16776. * intrinsics, FPutC:                     FPutC Intrinsic (function).
  16777. * intrinsics, Fraction:                  Fraction Intrinsic.
  16778. * intrinsics, FSeek:                     FSeek Intrinsic.
  16779. * intrinsics, FStat <1>:                 FStat Intrinsic (subroutine).
  16780. * intrinsics, FStat:                     FStat Intrinsic (function).
  16781. * intrinsics, FTell <1>:                 FTell Intrinsic (subroutine).
  16782. * intrinsics, FTell:                     FTell Intrinsic (function).
  16783. * intrinsics, generic:                   Generics and Specifics.
  16784. * intrinsics, GError:                    GError Intrinsic.
  16785. * intrinsics, GetArg:                    GetArg Intrinsic.
  16786. * intrinsics, GETARG():                  Main Program Unit.
  16787. * intrinsics, GetCWD <1>:                GetCWD Intrinsic (function).
  16788. * intrinsics, GetCWD:                    GetCWD Intrinsic (subroutine).
  16789. * intrinsics, GetEnv:                    GetEnv Intrinsic.
  16790. * intrinsics, GetGId:                    GetGId Intrinsic.
  16791. * intrinsics, GetLog:                    GetLog Intrinsic.
  16792. * intrinsics, GetPId:                    GetPId Intrinsic.
  16793. * intrinsics, GetUId:                    GetUId Intrinsic.
  16794. * intrinsics, GMTime:                    GMTime Intrinsic.
  16795. * intrinsics, groups:                    Intrinsic Groups.
  16796. * intrinsics, groups of:                 Intrinsic Groups.
  16797. * intrinsics, hidden:                    Intrinsic Groups.
  16798. * intrinsics, HostNm <1>:                HostNm Intrinsic (subroutine).
  16799. * intrinsics, HostNm:                    HostNm Intrinsic (function).
  16800. * intrinsics, Huge:                      Huge Intrinsic.
  16801. * intrinsics, IAbs:                      IAbs Intrinsic.
  16802. * intrinsics, IAChar:                    IAChar Intrinsic.
  16803. * intrinsics, IAnd:                      IAnd Intrinsic.
  16804. * intrinsics, IArgC:                     IArgC Intrinsic.
  16805. * intrinsics, IARGC():                   Main Program Unit.
  16806. * intrinsics, IBClr:                     IBClr Intrinsic.
  16807. * intrinsics, IBits:                     IBits Intrinsic.
  16808. * intrinsics, IBSet:                     IBSet Intrinsic.
  16809. * intrinsics, IChar:                     IChar Intrinsic.
  16810. * intrinsics, IDate <1>:                 IDate Intrinsic (VXT).
  16811. * intrinsics, IDate:                     IDate Intrinsic (UNIX).
  16812. * intrinsics, IDiM:                      IDiM Intrinsic.
  16813. * intrinsics, IDInt:                     IDInt Intrinsic.
  16814. * intrinsics, IDNInt:                    IDNInt Intrinsic.
  16815. * intrinsics, IEOr:                      IEOr Intrinsic.
  16816. * intrinsics, IErrNo:                    IErrNo Intrinsic.
  16817. * intrinsics, IFix:                      IFix Intrinsic.
  16818. * intrinsics, IIAbs:                     IIAbs Intrinsic.
  16819. * intrinsics, IIAnd:                     IIAnd Intrinsic.
  16820. * intrinsics, IIBClr:                    IIBClr Intrinsic.
  16821. * intrinsics, IIBits:                    IIBits Intrinsic.
  16822. * intrinsics, IIBSet:                    IIBSet Intrinsic.
  16823. * intrinsics, IIDiM:                     IIDiM Intrinsic.
  16824. * intrinsics, IIDInt:                    IIDInt Intrinsic.
  16825. * intrinsics, IIDNnt:                    IIDNnt Intrinsic.
  16826. * intrinsics, IIEOr:                     IIEOr Intrinsic.
  16827. * intrinsics, IIFix:                     IIFix Intrinsic.
  16828. * intrinsics, IInt:                      IInt Intrinsic.
  16829. * intrinsics, IIOr:                      IIOr Intrinsic.
  16830. * intrinsics, IIQint:                    IIQint Intrinsic.
  16831. * intrinsics, IIQNnt:                    IIQNnt Intrinsic.
  16832. * intrinsics, IIShftC:                   IIShftC Intrinsic.
  16833. * intrinsics, IISign:                    IISign Intrinsic.
  16834. * intrinsics, Imag:                      Imag Intrinsic.
  16835. * intrinsics, ImagPart:                  ImagPart Intrinsic.
  16836. * intrinsics, IMax0:                     IMax0 Intrinsic.
  16837. * intrinsics, IMax1:                     IMax1 Intrinsic.
  16838. * intrinsics, IMin0:                     IMin0 Intrinsic.
  16839. * intrinsics, IMin1:                     IMin1 Intrinsic.
  16840. * intrinsics, IMod:                      IMod Intrinsic.
  16841. * intrinsics, Index:                     Index Intrinsic.
  16842. * intrinsics, INInt:                     INInt Intrinsic.
  16843. * intrinsics, INot:                      INot Intrinsic.
  16844. * intrinsics, Int:                       Int Intrinsic.
  16845. * intrinsics, Int2:                      Int2 Intrinsic.
  16846. * intrinsics, Int8:                      Int8 Intrinsic.
  16847. * intrinsics, IOr:                       IOr Intrinsic.
  16848. * intrinsics, IRand:                     IRand Intrinsic.
  16849. * intrinsics, IsaTty:                    IsaTty Intrinsic.
  16850. * intrinsics, IShft:                     IShft Intrinsic.
  16851. * intrinsics, IShftC:                    IShftC Intrinsic.
  16852. * intrinsics, ISign:                     ISign Intrinsic.
  16853. * intrinsics, ITime:                     ITime Intrinsic.
  16854. * intrinsics, IZExt:                     IZExt Intrinsic.
  16855. * intrinsics, JIAbs:                     JIAbs Intrinsic.
  16856. * intrinsics, JIAnd:                     JIAnd Intrinsic.
  16857. * intrinsics, JIBClr:                    JIBClr Intrinsic.
  16858. * intrinsics, JIBits:                    JIBits Intrinsic.
  16859. * intrinsics, JIBSet:                    JIBSet Intrinsic.
  16860. * intrinsics, JIDiM:                     JIDiM Intrinsic.
  16861. * intrinsics, JIDInt:                    JIDInt Intrinsic.
  16862. * intrinsics, JIDNnt:                    JIDNnt Intrinsic.
  16863. * intrinsics, JIEOr:                     JIEOr Intrinsic.
  16864. * intrinsics, JIFix:                     JIFix Intrinsic.
  16865. * intrinsics, JInt:                      JInt Intrinsic.
  16866. * intrinsics, JIOr:                      JIOr Intrinsic.
  16867. * intrinsics, JIQint:                    JIQint Intrinsic.
  16868. * intrinsics, JIQNnt:                    JIQNnt Intrinsic.
  16869. * intrinsics, JIShft:                    JIShft Intrinsic.
  16870. * intrinsics, JIShftC:                   JIShftC Intrinsic.
  16871. * intrinsics, JISign:                    JISign Intrinsic.
  16872. * intrinsics, JMax0:                     JMax0 Intrinsic.
  16873. * intrinsics, JMax1:                     JMax1 Intrinsic.
  16874. * intrinsics, JMin0:                     JMin0 Intrinsic.
  16875. * intrinsics, JMin1:                     JMin1 Intrinsic.
  16876. * intrinsics, JMod:                      JMod Intrinsic.
  16877. * intrinsics, JNInt:                     JNInt Intrinsic.
  16878. * intrinsics, JNot:                      JNot Intrinsic.
  16879. * intrinsics, JZExt:                     JZExt Intrinsic.
  16880. * intrinsics, Kill <1>:                  Kill Intrinsic (function).
  16881. * intrinsics, Kill:                      Kill Intrinsic (subroutine).
  16882. * intrinsics, Kind:                      Kind Intrinsic.
  16883. * intrinsics, LBound:                    LBound Intrinsic.
  16884. * intrinsics, Len:                       Len Intrinsic.
  16885. * intrinsics, Len_Trim:                  Len_Trim Intrinsic.
  16886. * intrinsics, LGe:                       LGe Intrinsic.
  16887. * intrinsics, LGt:                       LGt Intrinsic.
  16888. * intrinsics, Link <1>:                  Link Intrinsic (subroutine).
  16889. * intrinsics, Link:                      Link Intrinsic (function).
  16890. * intrinsics, LLe:                       LLe Intrinsic.
  16891. * intrinsics, LLt:                       LLt Intrinsic.
  16892. * intrinsics, LnBlnk:                    LnBlnk Intrinsic.
  16893. * intrinsics, Loc:                       Loc Intrinsic.
  16894. * intrinsics, Log:                       Log Intrinsic.
  16895. * intrinsics, Log10:                     Log10 Intrinsic.
  16896. * intrinsics, Logical:                   Logical Intrinsic.
  16897. * intrinsics, Long:                      Long Intrinsic.
  16898. * intrinsics, LShift:                    LShift Intrinsic.
  16899. * intrinsics, LStat <1>:                 LStat Intrinsic (subroutine).
  16900. * intrinsics, LStat:                     LStat Intrinsic (function).
  16901. * intrinsics, LTime:                     LTime Intrinsic.
  16902. * intrinsics, MatMul:                    MatMul Intrinsic.
  16903. * intrinsics, Max:                       Max Intrinsic.
  16904. * intrinsics, Max0:                      Max0 Intrinsic.
  16905. * intrinsics, Max1:                      Max1 Intrinsic.
  16906. * intrinsics, MaxExponent:               MaxExponent Intrinsic.
  16907. * intrinsics, MaxLoc:                    MaxLoc Intrinsic.
  16908. * intrinsics, MaxVal:                    MaxVal Intrinsic.
  16909. * intrinsics, MClock:                    MClock Intrinsic.
  16910. * intrinsics, MClock8:                   MClock8 Intrinsic.
  16911. * intrinsics, Merge:                     Merge Intrinsic.
  16912. * intrinsics, MIL-STD 1753:              Fortran Dialect Options.
  16913. * intrinsics, Min:                       Min Intrinsic.
  16914. * intrinsics, Min0:                      Min0 Intrinsic.
  16915. * intrinsics, Min1:                      Min1 Intrinsic.
  16916. * intrinsics, MinExponent:               MinExponent Intrinsic.
  16917. * intrinsics, MinLoc:                    MinLoc Intrinsic.
  16918. * intrinsics, MinVal:                    MinVal Intrinsic.
  16919. * intrinsics, Mod:                       Mod Intrinsic.
  16920. * intrinsics, Modulo:                    Modulo Intrinsic.
  16921. * intrinsics, MvBits:                    MvBits Intrinsic.
  16922. * intrinsics, Nearest:                   Nearest Intrinsic.
  16923. * intrinsics, NInt:                      NInt Intrinsic.
  16924. * intrinsics, Not:                       Not Intrinsic.
  16925. * intrinsics, Or:                        Or Intrinsic.
  16926. * intrinsics, OR:                        Bit Operations on Floating-point Data.
  16927. * intrinsics, others:                    Other Intrinsics.
  16928. * intrinsics, Pack:                      Pack Intrinsic.
  16929. * intrinsics, PError:                    PError Intrinsic.
  16930. * intrinsics, Precision:                 Precision Intrinsic.
  16931. * intrinsics, Present:                   Present Intrinsic.
  16932. * intrinsics, Product:                   Product Intrinsic.
  16933. * intrinsics, QAbs:                      QAbs Intrinsic.
  16934. * intrinsics, QACos:                     QACos Intrinsic.
  16935. * intrinsics, QACosD:                    QACosD Intrinsic.
  16936. * intrinsics, QASin:                     QASin Intrinsic.
  16937. * intrinsics, QASinD:                    QASinD Intrinsic.
  16938. * intrinsics, QATan:                     QATan Intrinsic.
  16939. * intrinsics, QATan2:                    QATan2 Intrinsic.
  16940. * intrinsics, QATan2D:                   QATan2D Intrinsic.
  16941. * intrinsics, QATanD:                    QATanD Intrinsic.
  16942. * intrinsics, QCos:                      QCos Intrinsic.
  16943. * intrinsics, QCosD:                     QCosD Intrinsic.
  16944. * intrinsics, QCosH:                     QCosH Intrinsic.
  16945. * intrinsics, QDiM:                      QDiM Intrinsic.
  16946. * intrinsics, QExp:                      QExp Intrinsic.
  16947. * intrinsics, QExt:                      QExt Intrinsic.
  16948. * intrinsics, QExtD:                     QExtD Intrinsic.
  16949. * intrinsics, QFloat:                    QFloat Intrinsic.
  16950. * intrinsics, QInt:                      QInt Intrinsic.
  16951. * intrinsics, QLog:                      QLog Intrinsic.
  16952. * intrinsics, QLog10:                    QLog10 Intrinsic.
  16953. * intrinsics, QMax1:                     QMax1 Intrinsic.
  16954. * intrinsics, QMin1:                     QMin1 Intrinsic.
  16955. * intrinsics, QMod:                      QMod Intrinsic.
  16956. * intrinsics, QNInt:                     QNInt Intrinsic.
  16957. * intrinsics, QSin:                      QSin Intrinsic.
  16958. * intrinsics, QSinD:                     QSinD Intrinsic.
  16959. * intrinsics, QSinH:                     QSinH Intrinsic.
  16960. * intrinsics, QSqRt:                     QSqRt Intrinsic.
  16961. * intrinsics, QTan:                      QTan Intrinsic.
  16962. * intrinsics, QTanD:                     QTanD Intrinsic.
  16963. * intrinsics, QTanH:                     QTanH Intrinsic.
  16964. * intrinsics, Radix:                     Radix Intrinsic.
  16965. * intrinsics, Rand:                      Rand Intrinsic.
  16966. * intrinsics, Random_Number:             Random_Number Intrinsic.
  16967. * intrinsics, Random_Seed:               Random_Seed Intrinsic.
  16968. * intrinsics, Range:                     Range Intrinsic.
  16969. * intrinsics, Real:                      Real Intrinsic.
  16970. * intrinsics, REAL:                      REAL() and AIMAG() of Complex.
  16971. * intrinsics, RealPart:                  RealPart Intrinsic.
  16972. * intrinsics, Rename <1>:                Rename Intrinsic (function).
  16973. * intrinsics, Rename:                    Rename Intrinsic (subroutine).
  16974. * intrinsics, Repeat:                    Repeat Intrinsic.
  16975. * intrinsics, Reshape:                   Reshape Intrinsic.
  16976. * intrinsics, RRSpacing:                 RRSpacing Intrinsic.
  16977. * intrinsics, RShift:                    RShift Intrinsic.
  16978. * intrinsics, Scale:                     Scale Intrinsic.
  16979. * intrinsics, Scan:                      Scan Intrinsic.
  16980. * intrinsics, Secnds:                    Secnds Intrinsic.
  16981. * intrinsics, Second <1>:                Second Intrinsic (subroutine).
  16982. * intrinsics, Second:                    Second Intrinsic (function).
  16983. * intrinsics, Selected_Int_Kind:         Selected_Int_Kind Intrinsic.
  16984. * intrinsics, Selected_Real_Kind:        Selected_Real_Kind Intrinsic.
  16985. * intrinsics, Set_Exponent:              Set_Exponent Intrinsic.
  16986. * intrinsics, Shape:                     Shape Intrinsic.
  16987. * intrinsics, SHIFT:                     Bit Operations on Floating-point Data.
  16988. * intrinsics, Short:                     Short Intrinsic.
  16989. * intrinsics, Sign:                      Sign Intrinsic.
  16990. * intrinsics, Signal <1>:                Signal Intrinsic (subroutine).
  16991. * intrinsics, Signal:                    Signal Intrinsic (function).
  16992. * intrinsics, Sin:                       Sin Intrinsic.
  16993. * intrinsics, SinD:                      SinD Intrinsic.
  16994. * intrinsics, SinH:                      SinH Intrinsic.
  16995. * intrinsics, Sleep:                     Sleep Intrinsic.
  16996. * intrinsics, Sngl:                      Sngl Intrinsic.
  16997. * intrinsics, SnglQ:                     SnglQ Intrinsic.
  16998. * intrinsics, Spacing:                   Spacing Intrinsic.
  16999. * intrinsics, Spread:                    Spread Intrinsic.
  17000. * intrinsics, SqRt:                      SqRt Intrinsic.
  17001. * intrinsics, SRand:                     SRand Intrinsic.
  17002. * intrinsics, Stat <1>:                  Stat Intrinsic (subroutine).
  17003. * intrinsics, Stat:                      Stat Intrinsic (function).
  17004. * intrinsics, Sum:                       Sum Intrinsic.
  17005. * intrinsics, SymLnk <1>:                SymLnk Intrinsic (function).
  17006. * intrinsics, SymLnk:                    SymLnk Intrinsic (subroutine).
  17007. * intrinsics, System <1>:                System Intrinsic (subroutine).
  17008. * intrinsics, System:                    System Intrinsic (function).
  17009. * intrinsics, System_Clock:              System_Clock Intrinsic.
  17010. * intrinsics, table of:                  Table of Intrinsic Functions.
  17011. * intrinsics, Tan:                       Tan Intrinsic.
  17012. * intrinsics, TanD:                      TanD Intrinsic.
  17013. * intrinsics, TanH:                      TanH Intrinsic.
  17014. * intrinsics, Time <1>:                  Time Intrinsic (UNIX).
  17015. * intrinsics, Time:                      Time Intrinsic (VXT).
  17016. * intrinsics, Time8:                     Time8 Intrinsic.
  17017. * intrinsics, Tiny:                      Tiny Intrinsic.
  17018. * intrinsics, Transfer:                  Transfer Intrinsic.
  17019. * intrinsics, Transpose:                 Transpose Intrinsic.
  17020. * intrinsics, Trim:                      Trim Intrinsic.
  17021. * intrinsics, TtyNam <1>:                TtyNam Intrinsic (subroutine).
  17022. * intrinsics, TtyNam:                    TtyNam Intrinsic (function).
  17023. * intrinsics, UBound:                    UBound Intrinsic.
  17024. * intrinsics, UMask <1>:                 UMask Intrinsic (subroutine).
  17025. * intrinsics, UMask:                     UMask Intrinsic (function).
  17026. * intrinsics, UNIX:                      Fortran Dialect Options.
  17027. * intrinsics, Unlink <1>:                Unlink Intrinsic (function).
  17028. * intrinsics, Unlink:                    Unlink Intrinsic (subroutine).
  17029. * intrinsics, Unpack:                    Unpack Intrinsic.
  17030. * intrinsics, Verify:                    Verify Intrinsic.
  17031. * intrinsics, VXT:                       Fortran Dialect Options.
  17032. * intrinsics, XOr:                       XOr Intrinsic.
  17033. * intrinsics, ZAbs:                      ZAbs Intrinsic.
  17034. * intrinsics, ZCos:                      ZCos Intrinsic.
  17035. * intrinsics, ZExp:                      ZExp Intrinsic.
  17036. * intrinsics, ZExt:                      ZExt Intrinsic.
  17037. * intrinsics, ZLog:                      ZLog Intrinsic.
  17038. * intrinsics, ZSin:                      ZSin Intrinsic.
  17039. * intrinsics, ZSqRt:                     ZSqRt Intrinsic.
  17040. * Introduction:                          Top.
  17041. * invalid assembly code:                 Bug Criteria.
  17042. * invalid input:                         Bug Criteria.
  17043. * IOr intrinsic:                         IOr Intrinsic.
  17044. * IOSTAT=:                               Run-time Library Errors.
  17045. * IRand intrinsic:                       IRand Intrinsic.
  17046. * Irix 6:                                System-specific Problems.
  17047. * IsaTty intrinsic:                      IsaTty Intrinsic.
  17048. * IShft intrinsic:                       IShft Intrinsic.
  17049. * IShftC intrinsic:                      IShftC Intrinsic.
  17050. * ISign intrinsic:                       ISign Intrinsic.
  17051. * ITime intrinsic:                       ITime Intrinsic.
  17052. * ix86:                                  News.
  17053. * IZExt intrinsic:                       IZExt Intrinsic.
  17054. * JCB002 program:                        Generics and Specifics.
  17055. * JCB003 program:                        CMPAMBIG.
  17056. * JIAbs intrinsic:                       JIAbs Intrinsic.
  17057. * JIAnd intrinsic:                       JIAnd Intrinsic.
  17058. * JIBClr intrinsic:                      JIBClr Intrinsic.
  17059. * JIBits intrinsic:                      JIBits Intrinsic.
  17060. * JIBSet intrinsic:                      JIBSet Intrinsic.
  17061. * JIDiM intrinsic:                       JIDiM Intrinsic.
  17062. * JIDInt intrinsic:                      JIDInt Intrinsic.
  17063. * JIDNnt intrinsic:                      JIDNnt Intrinsic.
  17064. * JIEOr intrinsic:                       JIEOr Intrinsic.
  17065. * JIFix intrinsic:                       JIFix Intrinsic.
  17066. * JInt intrinsic:                        JInt Intrinsic.
  17067. * JIOr intrinsic:                        JIOr Intrinsic.
  17068. * JIQint intrinsic:                      JIQint Intrinsic.
  17069. * JIQNnt intrinsic:                      JIQNnt Intrinsic.
  17070. * JIShft intrinsic:                      JIShft Intrinsic.
  17071. * JIShftC intrinsic:                     JIShftC Intrinsic.
  17072. * JISign intrinsic:                      JISign Intrinsic.
  17073. * JMax0 intrinsic:                       JMax0 Intrinsic.
  17074. * JMax1 intrinsic:                       JMax1 Intrinsic.
  17075. * JMin0 intrinsic:                       JMin0 Intrinsic.
  17076. * JMin1 intrinsic:                       JMin1 Intrinsic.
  17077. * JMod intrinsic:                        JMod Intrinsic.
  17078. * JNInt intrinsic:                       JNInt Intrinsic.
  17079. * JNot intrinsic:                        JNot Intrinsic.
  17080. * JZExt intrinsic:                       JZExt Intrinsic.
  17081. * keywords, RECURSIVE:                   RECURSIVE Keyword.
  17082. * Kill intrinsic <1>:                    Kill Intrinsic (subroutine).
  17083. * Kill intrinsic:                        Kill Intrinsic (function).
  17084. * Kind intrinsic:                        Kind Intrinsic.
  17085. * KIND= notation:                        Kind Notation.
  17086. * known causes of trouble:               Trouble.
  17087. * lack of recursion:                     RECURSIVE Keyword.
  17088. * language dialect options:              Fortran Dialect Options.
  17089. * language f77 not recognized:           Where to Install.
  17090. * language features:                     Direction of Language Development.
  17091. * language, incorrect use of:            What is GNU Fortran?.
  17092. * LANGUAGES:                             Building gcc.
  17093. * large aggregate areas:                 Actual Bugs.
  17094. * large common blocks:                   Large Common Blocks.
  17095. * large initialization:                  Large Initialization.
  17096. * layout of common blocks:               Aligned Data.
  17097. * LBound intrinsic:                      LBound Intrinsic.
  17098. * ld can't find _main:                   Cannot Link Fortran Programs.
  17099. * ld can't find _strtoul:                Missing strtoul.
  17100. * ld can't find strange names:           Cannot Link Fortran Programs.
  17101. * ld command:                            What is GNU Fortran?.
  17102. * ld error for f771:                     Missing strtoul.
  17103. * ld error for user code:                Cannot Link Fortran Programs.
  17104. * ld errors:                             Large Common Blocks.
  17105. * legacy code:                           Collected Fortran Wisdom.
  17106. * Len intrinsic:                         Len Intrinsic.
  17107. * Len_Trim intrinsic:                    Len_Trim Intrinsic.
  17108. * length of source lines:                Fortran Dialect Options.
  17109. * letters, lowercase:                    Case Sensitivity.
  17110. * letters, uppercase:                    Case Sensitivity.
  17111. * LGe intrinsic:                         LGe Intrinsic.
  17112. * LGt intrinsic:                         LGt Intrinsic.
  17113. * libc, non-ANSI or non-default:         Strange Behavior at Run Time.
  17114. * libf2c library:                        What is GNU Fortran?.
  17115. * libraries:                             What is GNU Fortran?.
  17116. * libraries, containing BLOCK DATA:      Block Data and Libraries.
  17117. * libraries, libf2c:                     What is GNU Fortran?.
  17118. * limits on continuation lines:          Continuation Line.
  17119. * limits, compiler:                      Compiler Limits.
  17120. * line length:                           Fortran Dialect Options.
  17121. * lines:                                 Lines.
  17122. * lines, continuation:                   Continuation Line.
  17123. * lines, long:                           Long Lines.
  17124. * lines, short:                          Short Lines.
  17125. * Link intrinsic <1>:                    Link Intrinsic (subroutine).
  17126. * Link intrinsic:                        Link Intrinsic (function).
  17127. * linker errors:                         Large Common Blocks.
  17128. * linking:                               What is GNU Fortran?.
  17129. * linking against non-standard library:  Strange Behavior at Run Time.
  17130. * linking error for f771:                Missing strtoul.
  17131. * linking error for user code:           Cannot Link Fortran Programs.
  17132. * linking with C:                        Interoperating with C and C++.
  17133. * LLe intrinsic:                         LLe Intrinsic.
  17134. * LLt intrinsic:                         LLt Intrinsic.
  17135. * LnBlnk intrinsic:                      LnBlnk Intrinsic.
  17136. * Loc intrinsic:                         Loc Intrinsic.
  17137. * local equivalence areas <1>:           Actual Bugs.
  17138. * local equivalence areas:               Local Equivalence Areas.
  17139. * Log intrinsic:                         Log Intrinsic.
  17140. * Log10 intrinsic:                       Log10 Intrinsic.
  17141. * logical expressions, comparing:        Equivalence Versus Equality.
  17142. * Logical intrinsic:                     Logical Intrinsic.
  17143. * LOGICAL(KIND=1) type:                  Compiler Types.
  17144. * LOGICAL(KIND=2) type:                  Compiler Types.
  17145. * LOGICAL(KIND=3) type:                  Compiler Types.
  17146. * LOGICAL(KIND=6) type:                  Compiler Types.
  17147. * LOGICAL*1 support:                     Popular Non-standard Types.
  17148. * Long intrinsic:                        Long Intrinsic.
  17149. * long source lines:                     Long Lines.
  17150. * loops, speeding up:                    Optimize Options.
  17151. * loops, unrolling:                      Optimize Options.
  17152. * lowercase letters:                     Case Sensitivity.
  17153. * LShift intrinsic:                      LShift Intrinsic.
  17154. * LStat intrinsic <1>:                   LStat Intrinsic (function).
  17155. * LStat intrinsic:                       LStat Intrinsic (subroutine).
  17156. * LTime intrinsic:                       LTime Intrinsic.
  17157. * machine code:                          What is GNU Fortran?.
  17158. * macro options:                         Shorthand Options.
  17159. * main program unit, debugging:          Main Program Unit.
  17160. * main():                                Main Program Unit.
  17161. * MAIN__():                              Main Program Unit.
  17162. * make clean:                            Cleanup Kills Stage Directories.
  17163. * make compare:                          Object File Differences.
  17164. * Makefile example:                      Bug Criteria.
  17165. * makeinfo:                              Missing makeinfo?.
  17166. * MAP statement:                         STRUCTURE UNION RECORD MAP.
  17167. * MatMul intrinsic:                      MatMul Intrinsic.
  17168. * Max intrinsic:                         Max Intrinsic.
  17169. * Max0 intrinsic:                        Max0 Intrinsic.
  17170. * Max1 intrinsic:                        Max1 Intrinsic.
  17171. * MaxExponent intrinsic:                 MaxExponent Intrinsic.
  17172. * maximum number of dimensions:          Compiler Limits.
  17173. * maximum rank:                          Compiler Limits.
  17174. * maximum stackable size:                Maximum Stackable Size.
  17175. * maximum unit number <1>:               Larger File Unit Numbers.
  17176. * maximum unit number:                   Large File Unit Numbers.
  17177. * MaxLoc intrinsic:                      MaxLoc Intrinsic.
  17178. * MaxVal intrinsic:                      MaxVal Intrinsic.
  17179. * MClock intrinsic:                      MClock Intrinsic.
  17180. * MClock8 intrinsic:                     MClock8 Intrinsic.
  17181. * memory usage, of compiler:             Actual Bugs.
  17182. * memory utilization:                    Large Initialization.
  17183. * Merge intrinsic:                       Merge Intrinsic.
  17184. * merging distributions:                 Merging Distributions.
  17185. * messages, run-time:                    Run-time Library Errors.
  17186. * messages, warning:                     Warning Options.
  17187. * messages, warning and error:           Warnings and Errors.
  17188. * mil intrinsics group:                  Intrinsic Groups.
  17189. * MIL-STD 1753 <1>:                      Fortran Dialect Options.
  17190. * MIL-STD 1753 <2>:                      END DO.
  17191. * MIL-STD 1753 <3>:                      DO WHILE.
  17192. * MIL-STD 1753:                          MIL-STD 1753.
  17193. * Min intrinsic:                         Min Intrinsic.
  17194. * Min0 intrinsic:                        Min0 Intrinsic.
  17195. * Min1 intrinsic:                        Min1 Intrinsic.
  17196. * MinExponent intrinsic:                 MinExponent Intrinsic.
  17197. * MinLoc intrinsic:                      MinLoc Intrinsic.
  17198. * MinVal intrinsic:                      MinVal Intrinsic.
  17199. * missing bison:                         Missing bison?.
  17200. * missing debug features:                Debugging Options.
  17201. * missing gperf:                         Missing gperf?.
  17202. * missing makeinfo:                      Missing makeinfo?.
  17203. * mistakes:                              What is GNU Fortran?.
  17204. * mistyped functions:                    Not My Type.
  17205. * mistyped variables:                    Not My Type.
  17206. * Mod intrinsic:                         Mod Intrinsic.
  17207. * modifying g77 <1>:                     Overall Options.
  17208. * modifying g77:                         Unpacking.
  17209. * Modulo intrinsic:                      Modulo Intrinsic.
  17210. * MvBits intrinsic:                      MvBits Intrinsic.
  17211. * MXUNIT <1>:                            Large File Unit Numbers.
  17212. * MXUNIT:                                Larger File Unit Numbers.
  17213. * name space:                            Mangling of Names.
  17214. * NAMELIST statement:                    NAMELIST.
  17215. * naming conflicts:                      Multiple Definitions of External Names.
  17216. * naming issues:                         Mangling of Names.
  17217. * naming programs test:                  Nothing Happens.
  17218. * NaN values:                            Floating-point Exception Handling.
  17219. * native compiler:                       Installing f77.
  17220. * Nearest intrinsic:                     Nearest Intrinsic.
  17221. * negative forms of options:             Invoking G77.
  17222. * Netlib <1>:                            C Interfacing Tools.
  17223. * Netlib:                                Increasing Precision/Range.
  17224. * network file system <1>:               Always Flush Output.
  17225. * network file system:                   Output Assumed To Flush.
  17226. * new users:                             Getting Started.
  17227. * newbies:                               Getting Started.
  17228. * NeXTStep problems:                     NeXTStep Problems.
  17229. * NFS <1>:                               Always Flush Output.
  17230. * NFS:                                   Output Assumed To Flush.
  17231. * NInt intrinsic:                        NInt Intrinsic.
  17232. * nonportable conversions:               Nonportable Conversions.
  17233. * Not intrinsic:                         Not Intrinsic.
  17234. * nothing happens:                       Nothing Happens.
  17235. * null arguments:                        Ugly Null Arguments.
  17236. * null byte, trailing:                   Character and Hollerith Constants.
  17237. * null CHARACTER strings:                Character Type.
  17238. * number of continuation lines:          Continuation Line.
  17239. * number of dimensions, maximum:         Compiler Limits.
  17240. * number of trips:                       Loops.
  17241. * object file, differences:              Object File Differences.
  17242. * octal constants:                       Double Quote Meaning.
  17243. * omitting arguments:                    Ugly Null Arguments.
  17244. * one-trip DO loops:                     Fortran Dialect Options.
  17245. * OPEN statement:                        OPEN CLOSE and INQUIRE Keywords.
  17246. * optimization, better:                  Better Optimization.
  17247. * optimizations, Pentium <1>:            Aligned Data.
  17248. * optimizations, Pentium <2>:            Unpacking.
  17249. * optimizations, Pentium:                Use Submodel Options.
  17250. * optimize options:                      Optimize Options.
  17251. * options to control warnings:           Warning Options.
  17252. * options, --driver <1>:                 Invoking G77.
  17253. * options, --driver:                     G77 and GCC.
  17254. * options, -falias-check <1>:            Code Gen Options.
  17255. * options, -falias-check:                Aliasing Assumed To Work.
  17256. * options, -fargument-alias <1>:         Code Gen Options.
  17257. * options, -fargument-alias:             Aliasing Assumed To Work.
  17258. * options, -fargument-noalias <1>:       Code Gen Options.
  17259. * options, -fargument-noalias:           Aliasing Assumed To Work.
  17260. * options, -fbadu77-intrinsics-delete:   Fortran Dialect Options.
  17261. * options, -fbadu77-intrinsics-disable:  Fortran Dialect Options.
  17262. * options, -fbadu77-intrinsics-enable:   Fortran Dialect Options.
  17263. * options, -fbadu77-intrinsics-hide:     Fortran Dialect Options.
  17264. * options, -fcaller-saves:               Optimize Options.
  17265. * options, -fcase-initcap:               Fortran Dialect Options.
  17266. * options, -fcase-lower:                 Fortran Dialect Options.
  17267. * options, -fcase-preserve:              Fortran Dialect Options.
  17268. * options, -fcase-strict-lower:          Fortran Dialect Options.
  17269. * options, -fcase-strict-upper:          Fortran Dialect Options.
  17270. * options, -fcase-upper:                 Fortran Dialect Options.
  17271. * options, -fdebug-kludge:               Code Gen Options.
  17272. * options, -fdelayed-branch:             Optimize Options.
  17273. * options, -fdollar-ok:                  Fortran Dialect Options.
  17274. * options, -fexpensive-optimizations:    Optimize Options.
  17275. * options, -ff2c-intrinsics-delete:      Fortran Dialect Options.
  17276. * options, -ff2c-intrinsics-disable:     Fortran Dialect Options.
  17277. * options, -ff2c-intrinsics-enable:      Fortran Dialect Options.
  17278. * options, -ff2c-intrinsics-hide:        Fortran Dialect Options.
  17279. * options, -ff2c-library:                Code Gen Options.
  17280. * options, -ff66:                        Shorthand Options.
  17281. * options, -ff77:                        Shorthand Options.
  17282. * options, -ff90:                        Fortran Dialect Options.
  17283. * options, -ff90-intrinsics-delete:      Fortran Dialect Options.
  17284. * options, -ff90-intrinsics-disable:     Fortran Dialect Options.
  17285. * options, -ff90-intrinsics-enable:      Fortran Dialect Options.
  17286. * options, -ff90-intrinsics-hide:        Fortran Dialect Options.
  17287. * options, -ffast-math:                  Optimize Options.
  17288. * options, -ffixed-line-length-N:        Fortran Dialect Options.
  17289. * options, -ffloat-store:                Optimize Options.
  17290. * options, -fforce-addr:                 Optimize Options.
  17291. * options, -fforce-mem:                  Optimize Options.
  17292. * options, -ffree-form:                  Fortran Dialect Options.
  17293. * options, -fgnu-intrinsics-delete:      Fortran Dialect Options.
  17294. * options, -fgnu-intrinsics-disable:     Fortran Dialect Options.
  17295. * options, -fgnu-intrinsics-enable:      Fortran Dialect Options.
  17296. * options, -fgnu-intrinsics-hide:        Fortran Dialect Options.
  17297. * options, -fGROUP-intrinsics-hide:      Overly Convenient Options.
  17298. * options, -finit-local-zero <1>:        Overly Convenient Options.
  17299. * options, -finit-local-zero:            Code Gen Options.
  17300. * options, -fintrin-case-any:            Fortran Dialect Options.
  17301. * options, -fintrin-case-initcap:        Fortran Dialect Options.
  17302. * options, -fintrin-case-lower:          Fortran Dialect Options.
  17303. * options, -fintrin-case-upper:          Fortran Dialect Options.
  17304. * options, -fmatch-case-any:             Fortran Dialect Options.
  17305. * options, -fmatch-case-initcap:         Fortran Dialect Options.
  17306. * options, -fmatch-case-lower:           Fortran Dialect Options.
  17307. * options, -fmatch-case-upper:           Fortran Dialect Options.
  17308. * options, -fmil-intrinsics-delete:      Fortran Dialect Options.
  17309. * options, -fmil-intrinsics-disable:     Fortran Dialect Options.
  17310. * options, -fmil-intrinsics-enable:      Fortran Dialect Options.
  17311. * options, -fmil-intrinsics-hide:        Fortran Dialect Options.
  17312. * options, -fno-argument-noalias-global <1>: Aliasing Assumed To Work.
  17313. * options, -fno-argument-noalias-global: Code Gen Options.
  17314. * options, -fno-automatic <1>:           Overly Convenient Options.
  17315. * options, -fno-automatic:               Code Gen Options.
  17316. * options, -fno-backslash:               Fortran Dialect Options.
  17317. * options, -fno-common:                  Code Gen Options.
  17318. * options, -fno-emulate-complex:         Code Gen Options.
  17319. * options, -fno-f2c <1>:                 Code Gen Options.
  17320. * options, -fno-f2c:                     Avoid f2c Compatibility.
  17321. * options, -fno-f77:                     Shorthand Options.
  17322. * options, -fno-fixed-form:              Fortran Dialect Options.
  17323. * options, -fno-globals:                 Code Gen Options.
  17324. * options, -fno-ident:                   Code Gen Options.
  17325. * options, -fno-inline:                  Optimize Options.
  17326. * options, -fno-move-all-movables:       Optimize Options.
  17327. * options, -fno-reduce-all-givs:         Optimize Options.
  17328. * options, -fno-rerun-loop-opt:          Optimize Options.
  17329. * options, -fno-second-underscore:       Code Gen Options.
  17330. * options, -fno-silent:                  Overall Options.
  17331. * options, -fno-ugly:                    Shorthand Options.
  17332. * options, -fno-ugly-args:               Fortran Dialect Options.
  17333. * options, -fno-ugly-init:               Fortran Dialect Options.
  17334. * options, -fno-underscoring <1>:        Code Gen Options.
  17335. * options, -fno-underscoring:            Names.
  17336. * options, -fonetrip:                    Fortran Dialect Options.
  17337. * options, -fpack-struct:                Code Gen Options.
  17338. * options, -fpcc-struct-return:          Code Gen Options.
  17339. * options, -fpedantic:                   Warning Options.
  17340. * options, -fPIC:                        Actual Bugs.
  17341. * options, -freg-struct-return:          Code Gen Options.
  17342. * options, -frerun-cse-after-loop:       Optimize Options.
  17343. * options, -fschedule-insns:             Optimize Options.
  17344. * options, -fschedule-insns2:            Optimize Options.
  17345. * options, -fset-g77-defaults:           Overall Options.
  17346. * options, -fshort-double:               Code Gen Options.
  17347. * options, -fsource-case-lower:          Fortran Dialect Options.
  17348. * options, -fsource-case-preserve:       Fortran Dialect Options.
  17349. * options, -fsource-case-upper:          Fortran Dialect Options.
  17350. * options, -fstrength-reduce:            Optimize Options.
  17351. * options, -fsymbol-case-any:            Fortran Dialect Options.
  17352. * options, -fsymbol-case-initcap:        Fortran Dialect Options.
  17353. * options, -fsymbol-case-lower:          Fortran Dialect Options.
  17354. * options, -fsymbol-case-upper:          Fortran Dialect Options.
  17355. * options, -fsyntax-only:                Warning Options.
  17356. * options, -ftypeless-boz:               Fortran Dialect Options.
  17357. * options, -fugly <1>:                   Shorthand Options.
  17358. * options, -fugly:                       Overly Convenient Options.
  17359. * options, -fugly-assign:                Fortran Dialect Options.
  17360. * options, -fugly-assumed:               Fortran Dialect Options.
  17361. * options, -fugly-comma:                 Fortran Dialect Options.
  17362. * options, -fugly-complex:               Fortran Dialect Options.
  17363. * options, -fugly-logint:                Fortran Dialect Options.
  17364. * options, -funix-intrinsics-delete:     Fortran Dialect Options.
  17365. * options, -funix-intrinsics-disable:    Fortran Dialect Options.
  17366. * options, -funix-intrinsics-enable:     Fortran Dialect Options.
  17367. * options, -funix-intrinsics-hide:       Fortran Dialect Options.
  17368. * options, -funroll-all-loops:           Optimize Options.
  17369. * options, -funroll-loops:               Optimize Options.
  17370. * options, -fversion:                    Overall Options.
  17371. * options, -fvxt:                        Fortran Dialect Options.
  17372. * options, -fvxt-intrinsics-delete:      Fortran Dialect Options.
  17373. * options, -fvxt-intrinsics-disable:     Fortran Dialect Options.
  17374. * options, -fvxt-intrinsics-enable:      Fortran Dialect Options.
  17375. * options, -fvxt-intrinsics-hide:        Fortran Dialect Options.
  17376. * options, -fzeros:                      Code Gen Options.
  17377. * options, -g:                           Debugging Options.
  17378. * options, -I-:                          Directory Options.
  17379. * options, -Idir:                        Directory Options.
  17380. * options, -malign-double <1>:           Optimize Options.
  17381. * options, -malign-double:               Aligned Data.
  17382. * options, -Nl:                          Compiler Limits.
  17383. * options, -Nx:                          Compiler Limits.
  17384. * options, -pedantic:                    Warning Options.
  17385. * options, -pedantic-errors:             Warning Options.
  17386. * options, -v:                           G77 and GCC.
  17387. * options, -W:                           Warning Options.
  17388. * options, -w:                           Warning Options.
  17389. * options, -Waggregate-return:           Warning Options.
  17390. * options, -Wall:                        Warning Options.
  17391. * options, -Wcomment:                    Warning Options.
  17392. * options, -Wconversion:                 Warning Options.
  17393. * options, -Werror:                      Warning Options.
  17394. * options, -Wformat:                     Warning Options.
  17395. * options, -Wid-clash-LEN:               Warning Options.
  17396. * options, -Wimplicit:                   Warning Options.
  17397. * options, -Wlarger-than-LEN:            Warning Options.
  17398. * options, -Wno-globals:                 Warning Options.
  17399. * options, -Wparentheses:                Warning Options.
  17400. * options, -Wredundant-decls:            Warning Options.
  17401. * options, -Wshadow:                     Warning Options.
  17402. * options, -Wsurprising:                 Warning Options.
  17403. * options, -Wswitch:                     Warning Options.
  17404. * options, -Wtraditional:                Warning Options.
  17405. * options, -Wuninitialized:              Warning Options.
  17406. * options, -Wunused:                     Warning Options.
  17407. * options, adding:                       Adding Options.
  17408. * options, code generation:              Code Gen Options.
  17409. * options, debugging:                    Debugging Options.
  17410. * options, dialect:                      Fortran Dialect Options.
  17411. * options, directory search:             Directory Options.
  17412. * options, GNU Fortran command:          Invoking G77.
  17413. * options, macro:                        Shorthand Options.
  17414. * options, negative forms:               Invoking G77.
  17415. * options, optimization:                 Optimize Options.
  17416. * options, overall:                      Overall Options.
  17417. * options, overly convenient:            Overly Convenient Options.
  17418. * options, preprocessor:                 Preprocessor Options.
  17419. * options, shorthand:                    Shorthand Options.
  17420. * Or intrinsic:                          Or Intrinsic.
  17421. * OR intrinsic:                          Bit Operations on Floating-point Data.
  17422. * order of evaluation, side effects:     Order of Side Effects.
  17423. * ordering, array:                       Arrays.
  17424. * other intrinsics:                      Other Intrinsics.
  17425. * output, flushing <1>:                  Always Flush Output.
  17426. * output, flushing:                      Output Assumed To Flush.
  17427. * overall options:                       Overall Options.
  17428. * overflow:                              Warning Options.
  17429. * overlapping arguments:                 Aliasing Assumed To Work.
  17430. * overlays:                              Aliasing Assumed To Work.
  17431. * overly convenient options:             Overly Convenient Options.
  17432. * overwritten data:                      Strange Behavior at Run Time.
  17433. * Pack intrinsic:                        Pack Intrinsic.
  17434. * packages:                              Unpacking.
  17435. * padding:                               Actual Bugs.
  17436. * parallel processing:                   Support for Threads.
  17437. * PARAMETER statement <1>:               Intrinsics in PARAMETER Statements.
  17438. * PARAMETER statement:                   Old-style PARAMETER Statements.
  17439. * parameters, unused:                    Warning Options.
  17440. * patch files:                           Patching GNU CC Necessary.
  17441. * patch files, creating:                 Merging Distributions.
  17442. * pedantic compilation:                  Pedantic Compilation.
  17443. * Pentium optimizations <1>:             Aligned Data.
  17444. * Pentium optimizations <2>:             Use Submodel Options.
  17445. * Pentium optimizations:                 Unpacking.
  17446. * PError intrinsic:                      PError Intrinsic.
  17447. * placing initialization statements:     Initializing Before Specifying.
  17448. * POINTER statement:                     POINTER Statements.
  17449. * pointers <1>:                          Ugly Assigned Labels.
  17450. * pointers:                              Kind Notation.
  17451. * porting, simplify:                     Simplify Porting.
  17452. * pre-installation checks:               Pre-installation Checks.
  17453. * Precision intrinsic:                   Precision Intrinsic.
  17454. * precision, increasing:                 Increasing Precision/Range.
  17455. * prefix-radix constants:                Fortran Dialect Options.
  17456. * preprocessor <1>:                      What is GNU Fortran?.
  17457. * preprocessor <2>:                      Overall Options.
  17458. * preprocessor:                          Bug Reporting.
  17459. * preprocessor options:                  Preprocessor Options.
  17460. * prerequisites:                         Prerequisites.
  17461. * Present intrinsic:                     Present Intrinsic.
  17462. * printing compilation status:           Overall Options.
  17463. * printing main source:                  Actual Bugs.
  17464. * printing version information <1>:      Overall Options.
  17465. * printing version information:          What is GNU Fortran?.
  17466. * problems installing:                   Problems Installing.
  17467. * procedures:                            Procedures.
  17468. * Product intrinsic:                     Product Intrinsic.
  17469. * PROGRAM statement:                     Main Program Unit.
  17470. * programs named test:                   Nothing Happens.
  17471. * programs, cc1:                         What is GNU Fortran?.
  17472. * programs, cc1plus:                     What is GNU Fortran?.
  17473. * programs, compiling:                   G77 and GCC.
  17474. * programs, cpp <1>:                     Preprocessor Options.
  17475. * programs, cpp <2>:                     Bug Reporting.
  17476. * programs, cpp <3>:                     What is GNU Fortran?.
  17477. * programs, cpp:                         Overall Options.
  17478. * programs, f771:                        What is GNU Fortran?.
  17479. * programs, ratfor:                      Overall Options.
  17480. * programs, speeding up:                 Faster Programs.
  17481. * projects:                              Projects.
  17482. * Q edit descriptor:                     Q Edit Descriptor.
  17483. * QAbs intrinsic:                        QAbs Intrinsic.
  17484. * QACos intrinsic:                       QACos Intrinsic.
  17485. * QACosD intrinsic:                      QACosD Intrinsic.
  17486. * QASin intrinsic:                       QASin Intrinsic.
  17487. * QASinD intrinsic:                      QASinD Intrinsic.
  17488. * QATan intrinsic:                       QATan Intrinsic.
  17489. * QATan2 intrinsic:                      QATan2 Intrinsic.
  17490. * QATan2D intrinsic:                     QATan2D Intrinsic.
  17491. * QATanD intrinsic:                      QATanD Intrinsic.
  17492. * QCos intrinsic:                        QCos Intrinsic.
  17493. * QCosD intrinsic:                       QCosD Intrinsic.
  17494. * QCosH intrinsic:                       QCosH Intrinsic.
  17495. * QDiM intrinsic:                        QDiM Intrinsic.
  17496. * QExp intrinsic:                        QExp Intrinsic.
  17497. * QExt intrinsic:                        QExt Intrinsic.
  17498. * QExtD intrinsic:                       QExtD Intrinsic.
  17499. * QFloat intrinsic:                      QFloat Intrinsic.
  17500. * QInt intrinsic:                        QInt Intrinsic.
  17501. * QLog intrinsic:                        QLog Intrinsic.
  17502. * QLog10 intrinsic:                      QLog10 Intrinsic.
  17503. * QMax1 intrinsic:                       QMax1 Intrinsic.
  17504. * QMin1 intrinsic:                       QMin1 Intrinsic.
  17505. * QMod intrinsic:                        QMod Intrinsic.
  17506. * QNInt intrinsic:                       QNInt Intrinsic.
  17507. * QSin intrinsic:                        QSin Intrinsic.
  17508. * QSinD intrinsic:                       QSinD Intrinsic.
  17509. * QSinH intrinsic:                       QSinH Intrinsic.
  17510. * QSqRt intrinsic:                       QSqRt Intrinsic.
  17511. * QTan intrinsic:                        QTan Intrinsic.
  17512. * QTanD intrinsic:                       QTanD Intrinsic.
  17513. * QTanH intrinsic:                       QTanH Intrinsic.
  17514. * questionable instructions:             What is GNU Fortran?.
  17515. * quick start:                           Quick Start.
  17516. * Radix intrinsic:                       Radix Intrinsic.
  17517. * Rand intrinsic:                        Rand Intrinsic.
  17518. * Random_Number intrinsic:               Random_Number Intrinsic.
  17519. * Random_Seed intrinsic:                 Random_Seed Intrinsic.
  17520. * Range intrinsic:                       Range Intrinsic.
  17521. * range, increasing:                     Increasing Precision/Range.
  17522. * rank, maximum:                         Compiler Limits.
  17523. * Ratfor preprocessor:                   Overall Options.
  17524. * reads and writes, scheduling:          Aliasing Assumed To Work.
  17525. * Real intrinsic:                        Real Intrinsic.
  17526. * REAL intrinsic:                        REAL() and AIMAG() of Complex.
  17527. * real part:                             Ugly Complex Part Extraction.
  17528. * REAL(KIND=1) type:                     Compiler Types.
  17529. * REAL(KIND=2) type:                     Compiler Types.
  17530. * REAL*16 support:                       Full Support for Compiler Types.
  17531. * RealPart intrinsic:                    RealPart Intrinsic.
  17532. * recent versions <1>:                   Changes.
  17533. * recent versions:                       News.
  17534. * RECORD statement:                      STRUCTURE UNION RECORD MAP.
  17535. * recursion, lack of:                    RECURSIVE Keyword.
  17536. * RECURSIVE keyword:                     RECURSIVE Keyword.
  17537. * reference works:                       Language.
  17538. * Rename intrinsic <1>:                  Rename Intrinsic (function).
  17539. * Rename intrinsic:                      Rename Intrinsic (subroutine).
  17540. * Repeat intrinsic:                      Repeat Intrinsic.
  17541. * reporting bugs:                        Bugs.
  17542. * reporting compilation status:          Overall Options.
  17543. * requirements, GNU C:                   GNU C Required.
  17544. * Reshape intrinsic:                     Reshape Intrinsic.
  17545. * results, inconsistent:                 Floating-point Errors.
  17546. * RETURN statement <1>:                  Functions.
  17547. * RETURN statement:                      Alternate Returns.
  17548. * return type of functions:              Functions.
  17549. * rounding errors:                       Floating-point Errors.
  17550. * row-major ordering:                    Arrays.
  17551. * RRSpacing intrinsic:                   RRSpacing Intrinsic.
  17552. * RShift intrinsic:                      RShift Intrinsic.
  17553. * run-time library:                      What is GNU Fortran?.
  17554. * run-time options:                      Code Gen Options.
  17555. * runtime initialization:                Startup Code.
  17556. * SAVE statement:                        Code Gen Options.
  17557. * saved variables:                       Variables Assumed To Be Saved.
  17558. * Scale intrinsic:                       Scale Intrinsic.
  17559. * Scan intrinsic:                        Scan Intrinsic.
  17560. * scheduling of reads and writes:        Aliasing Assumed To Work.
  17561. * scope <1>:                             Scope and Classes of Names.
  17562. * scope:                                 Scope of Names and Labels.
  17563. * search path:                           Directory Options.
  17564. * searching for included files:          Directory Options.
  17565. * Secnds intrinsic:                      Secnds Intrinsic.
  17566. * Second intrinsic <1>:                  Second Intrinsic (subroutine).
  17567. * Second intrinsic:                      Second Intrinsic (function).
  17568. * segmentation violation <1>:            NeXTStep Problems.
  17569. * segmentation violation <2>:            Strange Behavior at Run Time.
  17570. * segmentation violation <3>:            Stack Overflow.
  17571. * segmentation violation:                Maximum Stackable Size.
  17572. * Selected_Int_Kind intrinsic:           Selected_Int_Kind Intrinsic.
  17573. * Selected_Real_Kind intrinsic:          Selected_Real_Kind Intrinsic.
  17574. * semicolons:                            Statements Comments Lines.
  17575. * separate distributions:                Merging Distributions.
  17576. * sequence numbers:                      Better Source Model.
  17577. * Set_Exponent intrinsic:                Set_Exponent Intrinsic.
  17578. * SGI:                                   System-specific Problems.
  17579. * Shape intrinsic:                       Shape Intrinsic.
  17580. * SHIFT intrinsic:                       Bit Operations on Floating-point Data.
  17581. * Short intrinsic:                       Short Intrinsic.
  17582. * short source lines:                    Short Lines.
  17583. * shorthand options:                     Shorthand Options.
  17584. * side effects, order of evaluation:     Order of Side Effects.
  17585. * Sign intrinsic:                        Sign Intrinsic.
  17586. * signal 11:                             Signal 11 and Friends.
  17587. * Signal intrinsic <1>:                  Signal Intrinsic (subroutine).
  17588. * Signal intrinsic:                      Signal Intrinsic (function).
  17589. * signature of procedures:               Procedures.
  17590. * simplify porting:                      Simplify Porting.
  17591. * Sin intrinsic:                         Sin Intrinsic.
  17592. * SinD intrinsic:                        SinD Intrinsic.
  17593. * SinH intrinsic:                        SinH Intrinsic.
  17594. * Sleep intrinsic:                       Sleep Intrinsic.
  17595. * slow compiler:                         Large Initialization.
  17596. * Sngl intrinsic:                        Sngl Intrinsic.
  17597. * SnglQ intrinsic:                       SnglQ Intrinsic.
  17598. * Solaris:                               Strange Behavior at Run Time.
  17599. * source code <1>:                       Source Form.
  17600. * source code <2>:                       What is GNU Fortran?.
  17601. * source code <3>:                       Case Sensitivity.
  17602. * source code <4>:                       Unpacking.
  17603. * source code:                           Lines.
  17604. * source file:                           What is GNU Fortran?.
  17605. * source file form:                      Fortran Dialect Options.
  17606. * source file format <1>:                Case Sensitivity.
  17607. * source file format <2>:                Fortran Dialect Options.
  17608. * source file format <3>:                Lines.
  17609. * source file format:                    Source Form.
  17610. * source form <1>:                       Lines.
  17611. * source form:                           Source Form.
  17612. * source lines, long:                    Long Lines.
  17613. * source lines, short:                   Short Lines.
  17614. * source tree:                           Unpacking.
  17615. * space-padding:                         Short Lines.
  17616. * spaces:                                Short Lines.
  17617. * spaces, endless printing of:           Strange Behavior at Run Time.
  17618. * Spacing intrinsic:                     Spacing Intrinsic.
  17619. * speed, compiler:                       Large Initialization.
  17620. * speed, of compiler:                    Actual Bugs.
  17621. * speeding up loops:                     Optimize Options.
  17622. * speeding up programs:                  Faster Programs.
  17623. * Spread intrinsic:                      Spread Intrinsic.
  17624. * SqRt intrinsic:                        SqRt Intrinsic.
  17625. * SRand intrinsic:                       SRand Intrinsic.
  17626. * stack allocation:                      Maximum Stackable Size.
  17627. * stack overflow:                        Stack Overflow.
  17628. * stack, 387 coprocessor:                News.
  17629. * stack, aligned:                        Aligned Data.
  17630. * stage directories:                     Cleanup Kills Stage Directories.
  17631. * standard support:                      Standard Support.
  17632. * standard, ANSI FORTRAN 77:             Language.
  17633. * startup code:                          Startup Code.
  17634. * Stat intrinsic <1>:                    Stat Intrinsic (subroutine).
  17635. * Stat intrinsic:                        Stat Intrinsic (function).
  17636. * statement labels, assigned:            Assigned Statement Labels.
  17637. * statements, ACCEPT:                    TYPE and ACCEPT I/O Statements.
  17638. * statements, ASSIGN <1>:                Assigned Statement Labels.
  17639. * statements, ASSIGN:                    Ugly Assigned Labels.
  17640. * statements, BLOCK DATA <1>:            Multiple Definitions of External Names.
  17641. * statements, BLOCK DATA:                Block Data and Libraries.
  17642. * statements, CLOSE:                     OPEN CLOSE and INQUIRE Keywords.
  17643. * statements, COMMON <1>:                Multiple Definitions of External Names.
  17644. * statements, COMMON:                    Common Blocks.
  17645. * statements, COMPLEX:                   Complex Variables.
  17646. * statements, DATA <1>:                  Code Gen Options.
  17647. * statements, DATA:                      Actual Bugs.
  17648. * statements, DECODE:                    ENCODE and DECODE.
  17649. * statements, DIMENSION <1>:             Adjustable Arrays.
  17650. * statements, DIMENSION <2>:             Arrays.
  17651. * statements, DIMENSION:                 Array Bounds Expressions.
  17652. * statements, DO <1>:                    Warning Options.
  17653. * statements, DO:                        Loops.
  17654. * statements, ENCODE:                    ENCODE and DECODE.
  17655. * statements, ENTRY:                     Alternate Entry Points.
  17656. * statements, EQUIVALENCE:               Local Equivalence Areas.
  17657. * statements, FORMAT:                    Expressions in FORMAT Statements.
  17658. * statements, FUNCTION <1>:              Functions.
  17659. * statements, FUNCTION:                  Procedures.
  17660. * statements, GOTO:                      Assigned Statement Labels.
  17661. * statements, IMPLICIT CHARACTER*(*):    Limitation on Implicit Declarations.
  17662. * statements, INQUIRE:                   OPEN CLOSE and INQUIRE Keywords.
  17663. * statements, MAP:                       STRUCTURE UNION RECORD MAP.
  17664. * statements, NAMELIST:                  NAMELIST.
  17665. * statements, OPEN:                      OPEN CLOSE and INQUIRE Keywords.
  17666. * statements, PARAMETER <1>:             Old-style PARAMETER Statements.
  17667. * statements, PARAMETER:                 Intrinsics in PARAMETER Statements.
  17668. * statements, POINTER:                   POINTER Statements.
  17669. * statements, PROGRAM:                   Main Program Unit.
  17670. * statements, RECORD:                    STRUCTURE UNION RECORD MAP.
  17671. * statements, RETURN <1>:                Functions.
  17672. * statements, RETURN:                    Alternate Returns.
  17673. * statements, SAVE:                      Code Gen Options.
  17674. * statements, separated by semicolon:    Statements Comments Lines.
  17675. * statements, STRUCTURE:                 STRUCTURE UNION RECORD MAP.
  17676. * statements, SUBROUTINE <1>:            Procedures.
  17677. * statements, SUBROUTINE:                Alternate Returns.
  17678. * statements, TYPE:                      TYPE and ACCEPT I/O Statements.
  17679. * statements, UNION:                     STRUCTURE UNION RECORD MAP.
  17680. * static variables:                      Variables Assumed To Be Saved.
  17681. * status, compilation:                   Overall Options.
  17682. * storage association:                   Aliasing Assumed To Work.
  17683. * straight build:                        Straight Build.
  17684. * strings, empty:                        Character Type.
  17685. * strtoul:                               Missing strtoul.
  17686. * STRUCTURE statement:                   STRUCTURE UNION RECORD MAP.
  17687. * structures:                            Actual Bugs.
  17688. * submodels:                             Use Submodel Options.
  17689. * SUBROUTINE statement <1>:              Alternate Returns.
  17690. * SUBROUTINE statement:                  Procedures.
  17691. * subroutines:                           Alternate Returns.
  17692. * suffixes, file name:                   Overall Options.
  17693. * Sum intrinsic:                         Sum Intrinsic.
  17694. * SunOS4 <1>:                            Missing strtoul.
  17695. * SunOS4:                                Quick Start.
  17696. * support for ANSI FORTRAN 77:           Standard Support.
  17697. * support for gcc versions:              Merging Distributions.
  17698. * support, Alpha:                        Actual Bugs.
  17699. * support, COMPLEX:                      Actual Bugs.
  17700. * support, ELF:                          Actual Bugs.
  17701. * support, f77:                          Backslash in Constants.
  17702. * support, Fortran 90:                   Fortran 90 Support.
  17703. * support, gdb:                          Debugger Problems.
  17704. * suppressing warnings:                  Warning Options.
  17705. * symbol names <1>:                      Fortran Dialect Options.
  17706. * symbol names:                          Names.
  17707. * symbol names, transforming:            Code Gen Options.
  17708. * symbol names, underscores:             Code Gen Options.
  17709. * symbolic names:                        Scope and Classes of Names.
  17710. * SymLnk intrinsic <1>:                  SymLnk Intrinsic (function).
  17711. * SymLnk intrinsic:                      SymLnk Intrinsic (subroutine).
  17712. * synchronous write errors <1>:          Output Assumed To Flush.
  17713. * synchronous write errors:              Always Flush Output.
  17714. * syntax checking:                       Warning Options.
  17715. * System intrinsic <1>:                  System Intrinsic (function).
  17716. * System intrinsic:                      System Intrinsic (subroutine).
  17717. * System_Clock intrinsic:                System_Clock Intrinsic.
  17718. * tab characters:                        Tabs.
  17719. * table of intrinsics:                   Table of Intrinsic Functions.
  17720. * Tan intrinsic:                         Tan Intrinsic.
  17721. * TanD intrinsic:                        TanD Intrinsic.
  17722. * TanH intrinsic:                        TanH Intrinsic.
  17723. * test programs:                         Nothing Happens.
  17724. * texinfo:                               Updating Documentation.
  17725. * textbooks:                             Language.
  17726. * threads:                               Support for Threads.
  17727. * Time intrinsic <1>:                    Time Intrinsic (VXT).
  17728. * Time intrinsic:                        Time Intrinsic (UNIX).
  17729. * Time8 intrinsic:                       Time8 Intrinsic.
  17730. * Tiny intrinsic:                        Tiny Intrinsic.
  17731. * Toolpack:                              Increasing Precision/Range.
  17732. * trailing commas:                       Ugly Null Arguments.
  17733. * trailing comments:                     Statements Comments Lines.
  17734. * trailing null byte:                    Character and Hollerith Constants.
  17735. * Transfer intrinsic:                    Transfer Intrinsic.
  17736. * transformation of symbol names:        Names.
  17737. * transforming symbol names:             Code Gen Options.
  17738. * translation of user programs:          What is GNU Fortran?.
  17739. * Transpose intrinsic:                   Transpose Intrinsic.
  17740. * Trim intrinsic:                        Trim Intrinsic.
  17741. * trips, number of:                      Loops.
  17742. * truncation:                            Long Lines.
  17743. * TtyNam intrinsic <1>:                  TtyNam Intrinsic (function).
  17744. * TtyNam intrinsic:                      TtyNam Intrinsic (subroutine).
  17745. * TYPE statement:                        TYPE and ACCEPT I/O Statements.
  17746. * types, COMPLEX(KIND=1):                Compiler Types.
  17747. * types, COMPLEX(KIND=2):                Compiler Types.
  17748. * types, constants <1>:                  Fortran Dialect Options.
  17749. * types, constants <2>:                  Compiler Constants.
  17750. * types, constants:                      Constants.
  17751. * types, DOUBLE COMPLEX:                 Compiler Types.
  17752. * types, DOUBLE PRECISION:               Compiler Types.
  17753. * types, file:                           Overall Options.
  17754. * types, Fortran/C:                      C Access to Type Information.
  17755. * types, INTEGER(KIND=1):                Compiler Types.
  17756. * types, INTEGER(KIND=2):                Compiler Types.
  17757. * types, INTEGER(KIND=3):                Compiler Types.
  17758. * types, INTEGER(KIND=6):                Compiler Types.
  17759. * types, LOGICAL(KIND=1):                Compiler Types.
  17760. * types, LOGICAL(KIND=2):                Compiler Types.
  17761. * types, LOGICAL(KIND=3):                Compiler Types.
  17762. * types, LOGICAL(KIND=6):                Compiler Types.
  17763. * types, of data:                        Compiler Types.
  17764. * types, REAL(KIND=1):                   Compiler Types.
  17765. * types, REAL(KIND=2):                   Compiler Types.
  17766. * UBound intrinsic:                      UBound Intrinsic.
  17767. * ugly features <1>:                     Distensions.
  17768. * ugly features:                         Shorthand Options.
  17769. * UMask intrinsic <1>:                   UMask Intrinsic (function).
  17770. * UMask intrinsic:                       UMask Intrinsic (subroutine).
  17771. * undefined behavior:                    Bug Criteria.
  17772. * undefined function value:              Bug Criteria.
  17773. * undefined reference (_main):           Cannot Link Fortran Programs.
  17774. * undefined reference (_strtoul):        Missing strtoul.
  17775. * underscores <1>:                       Code Gen Options.
  17776. * underscores <2>:                       Mangling of Names.
  17777. * underscores <3>:                       Code Gen Options.
  17778. * underscores:                           Underscores in Symbol Names.
  17779. * uninitialized variables <1>:           Code Gen Options.
  17780. * uninitialized variables <2>:           Variables Assumed To Be Zero.
  17781. * uninitialized variables:               Warning Options.
  17782. * UNION statement:                       STRUCTURE UNION RECORD MAP.
  17783. * unit numbers <1>:                      Larger File Unit Numbers.
  17784. * unit numbers:                          Large File Unit Numbers.
  17785. * UNIX f77:                              Shorthand Options.
  17786. * UNIX intrinsics:                       Fortran Dialect Options.
  17787. * Unlink intrinsic <1>:                  Unlink Intrinsic (subroutine).
  17788. * Unlink intrinsic:                      Unlink Intrinsic (function).
  17789. * Unpack intrinsic:                      Unpack Intrinsic.
  17790. * unpacking distributions:               Unpacking.
  17791. * unrecognized file format:              What is GNU Fortran?.
  17792. * unresolved reference (various):        Cannot Link Fortran Programs.
  17793. * unrolling loops:                       Optimize Options.
  17794. * unsupported warnings:                  Warning Options.
  17795. * unused arguments <1>:                  Unused Arguments.
  17796. * unused arguments:                      Warning Options.
  17797. * unused dummies:                        Warning Options.
  17798. * unused parameters:                     Warning Options.
  17799. * unused variables:                      Warning Options.
  17800. * updating info directory:               Updating Documentation.
  17801. * uppercase letters:                     Case Sensitivity.
  17802. * user-visible changes:                  Changes.
  17803. * variables assumed to be zero:          Variables Assumed To Be Zero.
  17804. * variables retaining values across calls: Variables Assumed To Be Saved.
  17805. * variables, initialization of:          Code Gen Options.
  17806. * variables, mistyped:                   Not My Type.
  17807. * variables, uninitialized <1>:          Code Gen Options.
  17808. * variables, uninitialized:              Warning Options.
  17809. * variables, unused:                     Warning Options.
  17810. * Verify intrinsic:                      Verify Intrinsic.
  17811. * version information, printing <1>:     What is GNU Fortran?.
  17812. * version information, printing:         Overall Options.
  17813. * version numbering:                     Merging Distributions.
  17814. * versions of gcc:                       Merging Distributions.
  17815. * versions, recent <1>:                  News.
  17816. * versions, recent:                      Changes.
  17817. * VXT extensions:                        VXT Fortran.
  17818. * VXT features:                          Fortran Dialect Options.
  17819. * VXT intrinsics:                        Fortran Dialect Options.
  17820. * warning messages:                      Warning Options.
  17821. * warnings:                              What is GNU Fortran?.
  17822. * warnings vs errors:                    Warnings and Errors.
  17823. * warnings, all:                         Warning Options.
  17824. * warnings, extra:                       Warning Options.
  17825. * warnings, global names <1>:            Warning Options.
  17826. * warnings, global names:                Code Gen Options.
  17827. * warnings, implicit declaration:        Warning Options.
  17828. * warnings, unsupported:                 Warning Options.
  17829. * why separate distributions:            Merging Distributions.
  17830. * wisdom:                                Collected Fortran Wisdom.
  17831. * writes, flushing <1>:                  Always Flush Output.
  17832. * writes, flushing:                      Output Assumed To Flush.
  17833. * writing code:                          Collected Fortran Wisdom.
  17834. * XOr intrinsic:                         XOr Intrinsic.
  17835. * ZAbs intrinsic:                        ZAbs Intrinsic.
  17836. * ZCos intrinsic:                        ZCos Intrinsic.
  17837. * zero byte, trailing:                   Character and Hollerith Constants.
  17838. * zero-initialized variables:            Variables Assumed To Be Zero.
  17839. * zero-length CHARACTER:                 Character Type.
  17840. * ZExp intrinsic:                        ZExp Intrinsic.
  17841. * ZExt intrinsic:                        ZExt Intrinsic.
  17842. * ZLog intrinsic:                        ZLog Intrinsic.
  17843. * ZSin intrinsic:                        ZSin Intrinsic.
  17844. * ZSqRt intrinsic:                       ZSqRt Intrinsic.
  17845. * zzz.c:                                 Object File Differences.
  17846. * zzz.o:                                 Object File Differences.
  17847. Tag Table:
  17848. Node: Top
  17849. Node: Copying
  17850. Node: Contributors
  17851. 22829
  17852. Node: Funding
  17853. 25861
  17854. Node: Funding GNU Fortran
  17855. 28364
  17856. Node: Look and Feel
  17857. 31021
  17858. Node: Getting Started
  17859. 31523
  17860. Node: What is GNU Fortran?
  17861. 33841
  17862. Node: G77 and GCC
  17863. 43406
  17864. Node: Invoking G77
  17865. 44757
  17866. Node: Option Summary
  17867. 46908
  17868. Node: Overall Options
  17869. 51600
  17870. Node: Shorthand Options
  17871. 57688
  17872. Node: Fortran Dialect Options
  17873. 60166
  17874. Node: Warning Options
  17875. 71427
  17876. Node: Debugging Options
  17877. 80313
  17878. Node: Optimize Options
  17879. 81386
  17880. Node: Preprocessor Options
  17881. 84831
  17882. Node: Directory Options
  17883. 86012
  17884. Node: Code Gen Options
  17885. 87324
  17886. Node: Environment Variables
  17887. 102635
  17888. Node: News
  17889. 103093
  17890. Node: Changes
  17891. 152800
  17892. Node: Language
  17893. 166836
  17894. Node: Direction of Language Development
  17895. 168776
  17896. Node: Standard Support
  17897. 175015
  17898. Node: No Passing External Assumed-length
  17899. 175736
  17900. Node: No Passing Dummy Assumed-length
  17901. 176213
  17902. Node: No Pathological Implied-DO
  17903. 176728
  17904. Node: No Useless Implied-DO
  17905. 177415
  17906. Node: Conformance
  17907. 178146
  17908. Node: Notation Used
  17909. 180169
  17910. Node: Terms and Concepts
  17911. 184374
  17912. Node: Syntactic Items
  17913. 184886
  17914. Node: Statements Comments Lines
  17915. 185568
  17916. Node: Scope of Names and Labels
  17917. 187433
  17918. Node: Characters Lines Sequence
  17919. 187863
  17920. Node: Character Set
  17921. 188444
  17922. Node: Lines
  17923. 189445
  17924. Node: Continuation Line
  17925. 191921
  17926. Node: Statements
  17927. 192876
  17928. Node: Statement Labels
  17929. 193832
  17930. Node: Order
  17931. 194524
  17932. Node: INCLUDE
  17933. 195409
  17934. Node: Data Types and Constants
  17935. 198152
  17936. Node: Types
  17937. 201673
  17938. Node: Double Notation
  17939. 202762
  17940. Node: Star Notation
  17941. 203834
  17942. Node: Kind Notation
  17943. 206779
  17944. Node: Constants
  17945. 215199
  17946. Node: Integer Type
  17947. 216511
  17948. Node: Character Type
  17949. 217109
  17950. Node: Expressions
  17951. 217873
  17952. Node: %LOC()
  17953. 218289
  17954. Node: Specification Statements
  17955. 220990
  17956. Node: NAMELIST
  17957. 221447
  17958. Node: DOUBLE COMPLEX
  17959. 221729
  17960. Node: Control Statements
  17961. 221983
  17962. Node: DO WHILE
  17963. 222475
  17964. Node: END DO
  17965. 222701
  17966. Node: Construct Names
  17967. 223708
  17968. Node: CYCLE and EXIT
  17969. 224448
  17970. Node: Functions and Subroutines
  17971. 227212
  17972. Node: %VAL()
  17973. 227858
  17974. Node: %REF()
  17975. 229222
  17976. Node: %DESCR()
  17977. 231050
  17978. Node: Generics and Specifics
  17979. 233183
  17980. Node: REAL() and AIMAG() of Complex
  17981. 240371
  17982. Node: CMPLX() of DOUBLE PRECISION
  17983. 242204
  17984. Node: MIL-STD 1753
  17985. 243930
  17986. Node: f77/f2c Intrinsics
  17987. 244272
  17988. Node: Table of Intrinsic Functions
  17989. 244842
  17990. Node: Abort Intrinsic
  17991. 261549
  17992. Node: Abs Intrinsic
  17993. 261813
  17994. Node: Access Intrinsic
  17995. 262681
  17996. Node: AChar Intrinsic
  17997. 263517
  17998. Node: ACos Intrinsic
  17999. 264039
  18000. Node: AdjustL Intrinsic
  18001. 264500
  18002. Node: AdjustR Intrinsic
  18003. 264825
  18004. Node: AImag Intrinsic
  18005. 265151
  18006. Node: AInt Intrinsic
  18007. 265956
  18008. Node: Alarm Intrinsic
  18009. 266584
  18010. Node: All Intrinsic
  18011. 267420
  18012. Node: Allocated Intrinsic
  18013. 267732
  18014. Node: ALog Intrinsic
  18015. 268061
  18016. Node: ALog10 Intrinsic
  18017. 268451
  18018. Node: AMax0 Intrinsic
  18019. 268849
  18020. Node: AMax1 Intrinsic
  18021. 269334
  18022. Node: AMin0 Intrinsic
  18023. 269787
  18024. Node: AMin1 Intrinsic
  18025. 270271
  18026. Node: AMod Intrinsic
  18027. 270723
  18028. Node: And Intrinsic
  18029. 271149
  18030. Node: ANInt Intrinsic
  18031. 271655
  18032. Node: Any Intrinsic
  18033. 272419
  18034. Node: ASin Intrinsic
  18035. 272726
  18036. Node: Associated Intrinsic
  18037. 273184
  18038. Node: ATan Intrinsic
  18039. 273518
  18040. Node: ATan2 Intrinsic
  18041. 273984
  18042. Node: BesJ0 Intrinsic
  18043. 274535
  18044. Node: BesJ1 Intrinsic
  18045. 274996
  18046. Node: BesJN Intrinsic
  18047. 275457
  18048. Node: BesY0 Intrinsic
  18049. 275956
  18050. Node: BesY1 Intrinsic
  18051. 276418
  18052. Node: BesYN Intrinsic
  18053. 276880
  18054. Node: Bit_Size Intrinsic
  18055. 277383
  18056. Node: BTest Intrinsic
  18057. 278042
  18058. Node: CAbs Intrinsic
  18059. 278762
  18060. Node: CCos Intrinsic
  18061. 279149
  18062. Node: Ceiling Intrinsic
  18063. 279541
  18064. Node: CExp Intrinsic
  18065. 279863
  18066. Node: Char Intrinsic
  18067. 280255
  18068. Node: ChDir Intrinsic (subroutine)
  18069. 281509
  18070. Node: ChMod Intrinsic (subroutine)
  18071. 282511
  18072. Node: CLog Intrinsic
  18073. 283780
  18074. Node: Cmplx Intrinsic
  18075. 284184
  18076. Node: Complex Intrinsic
  18077. 284985
  18078. Node: Conjg Intrinsic
  18079. 286431
  18080. Node: Cos Intrinsic
  18081. 286855
  18082. Node: CosH Intrinsic
  18083. 287318
  18084. Node: Count Intrinsic
  18085. 287693
  18086. Node: CPU_Time Intrinsic
  18087. 288011
  18088. Node: CShift Intrinsic
  18089. 288466
  18090. Node: CSin Intrinsic
  18091. 288788
  18092. Node: CSqRt Intrinsic
  18093. 289180
  18094. Node: CTime Intrinsic (subroutine)
  18095. 289590
  18096. Node: CTime Intrinsic (function)
  18097. 290345
  18098. Node: DAbs Intrinsic
  18099. 290979
  18100. Node: DACos Intrinsic
  18101. 291375
  18102. Node: DASin Intrinsic
  18103. 291766
  18104. Node: DATan Intrinsic
  18105. 292158
  18106. Node: DATan2 Intrinsic
  18107. 292551
  18108. Node: Date_and_Time Intrinsic
  18109. 293006
  18110. Node: DbesJ0 Intrinsic
  18111. 293356
  18112. Node: DbesJ1 Intrinsic
  18113. 293749
  18114. Node: DbesJN Intrinsic
  18115. 294135
  18116. Node: DbesY0 Intrinsic
  18117. 294559
  18118. Node: DbesY1 Intrinsic
  18119. 294945
  18120. Node: DbesYN Intrinsic
  18121. 295331
  18122. Node: Dble Intrinsic
  18123. 295753
  18124. Node: DCos Intrinsic
  18125. 296459
  18126. Node: DCosH Intrinsic
  18127. 296843
  18128. Node: DDiM Intrinsic
  18129. 297233
  18130. Node: DErF Intrinsic
  18131. 297665
  18132. Node: DErFC Intrinsic
  18133. 298034
  18134. Node: DExp Intrinsic
  18135. 298409
  18136. Node: Digits Intrinsic
  18137. 298795
  18138. Node: DiM Intrinsic
  18139. 299112
  18140. Node: DInt Intrinsic
  18141. 299611
  18142. Node: DLog Intrinsic
  18143. 299995
  18144. Node: DLog10 Intrinsic
  18145. 300380
  18146. Node: DMax1 Intrinsic
  18147. 300778
  18148. Node: DMin1 Intrinsic
  18149. 301232
  18150. Node: DMod Intrinsic
  18151. 301684
  18152. Node: DNInt Intrinsic
  18153. 302112
  18154. Node: Dot_Product Intrinsic
  18155. 302511
  18156. Node: DProd Intrinsic
  18157. 302851
  18158. Node: DSign Intrinsic
  18159. 303233
  18160. Node: DSin Intrinsic
  18161. 303672
  18162. Node: DSinH Intrinsic
  18163. 304057
  18164. Node: DSqRt Intrinsic
  18165. 304448
  18166. Node: DTan Intrinsic
  18167. 304839
  18168. Node: DTanH Intrinsic
  18169. 305224
  18170. Node: Dtime Intrinsic (subroutine)
  18171. 305628
  18172. Node: EOShift Intrinsic
  18173. 306563
  18174. Node: Epsilon Intrinsic
  18175. 306902
  18176. Node: ErF Intrinsic
  18177. 307226
  18178. Node: ErFC Intrinsic
  18179. 307632
  18180. Node: ETime Intrinsic (subroutine)
  18181. 308190
  18182. Node: ETime Intrinsic (function)
  18183. 309017
  18184. Node: Exit Intrinsic
  18185. 309721
  18186. Node: Exp Intrinsic
  18187. 310198
  18188. Node: Exponent Intrinsic
  18189. 310660
  18190. Node: Fdate Intrinsic (subroutine)
  18191. 310999
  18192. Node: Fdate Intrinsic (function)
  18193. 311687
  18194. Node: FGet Intrinsic (subroutine)
  18195. 312237
  18196. Node: FGetC Intrinsic (subroutine)
  18197. 313074
  18198. Node: Float Intrinsic
  18199. 313951
  18200. Node: Floor Intrinsic
  18201. 314351
  18202. Node: Flush Intrinsic
  18203. 314667
  18204. Node: FNum Intrinsic
  18205. 315246
  18206. Node: FPut Intrinsic (subroutine)
  18207. 315694
  18208. Node: FPutC Intrinsic (subroutine)
  18209. 316491
  18210. Node: Fraction Intrinsic
  18211. 317338
  18212. Node: FSeek Intrinsic
  18213. 317679
  18214. Node: FStat Intrinsic (subroutine)
  18215. 318404
  18216. Node: FStat Intrinsic (function)
  18217. 319873
  18218. Node: FTell Intrinsic (subroutine)
  18219. 321107
  18220. Node: FTell Intrinsic (function)
  18221. 321780
  18222. Node: GError Intrinsic
  18223. 322297
  18224. Node: GetArg Intrinsic
  18225. 322671
  18226. Node: GetCWD Intrinsic (subroutine)
  18227. 323307
  18228. Node: GetCWD Intrinsic (function)
  18229. 324163
  18230. Node: GetEnv Intrinsic
  18231. 324783
  18232. Node: GetGId Intrinsic
  18233. 325370
  18234. Node: GetLog Intrinsic
  18235. 325676
  18236. Node: GetPId Intrinsic
  18237. 326214
  18238. Node: GetUId Intrinsic
  18239. 326522
  18240. Node: GMTime Intrinsic
  18241. 326827
  18242. Node: HostNm Intrinsic (subroutine)
  18243. 327835
  18244. Node: HostNm Intrinsic (function)
  18245. 328707
  18246. Node: Huge Intrinsic
  18247. 329332
  18248. Node: IAbs Intrinsic
  18249. 329655
  18250. Node: IAChar Intrinsic
  18251. 330046
  18252. Node: IAnd Intrinsic
  18253. 330586
  18254. Node: IArgC Intrinsic
  18255. 331074
  18256. Node: IBClr Intrinsic
  18257. 331450
  18258. Node: IBits Intrinsic
  18259. 331960
  18260. Node: IBSet Intrinsic
  18261. 332674
  18262. Node: IChar Intrinsic
  18263. 333175
  18264. Node: IDate Intrinsic (UNIX)
  18265. 334394
  18266. Node: IDiM Intrinsic
  18267. 334975
  18268. Node: IDInt Intrinsic
  18269. 335424
  18270. Node: IDNInt Intrinsic
  18271. 335817
  18272. Node: IEOr Intrinsic
  18273. 336216
  18274. Node: IErrNo Intrinsic
  18275. 336714
  18276. Node: IFix Intrinsic
  18277. 337041
  18278. Node: Imag Intrinsic
  18279. 337429
  18280. Node: ImagPart Intrinsic
  18281. 338434
  18282. Node: Index Intrinsic
  18283. 339460
  18284. Node: Int Intrinsic
  18285. 340013
  18286. Node: Int2 Intrinsic
  18287. 340728
  18288. Node: Int8 Intrinsic
  18289. 341438
  18290. Node: IOr Intrinsic
  18291. 342148
  18292. Node: IRand Intrinsic
  18293. 342628
  18294. Node: IsaTty Intrinsic
  18295. 343548
  18296. Node: IShft Intrinsic
  18297. 343972
  18298. Node: IShftC Intrinsic
  18299. 344822
  18300. Node: ISign Intrinsic
  18301. 345750
  18302. Node: ITime Intrinsic
  18303. 346200
  18304. Node: Kill Intrinsic (subroutine)
  18305. 346602
  18306. Node: Kind Intrinsic
  18307. 347439
  18308. Node: LBound Intrinsic
  18309. 347764
  18310. Node: Len Intrinsic
  18311. 348081
  18312. Node: Len_Trim Intrinsic
  18313. 348717
  18314. Node: LGe Intrinsic
  18315. 349129
  18316. Node: LGt Intrinsic
  18317. 350542
  18318. Node: Link Intrinsic (subroutine)
  18319. 351448
  18320. Node: LLe Intrinsic
  18321. 352413
  18322. Node: LLt Intrinsic
  18323. 353319
  18324. Node: LnBlnk Intrinsic
  18325. 354214
  18326. Node: Loc Intrinsic
  18327. 354617
  18328. Node: Log Intrinsic
  18329. 355048
  18330. Node: Log10 Intrinsic
  18331. 355628
  18332. Node: Logical Intrinsic
  18333. 356201
  18334. Node: Long Intrinsic
  18335. 356524
  18336. Node: LShift Intrinsic
  18337. 357048
  18338. Node: LStat Intrinsic (subroutine)
  18339. 358084
  18340. Node: LStat Intrinsic (function)
  18341. 359840
  18342. Node: LTime Intrinsic
  18343. 361347
  18344. Node: MatMul Intrinsic
  18345. 362351
  18346. Node: Max Intrinsic
  18347. 362669
  18348. Node: Max0 Intrinsic
  18349. 363220
  18350. Node: Max1 Intrinsic
  18351. 363671
  18352. Node: MaxExponent Intrinsic
  18353. 364155
  18354. Node: MaxLoc Intrinsic
  18355. 364495
  18356. Node: MaxVal Intrinsic
  18357. 364822
  18358. Node: MClock Intrinsic
  18359. 365144
  18360. Node: MClock8 Intrinsic
  18361. 365871
  18362. Node: Merge Intrinsic
  18363. 366589
  18364. Node: Min Intrinsic
  18365. 366905
  18366. Node: Min0 Intrinsic
  18367. 367456
  18368. Node: Min1 Intrinsic
  18369. 367907
  18370. Node: MinExponent Intrinsic
  18371. 368391
  18372. Node: MinLoc Intrinsic
  18373. 368731
  18374. Node: MinVal Intrinsic
  18375. 369058
  18376. Node: Mod Intrinsic
  18377. 369377
  18378. Node: Modulo Intrinsic
  18379. 369900
  18380. Node: MvBits Intrinsic
  18381. 370219
  18382. Node: Nearest Intrinsic
  18383. 371085
  18384. Node: NInt Intrinsic
  18385. 371409
  18386. Node: Not Intrinsic
  18387. 372247
  18388. Node: Or Intrinsic
  18389. 372642
  18390. Node: Pack Intrinsic
  18391. 373140
  18392. Node: PError Intrinsic
  18393. 373450
  18394. Node: Precision Intrinsic
  18395. 373904
  18396. Node: Present Intrinsic
  18397. 374239
  18398. Node: Product Intrinsic
  18399. 374569
  18400. Node: Radix Intrinsic
  18401. 374895
  18402. Node: Rand Intrinsic
  18403. 375212
  18404. Node: Random_Number Intrinsic
  18405. 376099
  18406. Node: Random_Seed Intrinsic
  18407. 376452
  18408. Node: Range Intrinsic
  18409. 376800
  18410. Node: Real Intrinsic
  18411. 377121
  18412. Node: RealPart Intrinsic
  18413. 378127
  18414. Node: Rename Intrinsic (subroutine)
  18415. 379160
  18416. Node: Repeat Intrinsic
  18417. 380132
  18418. Node: Reshape Intrinsic
  18419. 380468
  18420. Node: RRSpacing Intrinsic
  18421. 380797
  18422. Node: RShift Intrinsic
  18423. 381132
  18424. Node: Scale Intrinsic
  18425. 382130
  18426. Node: Scan Intrinsic
  18427. 382446
  18428. Node: Second Intrinsic (function)
  18429. 382770
  18430. Node: Second Intrinsic (subroutine)
  18431. 383265
  18432. Node: Selected_Int_Kind Intrinsic
  18433. 383903
  18434. Node: Selected_Real_Kind Intrinsic
  18435. 384294
  18436. Node: Set_Exponent Intrinsic
  18437. 384681
  18438. Node: Shape Intrinsic
  18439. 385038
  18440. Node: Short Intrinsic
  18441. 385361
  18442. Node: Sign Intrinsic
  18443. 386057
  18444. Node: Signal Intrinsic (subroutine)
  18445. 386657
  18446. Node: Sin Intrinsic
  18447. 388871
  18448. Node: SinH Intrinsic
  18449. 389346
  18450. Node: Sleep Intrinsic
  18451. 389719
  18452. Node: Sngl Intrinsic
  18453. 390061
  18454. Node: Spacing Intrinsic
  18455. 390450
  18456. Node: Spread Intrinsic
  18457. 390774
  18458. Node: SqRt Intrinsic
  18459. 391095
  18460. Node: SRand Intrinsic
  18461. 391699
  18462. Node: Stat Intrinsic (subroutine)
  18463. 392076
  18464. Node: Stat Intrinsic (function)
  18465. 393635
  18466. Node: Sum Intrinsic
  18467. 394943
  18468. Node: SymLnk Intrinsic (subroutine)
  18469. 395275
  18470. Node: System Intrinsic (subroutine)
  18471. 396307
  18472. Node: System_Clock Intrinsic
  18473. 397246
  18474. Node: Tan Intrinsic
  18475. 398014
  18476. Node: TanH Intrinsic
  18477. 398474
  18478. Node: Time Intrinsic (UNIX)
  18479. 398856
  18480. Node: Time8 Intrinsic
  18481. 399670
  18482. Node: Tiny Intrinsic
  18483. 400383
  18484. Node: Transfer Intrinsic
  18485. 400698
  18486. Node: Transpose Intrinsic
  18487. 401029
  18488. Node: Trim Intrinsic
  18489. 401363
  18490. Node: TtyNam Intrinsic (subroutine)
  18491. 401693
  18492. Node: TtyNam Intrinsic (function)
  18493. 402392
  18494. Node: UBound Intrinsic
  18495. 402961
  18496. Node: UMask Intrinsic (subroutine)
  18497. 403306
  18498. Node: Unlink Intrinsic (subroutine)
  18499. 404003
  18500. Node: Unpack Intrinsic
  18501. 404901
  18502. Node: Verify Intrinsic
  18503. 405236
  18504. Node: XOr Intrinsic
  18505. 405555
  18506. Node: ZAbs Intrinsic
  18507. 406071
  18508. Node: ZCos Intrinsic
  18509. 406440
  18510. Node: ZExp Intrinsic
  18511. 406813
  18512. Node: ZLog Intrinsic
  18513. 407186
  18514. Node: ZSin Intrinsic
  18515. 407559
  18516. Node: ZSqRt Intrinsic
  18517. 407933
  18518. Node: Scope and Classes of Names
  18519. 408290
  18520. Node: Underscores in Symbol Names
  18521. 408760
  18522. Node: Other Dialects
  18523. 409007
  18524. Node: Source Form
  18525. 410166
  18526. Node: Carriage Returns
  18527. 411517
  18528. Node: Tabs
  18529. 411846
  18530. Node: Short Lines
  18531. 413555
  18532. Node: Long Lines
  18533. 414529
  18534. Node: Ampersands
  18535. 415140
  18536. Node: Trailing Comment
  18537. 415394
  18538. Node: Debug Line
  18539. 416170
  18540. Node: Dollar Signs
  18541. 416839
  18542. Node: Case Sensitivity
  18543. 417125
  18544. Node: VXT Fortran
  18545. 425741
  18546. Node: Double Quote Meaning
  18547. 426924
  18548. Node: Exclamation Point
  18549. 427852
  18550. Node: Fortran 90
  18551. 428895
  18552. Node: Pedantic Compilation
  18553. 429947
  18554. Node: Distensions
  18555. 433911
  18556. Node: Ugly Implicit Argument Conversion
  18557. 435442
  18558. Node: Ugly Assumed-Size Arrays
  18559. 436056
  18560. Node: Ugly Complex Part Extraction
  18561. 437777
  18562. Node: Ugly Null Arguments
  18563. 439399
  18564. Node: Ugly Conversion of Initializers
  18565. 441002
  18566. Node: Ugly Integer Conversions
  18567. 442767
  18568. Node: Ugly Assigned Labels
  18569. 443875
  18570. Node: Compiler
  18571. 445806
  18572. Node: Compiler Limits
  18573. 446412
  18574. Node: Compiler Types
  18575. 447295
  18576. Node: Compiler Constants
  18577. 451994
  18578. Node: Compiler Intrinsics
  18579. 452853
  18580. Node: Intrinsic Groups
  18581. 453780
  18582. Node: Other Intrinsics
  18583. 457221
  18584. Node: ACosD Intrinsic
  18585. 464819
  18586. Node: AIMax0 Intrinsic
  18587. 465100
  18588. Node: AIMin0 Intrinsic
  18589. 465409
  18590. Node: AJMax0 Intrinsic
  18591. 465719
  18592. Node: AJMin0 Intrinsic
  18593. 466029
  18594. Node: ASinD Intrinsic
  18595. 466338
  18596. Node: ATan2D Intrinsic
  18597. 466644
  18598. Node: ATanD Intrinsic
  18599. 466952
  18600. Node: BITest Intrinsic
  18601. 467258
  18602. Node: BJTest Intrinsic
  18603. 467567
  18604. Node: CDAbs Intrinsic
  18605. 467876
  18606. Node: CDCos Intrinsic
  18607. 468249
  18608. Node: CDExp Intrinsic
  18609. 468624
  18610. Node: CDLog Intrinsic
  18611. 468999
  18612. Node: CDSin Intrinsic
  18613. 469374
  18614. Node: CDSqRt Intrinsic
  18615. 469750
  18616. Node: ChDir Intrinsic (function)
  18617. 470143
  18618. Node: ChMod Intrinsic (function)
  18619. 470970
  18620. Node: CosD Intrinsic
  18621. 472082
  18622. Node: DACosD Intrinsic
  18623. 472394
  18624. Node: DASinD Intrinsic
  18625. 472702
  18626. Node: DATan2D Intrinsic
  18627. 473013
  18628. Node: DATanD Intrinsic
  18629. 473327
  18630. Node: Date Intrinsic
  18631. 473636
  18632. Node: DbleQ Intrinsic
  18633. 474265
  18634. Node: DCmplx Intrinsic
  18635. 474569
  18636. Node: DConjg Intrinsic
  18637. 476200
  18638. Node: DCosD Intrinsic
  18639. 476585
  18640. Node: DFloat Intrinsic
  18641. 476891
  18642. Node: DFlotI Intrinsic
  18643. 477263
  18644. Node: DFlotJ Intrinsic
  18645. 477573
  18646. Node: DImag Intrinsic
  18647. 477882
  18648. Node: DReal Intrinsic
  18649. 478259
  18650. Node: DSinD Intrinsic
  18651. 479406
  18652. Node: DTanD Intrinsic
  18653. 479710
  18654. Node: Dtime Intrinsic (function)
  18655. 480025
  18656. Node: FGet Intrinsic (function)
  18657. 480919
  18658. Node: FGetC Intrinsic (function)
  18659. 481692
  18660. Node: FloatI Intrinsic
  18661. 482508
  18662. Node: FloatJ Intrinsic
  18663. 482828
  18664. Node: FPut Intrinsic (function)
  18665. 483147
  18666. Node: FPutC Intrinsic (function)
  18667. 483883
  18668. Node: IDate Intrinsic (VXT)
  18669. 484676
  18670. Node: IIAbs Intrinsic
  18671. 485395
  18672. Node: IIAnd Intrinsic
  18673. 485705
  18674. Node: IIBClr Intrinsic
  18675. 486010
  18676. Node: IIBits Intrinsic
  18677. 486319
  18678. Node: IIBSet Intrinsic
  18679. 486629
  18680. Node: IIDiM Intrinsic
  18681. 486938
  18682. Node: IIDInt Intrinsic
  18683. 487244
  18684. Node: IIDNnt Intrinsic
  18685. 487553
  18686. Node: IIEOr Intrinsic
  18687. 487862
  18688. Node: IIFix Intrinsic
  18689. 488167
  18690. Node: IInt Intrinsic
  18691. 488470
  18692. Node: IIOr Intrinsic
  18693. 488769
  18694. Node: IIQint Intrinsic
  18695. 489069
  18696. Node: IIQNnt Intrinsic
  18697. 489377
  18698. Node: IIShftC Intrinsic
  18699. 489688
  18700. Node: IISign Intrinsic
  18701. 490002
  18702. Node: IMax0 Intrinsic
  18703. 490312
  18704. Node: IMax1 Intrinsic
  18705. 490617
  18706. Node: IMin0 Intrinsic
  18707. 490921
  18708. Node: IMin1 Intrinsic
  18709. 491225
  18710. Node: IMod Intrinsic
  18711. 491528
  18712. Node: INInt Intrinsic
  18713. 491828
  18714. Node: INot Intrinsic
  18715. 492130
  18716. Node: IZExt Intrinsic
  18717. 492430
  18718. Node: JIAbs Intrinsic
  18719. 492733
  18720. Node: JIAnd Intrinsic
  18721. 493037
  18722. Node: JIBClr Intrinsic
  18723. 493342
  18724. Node: JIBits Intrinsic
  18725. 493651
  18726. Node: JIBSet Intrinsic
  18727. 493961
  18728. Node: JIDiM Intrinsic
  18729. 494270
  18730. Node: JIDInt Intrinsic
  18731. 494576
  18732. Node: JIDNnt Intrinsic
  18733. 494885
  18734. Node: JIEOr Intrinsic
  18735. 495194
  18736. Node: JIFix Intrinsic
  18737. 495499
  18738. Node: JInt Intrinsic
  18739. 495802
  18740. Node: JIOr Intrinsic
  18741. 496101
  18742. Node: JIQint Intrinsic
  18743. 496401
  18744. Node: JIQNnt Intrinsic
  18745. 496709
  18746. Node: JIShft Intrinsic
  18747. 497019
  18748. Node: JIShftC Intrinsic
  18749. 497330
  18750. Node: JISign Intrinsic
  18751. 497644
  18752. Node: JMax0 Intrinsic
  18753. 497954
  18754. Node: JMax1 Intrinsic
  18755. 498259
  18756. Node: JMin0 Intrinsic
  18757. 498563
  18758. Node: JMin1 Intrinsic
  18759. 498867
  18760. Node: JMod Intrinsic
  18761. 499170
  18762. Node: JNInt Intrinsic
  18763. 499470
  18764. Node: JNot Intrinsic
  18765. 499772
  18766. Node: JZExt Intrinsic
  18767. 500072
  18768. Node: Kill Intrinsic (function)
  18769. 500385
  18770. Node: Link Intrinsic (function)
  18771. 501067
  18772. Node: QAbs Intrinsic
  18773. 501879
  18774. Node: QACos Intrinsic
  18775. 502189
  18776. Node: QACosD Intrinsic
  18777. 502493
  18778. Node: QASin Intrinsic
  18779. 502801
  18780. Node: QASinD Intrinsic
  18781. 503107
  18782. Node: QATan Intrinsic
  18783. 503415
  18784. Node: QATan2 Intrinsic
  18785. 503721
  18786. Node: QATan2D Intrinsic
  18787. 504031
  18788. Node: QATanD Intrinsic
  18789. 504345
  18790. Node: QCos Intrinsic
  18791. 504654
  18792. Node: QCosD Intrinsic
  18793. 504955
  18794. Node: QCosH Intrinsic
  18795. 505258
  18796. Node: QDiM Intrinsic
  18797. 505561
  18798. Node: QExp Intrinsic
  18799. 505860
  18800. Node: QExt Intrinsic
  18801. 506158
  18802. Node: QExtD Intrinsic
  18803. 506457
  18804. Node: QFloat Intrinsic
  18805. 506761
  18806. Node: QInt Intrinsic
  18807. 507068
  18808. Node: QLog Intrinsic
  18809. 507368
  18810. Node: QLog10 Intrinsic
  18811. 507668
  18812. Node: QMax1 Intrinsic
  18813. 507975
  18814. Node: QMin1 Intrinsic
  18815. 508280
  18816. Node: QMod Intrinsic
  18817. 508583
  18818. Node: QNInt Intrinsic
  18819. 508883
  18820. Node: QSin Intrinsic
  18821. 509185
  18822. Node: QSinD Intrinsic
  18823. 509485
  18824. Node: QSinH Intrinsic
  18825. 509788
  18826. Node: QSqRt Intrinsic
  18827. 510092
  18828. Node: QTan Intrinsic
  18829. 510395
  18830. Node: QTanD Intrinsic
  18831. 510695
  18832. Node: QTanH Intrinsic
  18833. 510998
  18834. Node: Rename Intrinsic (function)
  18835. 511314
  18836. Node: Secnds Intrinsic
  18837. 512119
  18838. Node: Signal Intrinsic (function)
  18839. 512494
  18840. Node: SinD Intrinsic
  18841. 515323
  18842. Node: SnglQ Intrinsic
  18843. 515635
  18844. Node: SymLnk Intrinsic (function)
  18845. 515950
  18846. Node: System Intrinsic (function)
  18847. 516818
  18848. Node: TanD Intrinsic
  18849. 518145
  18850. Node: Time Intrinsic (VXT)
  18851. 518462
  18852. Node: UMask Intrinsic (function)
  18853. 518993
  18854. Node: Unlink Intrinsic (function)
  18855. 519601
  18856. Node: ZExt Intrinsic
  18857. 520330
  18858. Node: Other Compilers
  18859. 520618
  18860. Node: Dropping f2c Compatibility
  18861. 522998
  18862. Node: Compilers Other Than f2c
  18863. 525824
  18864. Node: Other Languages
  18865. 527623
  18866. Node: Interoperating with C and C++
  18867. 527875
  18868. Node: C Interfacing Tools
  18869. 528908
  18870. Node: C Access to Type Information
  18871. 529836
  18872. Node: f2c Skeletons and Prototypes
  18873. 530523
  18874. Node: C++ Considerations
  18875. 532221
  18876. Node: Startup Code
  18877. 532876
  18878. Node: Installation
  18879. 533787
  18880. Node: Prerequisites
  18881. 534943
  18882. Node: Problems Installing
  18883. 543430
  18884. Node: General Problems
  18885. 544125
  18886. Node: GNU C Required
  18887. 544898
  18888. Node: Patching GNU CC Necessary
  18889. 545599
  18890. Node: Building GNU CC Necessary
  18891. 546449
  18892. Node: Missing strtoul
  18893. 546795
  18894. Node: Object File Differences
  18895. 548209
  18896. Node: Cleanup Kills Stage Directories
  18897. 548906
  18898. Node: Missing gperf?
  18899. 549326
  18900. Node: System-specific Problems
  18901. 550737
  18902. Node: Cross-compiler Problems
  18903. 551390
  18904. Node: Settings
  18905. 553603
  18906. Node: Larger File Unit Numbers
  18907. 554681
  18908. Node: Always Flush Output
  18909. 556264
  18910. Node: Maximum Stackable Size
  18911. 558124
  18912. Node: Floating-point Bit Patterns
  18913. 558980
  18914. Node: Large Initialization
  18915. 559735
  18916. Node: Alpha Problems Fixed
  18917. 561324
  18918. Node: Quick Start
  18919. 562211
  18920. Node: Complete Installation
  18921. 572947
  18922. Node: Unpacking
  18923. 573527
  18924. Node: Merging Distributions
  18925. 576616
  18926. Node: Installing f77
  18927. 582333
  18928. Node: Installing f2c
  18929. 583678
  18930. Node: Patching GNU Fortran
  18931. 586603
  18932. Node: Where to Install
  18933. 588121
  18934. Node: Configuring gcc
  18935. 591466
  18936. Node: Building gcc
  18937. 593238
  18938. Node: Bootstrap Build
  18939. 595245
  18940. Node: Straight Build
  18941. 596991
  18942. Node: Pre-installation Checks
  18943. 598380
  18944. Node: Installation of Binaries
  18945. 601806
  18946. Node: Updating Documentation
  18947. 603167
  18948. Node: Missing bison?
  18949. 604021
  18950. Node: Missing makeinfo?
  18951. 605367
  18952. Node: Distributing Binaries
  18953. 605892
  18954. Node: Debugging and Interfacing
  18955. 611830
  18956. Node: Main Program Unit
  18957. 614514
  18958. Node: Procedures
  18959. 617011
  18960. Node: Functions
  18961. 619672
  18962. Node: Names
  18963. 621290
  18964. Node: Common Blocks
  18965. 624431
  18966. Node: Local Equivalence Areas
  18967. 626464
  18968. Node: Complex Variables
  18969. 629151
  18970. Node: Arrays
  18971. 630481
  18972. Node: Adjustable Arrays
  18973. 633815
  18974. Node: Alternate Entry Points
  18975. 636674
  18976. Node: Alternate Returns
  18977. 643376
  18978. Node: Assigned Statement Labels
  18979. 644277
  18980. Node: Run-time Library Errors
  18981. 646122
  18982. Node: Collected Fortran Wisdom
  18983. 648074
  18984. Node: Advantages Over f2c
  18985. 649510
  18986. Node: Language Extensions
  18987. 650419
  18988. Node: Compiler Options
  18989. 650926
  18990. Node: Compiler Speed
  18991. 651378
  18992. Node: Program Speed
  18993. 652088
  18994. Node: Ease of Debugging
  18995. 653673
  18996. Node: Character and Hollerith Constants
  18997. 656103
  18998. Node: Block Data and Libraries
  18999. 656897
  19000. Node: Loops
  19001. 660221
  19002. Node: Working Programs
  19003. 665437
  19004. Node: Not My Type
  19005. 666117
  19006. Node: Variables Assumed To Be Zero
  19007. 668048
  19008. Node: Variables Assumed To Be Saved
  19009. 669102
  19010. Node: Unwanted Variables
  19011. 670472
  19012. Node: Unused Arguments
  19013. 671352
  19014. Node: Surprising Interpretations of Code
  19015. 671815
  19016. Node: Aliasing Assumed To Work
  19017. 672661
  19018. Node: Output Assumed To Flush
  19019. 678577
  19020. Node: Large File Unit Numbers
  19021. 679983
  19022. Node: Overly Convenient Options
  19023. 681265
  19024. Node: Faster Programs
  19025. 684875
  19026. Node: Aligned Data
  19027. 685321
  19028. Node: Prefer Automatic Uninitialized Variables
  19029. 689165
  19030. Node: Avoid f2c Compatibility
  19031. 690531
  19032. Node: Use Submodel Options
  19033. 690999
  19034. Node: Trouble
  19035. 691822
  19036. Node: But-bugs
  19037. 693431
  19038. Node: Signal 11 and Friends
  19039. 695205
  19040. Node: Cannot Link Fortran Programs
  19041. 697284
  19042. Node: Large Common Blocks
  19043. 698567
  19044. Node: Debugger Problems
  19045. 698993
  19046. Node: NeXTStep Problems
  19047. 699515
  19048. Node: Stack Overflow
  19049. 701337
  19050. Node: Nothing Happens
  19051. 703350
  19052. Node: Strange Behavior at Run Time
  19053. 704964
  19054. Node: Floating-point Errors
  19055. 707257
  19056. Node: Actual Bugs
  19057. 711834
  19058. Node: Missing Features
  19059. 720231
  19060. Node: Better Source Model
  19061. 721948
  19062. Node: Fortran 90 Support
  19063. 723717
  19064. Node: Intrinsics in PARAMETER Statements
  19065. 724818
  19066. Node: SELECT CASE on CHARACTER Type
  19067. 725704
  19068. Node: RECURSIVE Keyword
  19069. 726002
  19070. Node: Increasing Precision/Range
  19071. 726429
  19072. Node: Popular Non-standard Types
  19073. 727966
  19074. Node: Full Support for Compiler Types
  19075. 728383
  19076. Node: Array Bounds Expressions
  19077. 729055
  19078. Node: POINTER Statements
  19079. 729502
  19080. Node: Sensible Non-standard Constructs
  19081. 730385
  19082. Node: FLUSH Statement
  19083. 732710
  19084. Node: Expressions in FORMAT Statements
  19085. 733096
  19086. Node: Explicit Assembler Code
  19087. 734271
  19088. Node: Q Edit Descriptor
  19089. 734560
  19090. Node: Old-style PARAMETER Statements
  19091. 735064
  19092. Node: TYPE and ACCEPT I/O Statements
  19093. 735798
  19094. Node: STRUCTURE UNION RECORD MAP
  19095. 736364
  19096. Node: OPEN CLOSE and INQUIRE Keywords
  19097. 736850
  19098. Node: ENCODE and DECODE
  19099. 737282
  19100. Node: Suppressing Space Padding
  19101. 738383
  19102. Node: Fortran Preprocessor
  19103. 739609
  19104. Node: Bit Operations on Floating-point Data
  19105. 740182
  19106. Node: POSIX Standard
  19107. 740696
  19108. Node: Floating-point Exception Handling
  19109. 740940
  19110. Node: Nonportable Conversions
  19111. 741982
  19112. Node: Large Automatic Arrays
  19113. 742518
  19114. Node: Support for Threads
  19115. 742925
  19116. Node: Gracefully Handle Sensible Bad Code
  19117. 743350
  19118. Node: Non-standard Conversions
  19119. 744105
  19120. Node: Non-standard Intrinsics
  19121. 744448
  19122. Node: Modifying DO Variable
  19123. 744864
  19124. Node: Better Pedantic Compilation
  19125. 745540
  19126. Node: Warn About Implicit Conversions
  19127. 746168
  19128. Node: Invalid Use of Hollerith Constant
  19129. 746755
  19130. Node: Dummy Array Without Dimensioning Dummy
  19131. 747298
  19132. Node: Invalid FORMAT Specifiers
  19133. 748211
  19134. Node: Ambiguous Dialects
  19135. 748612
  19136. Node: Unused Labels
  19137. 749023
  19138. Node: Informational Messages
  19139. 749245
  19140. Node: Uninitialized Variables at Run Time
  19141. 749648
  19142. Node: Bounds Checking at Run Time
  19143. 750255
  19144. Node: Labels Visible to Debugger
  19145. 750703
  19146. Node: Disappointments
  19147. 751109
  19148. Node: Mangling of Names
  19149. 751747
  19150. Node: Multiple Definitions of External Names
  19151. 752597
  19152. Node: Limitation on Implicit Declarations
  19153. 753960
  19154. Node: Non-bugs
  19155. 754244
  19156. Node: Backslash in Constants
  19157. 755369
  19158. Node: Initializing Before Specifying
  19159. 760258
  19160. Node: Context-Sensitive Intrinsicness
  19161. 761400
  19162. Node: Context-Sensitive Constants
  19163. 763296
  19164. Node: Equivalence Versus Equality
  19165. 766253
  19166. Node: Order of Side Effects
  19167. 768763
  19168. Node: Warnings and Errors
  19169. 770491
  19170. Node: Open Questions
  19171. 772175
  19172. Node: Bugs
  19173. 773323
  19174. Node: Bug Criteria
  19175. 774828
  19176. Node: Bug Lists
  19177. 781063
  19178. Node: Bug Reporting
  19179. 781828
  19180. Node: Sending Patches
  19181. 795275
  19182. Node: Service
  19183. 800752
  19184. Node: Adding Options
  19185. 801213
  19186. Node: Projects
  19187. 805262
  19188. Node: Efficiency
  19189. 806107
  19190. Node: Better Optimization
  19191. 809004
  19192. Node: Simplify Porting
  19193. 812374
  19194. Node: More Extensions
  19195. 814129
  19196. Node: Machine Model
  19197. 817330
  19198. Node: Internals Documentation
  19199. 818616
  19200. Node: Internals Improvements
  19201. 818930
  19202. Node: Better Diagnostics
  19203. 822474
  19204. Node: Diagnostics
  19205. 823391
  19206. Node: CMPAMBIG
  19207. 824685
  19208. Node: EXPIMP
  19209. 831152
  19210. Node: INTGLOB
  19211. 832388
  19212. Node: LEX
  19213. 834632
  19214. Node: GLOBALS
  19215. 840024
  19216. Node: Index
  19217. 841877
  19218. End Tag Table
  19219.