From 57544c29d50e6394e2a5f7e5e74f27b865fbfe1f Mon Sep 17 00:00:00 2001 From: Craig Burley Date: Sat, 13 Mar 1999 07:17:46 -0500 Subject: [PATCH] Update BUGS, INSTALL, NEWS derived files From-SVN: r25744 --- gcc/f/BUGS | 61 +- gcc/f/INSTALL | 1285 ++---------------------------------------- gcc/f/NEWS | 1486 +++---------------------------------------------- 3 files changed, 141 insertions(+), 2691 deletions(-) diff --git a/gcc/f/BUGS b/gcc/f/BUGS index cce80d7981c..0ff536d4aaa 100644 --- a/gcc/f/BUGS +++ b/gcc/f/BUGS @@ -1,27 +1,46 @@ -NOTE: This file is automatically generated from the files `bugs0.texi' -and `bugs.texi'. `BUGS' is *not* a source file, although it is -normally included within source distributions. +*Note:* This file is automatically generated from the files +`bugs0.texi' and `bugs.texi'. `BUGS' is *not* a source file, although +it is normally included within source distributions. - This file lists known bugs in the GNU Fortran compiler. Copyright -(C) 1995-1998 Free Software Foundation, Inc. You may copy, distribute, -and modify it freely as long as you preserve this copyright notice and -permission notice. + This file lists known bugs in the EGCS-1.2 version of the GNU +Fortran compiler. Copyright (C) 1995-1999 Free Software Foundation, +Inc. You may copy, distribute, and modify it freely as long as you +preserve this copyright notice and permission notice. -Bugs in GNU Fortran -******************* +Known Bugs In GNU Fortran +************************* This section identifies bugs that `g77' *users* might run into in -version {No Value For "version-g77"} of `g77'. This includes bugs that -are actually in the `gcc' back end (GBE) or in `libf2c', because those -sets of code are at least somewhat under the control of (and -necessarily intertwined with) `g77', so it isn't worth separating them -out. +the EGCS-1.2 version of `g77'. This includes bugs that are actually in +the `gcc' back end (GBE) or in `libf2c', because those sets of code are +at least somewhat under the control of (and necessarily intertwined +with) `g77', so it isn't worth separating them out. - For information on bugs in *other* versions of `g77', *Note News -About GNU Fortran: News. + For information on bugs in *other* versions of `g77', see +`egcs/gcc/f/NEWS'. There, lists of bugs fixed in various versions of +`g77', can help determine what bugs existed in prior versions. + + *Warning:* The information below is still under development, and +might not accurately reflect the `g77' code base of which it is a part. +Efforts are made to keep it somewhat up-to-date, but they are +particularly concentrated on any version of this information that is +distributed as part of a *released* `g77'. + + In particular, while this information is intended to apply to the +EGCS-1.2 version of `g77', only an official *release* of that version +is expected to contain documentation that is most consistent with the +`g77' product in that version. + + An online, "live" version of this document (derived directly from +the mainline, development version of `g77' within `egcs') is available +via `http://egcs.cygnus.com/onlinedocs/g77_bugs.html'. Follow the +"Known Bugs" link. For information on bugs that might afflict people who configure, -port, build, and install `g77', *Note Problems Installing::. +port, build, and install `g77', see "Problems Installing" in +`egcs/gcc/f/INSTALL'. + + The following information was last updated on 1999-03-13: * Automatic arrays possibly aren't working on HP-UX systems, at least in HP-UX version 10.20. Writing into them apparently causes @@ -78,10 +97,7 @@ port, build, and install `g77', *Note Problems Installing::. compiler.) Note that `g77' does display a warning message to notify the user - before the compiler appears to hang. *Note Initialization of - Large Aggregate Areas: Large Initialization, for information on - how to change the point at which `g77' decides to issue this - warning. + before the compiler appears to hang. * `g77' doesn't emit variable and array members of common blocks for use with a debugger (the `-g' command-line option). The code is @@ -94,9 +110,6 @@ port, build, and install `g77', *Note Problems Installing::. whereby some rudimentary information on a member is written as a string that is the member's value as a character string. - *Note Options for Code Generation Conventions: Code Gen Options, - for information on the `-fdebug-kludge' option. - * When debugging, after starting up the debugger but before being able to see the source code for the main program unit, the user must currently set a breakpoint at `MAIN__' (or `MAIN___' or diff --git a/gcc/f/INSTALL b/gcc/f/INSTALL index 1b1dbb51938..e1bac001019 100644 --- a/gcc/f/INSTALL +++ b/gcc/f/INSTALL @@ -1,252 +1,40 @@ -NOTE: This file is automatically generated from the files +*Note:* This file is automatically generated from the files `install0.texi' and `g77install.texi'. `INSTALL' is *not* a source file, although it is normally included within source distributions. This file contains installation information for the GNU Fortran -compiler. Copyright (C) 1995-1998 Free Software Foundation, Inc. You -may copy, distribute, and modify it freely as long as you preserve this -copyright notice and permission notice. +compiler. Copyright (C) {No Value For "copyrights-install"} Free +Software Foundation, Inc. You may copy, distribute, and modify it +freely as long as you preserve this copyright notice and permission +notice. Installing GNU Fortran ********************** The following information describes how to install `g77'. - Note that, for `egcs' users, much of this information is obsolete, + Note that, for `egcs' users, much of the information is obsolete, and is superceded by the `egcs' installation procedures. Such -information is explicitly flagged as such. +information is accordingly omitted and flagged as such. - The information in this file generally pertains to dealing with -*source* distributions of `g77' and `gcc'. It is possible that some of -this information will be applicable to some *binary* distributions of -these products--however, since these distributions are not made by the -maintainers of `g77', responsibility for binary distributions rests with -whoever built and first distributed them. + *Warning:* The information below is still under development, and +might not accurately reflect the `g77' code base of which it is a part. +Efforts are made to keep it somewhat up-to-date, but they are +particularly concentrated on any version of this information that is +distributed as part of a *released* `g77'. - Nevertheless, efforts to make `g77' easier to both build and install -from source and package up as a binary distribution are ongoing. + In particular, while this information is intended to apply to the +EGCS-1.2 version of `g77', only an official *release* of that version +is expected to contain documentation that is most consistent with the +`g77' product in that version. + + The following information was last updated on 1999-03-13: Prerequisites ============= - *Version info:* For `egcs' users, the following information is -superceded by the `egcs' installation instructions. - - The procedures described to unpack, configure, build, and install -`g77' assume your system has certain programs already installed. - - The following prerequisites should be met by your system before you -follow the `g77' installation instructions: - -`gzip' and `tar' - To unpack the `gcc' and `g77' distributions, you'll need the - `gunzip' utility in the `gzip' distribution. Most UNIX systems - already have `gzip' installed. If yours doesn't, you can get it - from the FSF. - - Note that you'll need `tar' and other utilities as well, but all - UNIX systems have these. There are GNU versions of all these - available--in fact, a complete GNU UNIX system can be put together - on most systems, if desired. - - The version of GNU `gzip' used to package this release is - 1.2.4. (The version of GNU `tar' used to package this release is - 1.12.) - -`gcc-2.8.1.tar.gz' - You need to have this, or some other applicable, version of `gcc' - on your system. The version should be an exact copy of a - distribution from the FSF. Its size is approximately 8.4MB. - - If you've already unpacked `gcc-2.8.1.tar.gz' into a directory - (named `gcc-2.8.1') called the "source tree" for `gcc', you can - delete the distribution itself, but you'll need to remember to - skip any instructions to unpack this distribution. - - Without an applicable `gcc' source tree, you cannot build `g77'. - You can obtain an FSF distribution of `gcc' from the FSF. - -`g77-0.5.24.tar.gz' - You probably have already unpacked this package, or you are - reading an advance copy of these installation instructions, which - are contained in this distribution. The size of this package is - approximately 1.4MB. - - You can obtain an FSF distribution of `g77' from the FSF, the same - way you obtained `gcc'. - -Enough disk space - The amount of disk space needed to unpack, build, install, and use - `g77' depends on the type of system you're using, how you build - `g77', and how much of it you install (primarily, which languages - you install). - - The sizes shown below assume all languages distributed in - `gcc-2.8.1', plus `g77', will be built and installed. These sizes - are indicative of GNU/Linux systems on Intel x86 running COFF and - on Digital Alpha (AXP) systems running ELF. These should be - fairly representative of 32-bit and 64-bit systems, respectively. - - Note that all sizes are approximate and subject to change without - notice! They are based on preliminary releases of g77 made shortly - before the public beta release. - - -- `gcc' and `g77' distributions occupy 10MB packed, 40MB - unpacked. These consist of the source code and documentation, - plus some derived files (mostly documentation), for `gcc' and - `g77'. Any deviations from these numbers for different kinds - of systems are likely to be very minor. - - -- A "bootstrap" build requires an additional 91MB for a total - of 132MB on an ix86, and an additional 136MB for a total of - 177MB on an Alpha. - - -- Removing `gcc/stage1' after the build recovers 13MB for a - total of 119MB on an ix86, and recovers 21MB for a total of - 155MB on an Alpha. - - After doing this, the integrity of the build can still be - verified via `make compare', and the `gcc' compiler modified - and used to build itself for testing fairly quickly, using - the copy of the compiler kept in `gcc/stage2'. - - -- Removing `gcc/stage2' after the build further recovers 39MB - for a total of 80MB, and recovers 57MB for a total of 98MB on - an Alpha. - - After doing this, the compiler can still be installed, - especially if GNU `make' is used to avoid gratuitous rebuilds - (or, the installation can be done by hand). - - -- Installing `gcc' and `g77' copies 23MB onto the `--prefix' - disk for a total of 103MB on an ix86, and copies 31MB onto - the `--prefix' disk for a total of 130MB on an Alpha. - - After installation, if no further modifications and builds of - `gcc' or `g77' are planned, the source and build directory may be - removed, leaving the total impact on a system's disk storage as - that of the amount copied during installation. - - Systems with the appropriate version of `gcc' installed don't - require the complete bootstrap build. Doing a "straight build" - requires about as much space as does a bootstrap build followed by - removing both the `gcc/stage1' and `gcc/stage2' directories. - - Installing `gcc' and `g77' over existing versions might require - less *new* disk space, but note that, unlike many products, `gcc' - installs itself in a way that avoids overwriting other installed - versions of itself, so that other versions may easily be invoked - (via `gcc -V VERSION'). - - So, the amount of space saved as a result of having an existing - version of `gcc' and `g77' already installed is not - much--typically only the command drivers (`gcc', `g77', `g++', and - so on, which are small) and the documentation is overwritten by - the new installation. The rest of the new installation is done - without replacing existing installed versions (assuming they have - different version numbers). - -`make' - Your system must have `make', and you will probably save yourself - a lot of trouble if it is GNU `make' (sometimes referred to as - `gmake'). In particular, you probably need GNU `make' to build - outside the source directory (with `configure''s `--srcdir' - option.) - - The version of GNU `make' used to develop this release is - 3.76.1. - -`cc' - Your system must have a working C compiler. If it doesn't, you - might be able to obtain a prebuilt binary of some version of `gcc' - from the network or on CD-ROM, perhaps from the FSF. The best - source of information about binaries is probably a system-specific - Usenet news group, initially via its FAQ. - - *Note Installing GNU CC: (gcc)Installation, for more information - on prerequisites for installing `gcc'. - -`sed' - All UNIX systems have `sed', but some have a broken version that - cannot handle configuring, building, or installing `gcc' or `g77'. - - The version of GNU `sed' used to develop this release is - 2.05. (Note that GNU `sed' version 3.0 was withdrawn by the - FSF--if you happen to have this version installed, replace it with - version 2.05 immediately. See a GNU distribution site for further - explanation.) - -`root' access or equivalent - To perform the complete installation procedures on a system, you - need to have `root' access to that system, or equivalent access to - the `--prefix' directory tree specified on the `configure' command - line. - - Portions of the procedure (such as configuring and building `g77') - can be performed by any user with enough disk space and virtual - memory. - - However, these instructions are oriented towards less-experienced - users who want to install `g77' on their own personal systems. - - System administrators with more experience will want to determine - for themselves how they want to modify the procedures described - below to suit the needs of their installation. - -`autoconf' - The version of GNU `autoconf' used to develop this release is - 2.12. - - `autoconf' is not needed in the typical case of installing `gcc' - and `g77'. *Note Missing tools?::, for information on when it - might be needed and how to work around not having it. - -`bison' - The version of GNU `bison' used to develop this release is - 1.25. - - `bison' is not needed in the typical case of installing `gcc' and - `g77'. *Note Missing tools?::, for information on when it might - be needed and how to work around not having it. - -`gperf' - The version of GNU `gperf' used to develop this release is - 2.5. - - `gperf' is not needed in the typical case of installing `gcc' and - `g77'. *Note Missing tools?::, for information on when it might - be needed and how to work around not having it. - -`makeinfo' - The version of GNU `makeinfo' used to develop this release is - 1.68. - - `makeinfo' is part of the GNU `texinfo' package; `makeinfo' - version 1.68 is distributed as part of GNU `texinfo' version - 3.12. - - `makeinfo' is not needed in the typical case of installing `gcc' - and `g77'. *Note Missing tools?::, for information on when it - might be needed and how to work around not having it. - - An up-to-date version of GNU `makeinfo' is still convenient when - obtaining a new version of a GNU distribution such as `gcc' or - `g77', as it allows you to obtain the `.diff.gz' file instead of - the entire `.tar.gz' distribution (assuming you have installed - `patch'). - -`patch' - The version of GNU `patch' used to develop this release is - 2.5. - - Beginning with `g77' version 0.5.23, it is no longer necessary to - patch the `gcc' back end to build `g77'. - - An up-to-date version of GNU `patch' is still convenient when - obtaining a new version of a GNU distribution such as `gcc' or - `g77', as it allows you to obtain the `.diff.gz' file instead of - the entire `.tar.gz' distribution (assuming you have installed the - tools needed to rebuild derived files, such as `makeinfo'). + For `egcs' users, this information is superceded by the `egcs' +installation instructions. Problems Installing =================== @@ -274,7 +62,7 @@ are no plans for an interim fix. This requirement does not mean you must already have `gcc' installed to build `g77'. As long as you have a working C compiler, you can use a -bootstrap build to automate the process of first building `gcc' using +"bootstrap" build to automate the process of first building `gcc' using the working C compiler you have, then building `g77' and rebuilding `gcc' using that just-built `gcc', and so on. @@ -295,47 +83,7 @@ not yet established. Missing strtoul or bsearch .......................... - *Version info:* The following information does not apply to the -`egcs' version of `g77'. - - On SunOS4 systems, linking the `f771' program used to produce an -error message concerning an undefined symbol named `_strtoul', because -the `strtoul' library function is not provided on that system. - - Other systems have, in the past, been reported to not provide their -own `strtoul' or `bsearch' function. - - Some versions `g77' tried to default to providing bare-bones -versions of `bsearch' and `strtoul' automatically, but every attempt at -this has failed for at least one kind of system. - - To limit the failures to those few systems actually missing the -required routines, the bare-bones versions are still provided, in -`gcc/f/proj.c', if the appropriate macros are defined. These are -`NEED_BSEARCH' for `bsearch' and `NEED_STRTOUL' for `NEED_STRTOUL'. - - Therefore, if you are sure your system is missing `bsearch' or -`strtoul' in its library, define the relevant macro(s) before building -`g77'. This can be done by editing `gcc/f/proj.c' and inserting either -or both of the following `#define' statements before the comment shown: - - /* Insert #define statements here. */ - - #define NEED_BSEARCH - #define NEED_STRTOUL - - Then, continue configuring and building `g77' as usual. - - Or, you can define these on the `make' command line. To build with -the bundled `cc' on SunOS4, for example, try: - make bootstrap BOOT_CFLAGS='-O2 -g -DNEED_STRTOUL' - - If you then encounter problems compiling `gcc/f/proj.c', it might be -due to a discrepancy between how `bsearch' or `strtoul' are defined by -that file and how they're declared by your system's header files. - - In that case, you'll have to use some basic knowledge of C to work -around the problem, perhaps by editing `gcc/f/proj.c' somewhat. + This information does not apply to the `egcs' version of `g77'. Cleanup Kills Stage Directories ............................... @@ -375,7 +123,7 @@ System-specific Problems A linker bug on some versions of AIX 4.1 might prevent building when `g77' is built within `gcc'. It might also occur when building within -`egcs'. *Note LINKFAIL::. +`egcs'. Cross-compiler Problems ----------------------- @@ -426,7 +174,7 @@ Changing Settings Before Building ================================= Here are some internal `g77' settings that can be changed by editing -source files in `gcc/f/' before building. +source files in `egcs/gcc/f/' before building. This information, and perhaps even these settings, represent stop-gap solutions to problems people doing various ports of `g77' have @@ -446,7 +194,7 @@ use of unit numbers higher than 99, you can change the value of the `MXUNIT' macro, which represents the maximum unit number, to an appropriately higher value. - To do this, edit the file `f/runtime/libI77/fio.h' in your `g77' + To do this, edit the file `egcs/libf2c/libI77/fio.h' in your `g77' source tree, changing the following line: #define MXUNIT 100 @@ -495,8 +243,8 @@ are building, you might wish to modify the `g77' source tree so that the version of `libg2c' is built with the `ALWAYS_FLUSH' macro defined, enabling this behavior. - To do this, find this line in `f/runtime/f2c.h' in your `g77' source -tree: + To do this, find this line in `egcs/libf2c/f2c.h' in your `g77' +source tree: /* #define ALWAYS_FLUSH */ @@ -510,7 +258,7 @@ Maximum Stackable Size `g77', on most machines, puts many variables and arrays on the stack where possible, and can be configured (by changing -`FFECOM_sizeMAXSTACKITEM' in `gcc/f/com.c') to force smaller-sized +`FFECOM_sizeMAXSTACKITEM' in `egcs/gcc/f/com.c') to force smaller-sized entities into static storage (saving on stack space) or permit larger-sized entities to be put on the stack (which can improve run-time performance, as it presents more opportunities for the GBE to @@ -545,9 +293,9 @@ factor of 10. This size currently is quite small, since `g77' currently has a known bug requiring too much memory and time to handle such cases. In -`gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined to the -minimum size for the warning to appear. The size is specified in -storage units, which can be bytes, words, or whatever, on a +`egcs/gcc/f/data.c', the macro `FFEDATA_sizeTOO_BIG_INIT_' is defined +to the minimum size for the warning to appear. The size is specified +in storage units, which can be bytes, words, or whatever, on a case-by-case basis. After changing this macro definition, you must (of course) rebuild @@ -586,977 +334,18 @@ support 64-bit systems. Quick Start =========== - *Version info:* For `egcs' users, the following information is -superceded by the `egcs' installation instructions. - - This procedure configures, builds, and installs `g77' "out of the -box" and works on most UNIX systems. Each command is identified by a -unique number, used in the explanatory text that follows. For the most -part, the output of each command is not shown, though indications of -the types of responses are given in a few cases. - - To perform this procedure, the installer must be logged in as user -`root'. Much of it can be done while not logged in as `root', and -users experienced with UNIX administration should be able to modify the -procedure properly to do so. - - Following traditional UNIX conventions, it is assumed that the -source trees for `g77' and `gcc' will be placed in `/usr/src'. It also -is assumed that the source distributions themselves already reside in -`/usr/FSF', a naming convention used by the author of `g77' on his own -system: - - /usr/FSF/gcc-2.8.1.tar.gz - /usr/FSF/g77-0.5.24.tar.gz - - If you vary *any* of the steps below, you might run into trouble, -including possibly breaking existing programs for other users of your -system. Before doing so, it is wise to review the explanations of some -of the steps. These explanations follow this list of steps. - - sh[ 1]# cd /usr/src - - sh[ 2]# gunzip -c < /usr/FSF/gcc-2.8.1.tar.gz | tar xf - - [Might say "Broken pipe"...that is normal on some systems.] - - sh[ 3]# gunzip -c < /usr/FSF/g77-0.5.24.tar.gz | tar xf - - ["Broken pipe" again possible.] - - sh[ 4]# ln -s gcc-2.8.1 gcc - - sh[ 5]# ln -s g77-0.5.24 g77 - - sh[ 6]# mv -i g77/* gcc - [No questions should be asked by mv here; or, you made a mistake.] - - sh[ 7]# cd gcc - sh[ 8]# ./configure --prefix=/usr - [Do not do the above if gcc is not installed in /usr/bin. - You might need a different --prefix=..., as - described below.] - - sh[ 9]# make bootstrap - [This takes a long time, and is where most problems occur.] - - sh[10]# make compare - [This verifies that the compiler is `sane'. - If any files are printed, you have likely found a g77 bug.] - - sh[11]# rm -fr stage1 - - sh[12]# make -k install - [The actual installation.] - - sh[13]# g77 -v - [Verify that g77 is installed, obtain version info.] - - sh[14]# - - *Note Updating Your Info Directory: Updating Documentation, for -information on how to update your system's top-level `info' directory -to contain a reference to this manual, so that users of `g77' can -easily find documentation instead of having to ask you for it. - - Elaborations of many of the above steps follows: - -Step 1: `cd /usr/src' - You can build `g77' pretty much anyplace. By convention, this - manual assumes `/usr/src'. It might be helpful if other users on - your system knew where to look for the source code for the - installed version of `g77' and `gcc' in any case. - -Step 3: `gunzip -d < /usr/FSF/g77-0.5.24.tar.gz | tar xf -' - It is not always necessary to obtain the latest version of `g77' - as a complete `.tar.gz' file if you have a complete, earlier - distribution of `g77'. If appropriate, you can unpack that earlier - version of `g77', and then apply the appropriate patches to - achieve the same result--a source tree containing version - 0.5.24 of `g77'. - -Step 4: `ln -s gcc-2.8.1 gcc' - -Step 5: `ln -s g77-0.5.24 g77' - These commands mainly help reduce typing, and help reduce visual - clutter in examples in this manual showing what to type to install - `g77'. - - *Note Unpacking::, for information on using distributions of `g77' - made by organizations other than the FSF. - -Step 6: `mv -i g77/* gcc' - After doing this, you can, if you like, type `rm g77' and `rmdir - g77-0.5.24' to remove the empty directory and the symbol link to - it. But, it might be helpful to leave them around as quick - reminders of which version(s) of `g77' are installed on your - system. - - *Note Unpacking::, for information on the contents of the `g77' - directory (as merged into the `gcc' directory). - -Step 8: `./configure --prefix=/usr' - This is where you specify that the `g77' and `gcc' executables are - to be installed in `/usr/bin/', the `g77' and `gcc' documentation - is to be installed in `/usr/info/' and `/usr/man/', and so on. - - You should ensure that any existing installation of the `gcc' - executable is in `/usr/bin/'. - - However, if that existing version of `gcc' is not 2.8.1, or if you - simply wish to avoid risking overwriting it with a newly built - copy of the same version, you can specify `--prefix=/usr/local' - (which is the default) or some other path, and invoke the newly - installed version directly from that path's `bin' directory. - - *Note Where in the World Does Fortran (and GNU CC) Go?: Where to - Install, for more information on determining where to install - `g77'. *Note Configuring gcc::, for more information on the - configuration process triggered by invoking the `./configure' - script. - -Step 9: `make bootstrap' - *Note Installing GNU CC: (gcc)Installation, for information on the - kinds of diagnostics you should expect during this procedure. - - *Note Building gcc::, for complete `g77'-specific information on - this step. - -Step 10: `make compare' - *Note Where to Port Bugs: Bug Lists, for information on where to - report that you observed files having different contents during - this phase. - - *Note How to Report Bugs: Bug Reporting, for information on *how* - to report bugs like this. - -Step 11: `rm -fr stage1' - You don't need to do this, but it frees up disk space. - -Step 12: `make -k install' - If this doesn't seem to work, try: - - make -k install install-libf77 - - Or, make sure you're using GNU `make'. - - *Note Installation of Binaries::, for more information. - - *Note Updating Your Info Directory: Updating Documentation, for - information on entering this manual into your system's list of - texinfo manuals. - -Step 13: `g77 -v' - If this command prints approximately 25 lines of output, including - the GNU Fortran Front End version number (which should be the same - as the version number for the version of `g77' you just built and - installed) and the version numbers for the three parts of the - `libf2c' library (`libF77', `libI77', `libU77'), and those version - numbers are all in agreement, then there is a high likelihood that - the installation has been successfully completed. - - You might consider doing further testing. For example, log in as - a non-privileged user, then create a small Fortran program, such - as: - - PROGRAM SMTEST - DO 10 I=1, 10 - PRINT *, 'Hello World #', I - 10 CONTINUE - END - - Compile, link, and run the above program, and, assuming you named - the source file `smtest.f', the session should look like this: - - sh# g77 -o smtest smtest.f - sh# ./smtest - Hello World # 1 - Hello World # 2 - Hello World # 3 - Hello World # 4 - Hello World # 5 - Hello World # 6 - Hello World # 7 - Hello World # 8 - Hello World # 9 - Hello World # 10 - sh# - - If invoking `g77' doesn't seem to work, the problem might be that - you've installed it in a location that is not in your shell's - search path. For example, if you specified `--prefix=/gnu', and - `/gnu/bin' is not in your `PATH' environment variable, you must - explicitly specify the location of the compiler via `/gnu/bin/g77 - -o smtest smtest.f'. - - After proper installation, you don't need to keep your gcc and g77 - source and build directories around anymore. Removing them can - free up a lot of disk space. + For `egcs' users, this information is superceded by the `egcs' +installation instructions. Complete Installation ===================== - *Version info:* For `egcs' users, the following information is -mostly superceded by the `egcs' installation instructions. - - Here is the complete `g77'-specific information on how to configure, -build, and install `g77'. - -Unpacking ---------- - - The `gcc' source distribution is a stand-alone distribution. It is -designed to be unpacked (producing the `gcc' source tree) and built as -is, assuming certain prerequisites are met (including the availability -of compatible UNIX programs such as `make', `cc', and so on). - - However, before building `gcc', you will want to unpack and merge -the `g77' distribution in with it, so that you build a Fortran-capable -version of `gcc', which includes the `g77' command, the necessary -run-time libraries, and this manual. - - Unlike `gcc', the `g77' source distribution is *not* a stand-alone -distribution. It is designed to be unpacked and, afterwards, -immediately merged into an applicable `gcc' source tree. That is, the -`g77' distribution *augments* a `gcc' distribution--without `gcc', -generally only the documentation is immediately usable. - - A sequence of commands typically used to unpack `gcc' and `g77' is: - - sh# cd /usr/src - sh# gunzip -c /usr/FSF/gcc-2.8.1.tar.gz | tar xf - - sh# gunzip -c /usr/FSF/g77-0.5.24.tar.gz | tar xf - - sh# ln -s gcc-2.8.1 gcc - sh# ln -s g77-0.5.24 g77 - sh# mv -i g77/* gcc - - *Notes:* The commands beginning with `gunzip...' might print `Broken -pipe...' as they complete. That is nothing to worry about, unless you -actually *hear* a pipe breaking. The `ln' commands are helpful in -reducing typing and clutter in installation examples in this manual. -Hereafter, the top level of `gcc' source tree is referred to as `gcc', -and the top level of just the `g77' source tree (prior to issuing the -`mv' command, above) is referred to as `g77'. - - There are three top-level names in a `g77' distribution: - - g77/COPYING.g77 - g77/README.g77 - g77/f - - All three entries should be moved (or copied) into a `gcc' source -tree (typically named after its version number and as it appears in the -FSF distributions--e.g. `gcc-2.8.1'). - - `g77/f' is the subdirectory containing all of the code, -documentation, and other information that is specific to `g77'. The -other two files exist to provide information on `g77' to someone -encountering a `gcc' source tree with `g77' already present, who has -not yet read these installation instructions and thus needs help -understanding that the source tree they are looking at does not come -from a single FSF distribution. They also help people encountering an -unmerged `g77' source tree for the first time. - - *Note:* Please use *only* `gcc' and `g77' source trees as -distributed by the FSF. Use of modified versions is likely to result -in problems that appear to be in the `g77' code but, in fact, are not. -Do not use such modified versions unless you understand all the -differences between them and the versions the FSF distributes--in which -case you should be able to modify the `g77' (or `gcc') source trees -appropriately so `g77' and `gcc' can coexist as they do in the stock -FSF distributions. - -Merging Distributions ---------------------- - - After merging the `g77' source tree into the `gcc' source tree, you -have put together a complete `g77' source tree. - - As of version 0.5.23, `g77' no longer modifies the version number of -`gcc', nor does it patch `gcc' itself. - - `g77' still depends on being merged with an appropriate version of -`gcc'. For version 0.5.24 of `g77', the specific version of `gcc' -supported is 2.8.1. - - However, other versions of `gcc' might be suitable "hosts" for this -version of `g77'. - - GNU version numbers make it easy to figure out whether a particular -version of a distribution is newer or older than some other version of -that distribution. The format is, generally, MAJOR.MINOR.PATCH, with -each field being a decimal number. (You can safely ignore leading -zeros; for example, 1.5.3 is the same as 1.5.03.) The MAJOR field only -increases with time. The other two fields are reset to 0 when the -field to their left is incremented; otherwise, they, too, only increase -with time. So, version 2.6.2 is newer than version 2.5.8, and version -3.0 is newer than both. (Trailing `.0' fields often are omitted in -announcements and in names for distributions and the directories they -create.) - - If your version of `gcc' is older than the oldest version supported -by `g77' (as casually determined by listing the contents of -`gcc/f/INSTALL/', which contains these installation instructions in -plain-text format), you should obtain a newer, supported version of -`gcc'. (You could instead obtain an older version of `g77', or try and -get your `g77' to work with the old `gcc', but neither approach is -recommended, and you shouldn't bother reporting any bugs you find if you -take either approach, because they're probably already fixed in the -newer versions you're not using.) - - If your version of `gcc' is newer than the newest version supported -by `g77', it is possible that your `g77' will work with it anyway. If -the version number for `gcc' differs only in the PATCH field, you might -as well try that version of `gcc'. Since it has the same MAJOR and -MINOR fields, the resulting combination is likely to work. - - So, for example, if a particular version of `g77' has support for -`gcc' versions 2.8.0 and 2.8.1, it is likely that `gcc-2.8.2' would -work well with `g77'. - - However, `gcc-2.9.0' would almost certainly not work with that -version of `g77' without appropriate modifications, so a new version of -`g77' would be needed (and you should wait for it rather than bothering -the maintainers--*note User-Visible Changes: Changes.). - - This complexity is the result of `gcc' and `g77' being separate -distributions. By keeping them separate, each product is able to be -independently improved and distributed to its user base more frequently. - - However, the GBE interface defined by `gcc' typically undergoes some -incompatible changes at least every time the MINOR field of the version -number is incremented, and such changes require corresponding changes to -the `g77' front end (FFE). - -Where in the World Does Fortran (and GNU CC) Go? ------------------------------------------------- - - Before configuring, you should make sure you know where you want the -`g77' and `gcc' binaries to be installed after they're built, because -this information is given to the configuration tool and used during the -build itself. - - A `g77' installation normally includes installation of a -Fortran-aware version of `gcc', so that the `gcc' command recognizes -Fortran source files and knows how to compile them. - - For this to work, the version of `gcc' that you will be building as -part of `g77' *must* be installed as the "active" version of `gcc' on -the system. - - Sometimes people make the mistake of installing `gcc' as -`/usr/local/bin/gcc', leaving an older, non-Fortran-aware version in -`/usr/bin/gcc'. (Or, the opposite happens.) This can result in `gcc' -being unable to compile Fortran source files, because when the older -version of `gcc' is invoked, it complains that it does not recognize -the language, or the file name suffix. - - So, determine whether `gcc' already is installed on your system, -and, if so, *where* it is installed, and prepare to configure the new -version of `gcc' you'll be building so that it installs over the -existing version of `gcc'. - - You might want to back up your existing copy of `/usr/bin/gcc', and -the entire `/usr/lib' directory, before you perform the actual -installation (as described in this manual). - - Existing `gcc' installations typically are found in `/usr' or -`/usr/local'. (This means the commands are installed in `/usr/bin' or -`/usr/local/bin', the libraries in `/usr/lib' or `/usr/local/lib', and -so on.) - - If you aren't certain where the currently installed version of `gcc' -and its related programs reside, look at the output of this command: - - gcc -v -o /tmp/delete-me -xc /dev/null -xnone - - All sorts of interesting information on the locations of various -`gcc'-related programs and data files should be visible in the output -of the above command. (The output also is likely to include a -diagnostic from the linker, since there's no `main_()' function.) -However, you do have to sift through it yourself; `gcc' currently -provides no easy way to ask it where it is installed and where it looks -for the various programs and data files it calls on to do its work. - - Just *building* `g77' should not overwrite any installed -programs--but, usually, after you build `g77', you will want to install -it, so backing up anything it might overwrite is a good idea. (This is -true for any package, not just `g77', though in this case it is -intentional that `g77' overwrites `gcc' if it is already installed--it -is unusual that the installation process for one distribution -intentionally overwrites a program or file installed by another -distribution, although, in this case, `g77' is an augmentation of the -`gcc' distribution.) - - Another reason to back up the existing version first, or make sure -you can restore it easily, is that it might be an older version on -which other users have come to depend for certain behaviors. However, -even the new version of `gcc' you install will offer users the ability -to specify an older version of the actual compilation programs if -desired, and these older versions need not include any `g77' components. -*Note Specifying Target Machine and Compiler Version: (gcc)Target -Options, for information on the `-V' option of `gcc'. - -Configuring GNU CC ------------------- - - `g77' is configured automatically when you configure `gcc'. There -are two parts of `g77' that are configured in two different -ways--`g77', which "camps on" to the `gcc' configuration mechanism, and -`libg2c', which uses a variation of the GNU `autoconf' configuration -system. - - Generally, you shouldn't have to be concerned with either `g77' or -`libg2c' configuration, unless you're configuring `g77' as a -cross-compiler. In this case, the `libg2c' configuration, and possibly -the `g77' and `gcc' configurations as well, might need special -attention. (This also might be the case if you're porting `gcc' to a -whole new system--even if it is just a new operating system on an -existing, supported CPU.) - - To configure the system, see *Note Installing GNU CC: -(gcc)Installation, following the instructions for running `./configure'. -Pay special attention to the `--prefix=' option, which you almost -certainly will need to specify. - - (Note that `gcc' installation information is provided as a -plain-text file in `gcc/INSTALL'.) - - The information printed by the invocation of `./configure' should -show that the `f' directory (the Fortran language) has been configured. -If it does not, there is a problem. - - *Note:* Configuring with the `--srcdir' argument, or by starting in -an empty directory and typing a command such as `../gcc/configure' to -build with separate build and source directories, is known to work with -GNU `make', but it is known to not work with other variants of `make'. -Irix5.2 and SunOS4.1 versions of `make' definitely won't work outside -the source directory at present. - - `g77''s portion of the `configure' script used to issue a warning -message about this when configuring for building binaries outside the -source directory, but no longer does this as of version 0.5.23. - - Instead, `g77' simply rejects most common attempts to build it using -a non-GNU `make' when the build directory is not the same as the source -directory, issuing an explanatory diagnostic. - -Building GNU CC ---------------- - - Building `g77' requires building enough of `gcc' that these -instructions assume you're going to build all of `gcc', including -`g++', `protoize', and so on. You can save a little time and disk -space by changes the `LANGUAGES' macro definition in `gcc/Makefile.in' -or `gcc/Makefile', but if you do that, you're on your own. One change -is almost *certainly* going to cause failures: removing `c' or `f77' -from the definition of the `LANGUAGES' macro. - - After configuring `gcc', which configures `g77' and `libg2c' -automatically, you're ready to start the actual build by invoking -`make'. - - *Note:* You *must* have run the `configure' script in `gcc' before -you run `make', even if you're using an already existing `gcc' -development directory, because `./configure' does the work to recognize -that you've added `g77' to the configuration. - - There are two general approaches to building GNU CC from scratch: - -"bootstrap" - This method uses minimal native system facilities to build a - barebones, unoptimized `gcc', that is then used to compile - ("bootstrap") the entire system. - -"straight" - This method assumes a more complete native system exists, and uses - that just once to build the entire system. - - On all systems without a recent version of `gcc' already installed, -the bootstrap method must be used. In particular, `g77' uses -extensions to the C language offered, apparently, only by `gcc'. - - On most systems with a recent version of `gcc' already installed, -the straight method can be used. This is an advantage, because it -takes less CPU time and disk space for the build. However, it does -require that the system have fairly recent versions of many GNU -programs and other programs, which are not enumerated here. - -Bootstrap Build -............... - - A complete bootstrap build is done by issuing a command beginning -with `make bootstrap ...', as described in *Note Installing GNU CC: -(gcc)Installation. This is the most reliable form of build, but it -does require the most disk space and CPU time, since the complete system -is built twice (in Stages 2 and 3), after an initial build (during -Stage 1) of a minimal `gcc' compiler using the native compiler and -libraries. - - You might have to, or want to, control the way a bootstrap build is -done by entering the `make' commands to build each stage one at a time, -as described in the `gcc' manual. For example, to save time or disk -space, you might want to not bother doing the Stage 3 build, in which -case you are assuming that the `gcc' compiler you have built is -basically sound (because you are giving up the opportunity to compare a -large number of object files to ensure they're identical). - - To save some disk space during installation, after Stage 2 is built, -you can type `rm -fr stage1' to remove the binaries built during Stage -1. - - Also, *Note Installing GNU CC: (gcc)Installation, for important -information on building `gcc' that is not described in this `g77' -manual. For example, explanations of diagnostic messages and whether -they're expected, or indicate trouble, are found there. - -Straight Build -.............. - - If you have a recent version of `gcc' already installed on your -system, and if you're reasonably certain it produces code that is -object-compatible with the version of `gcc' you want to build as part -of building `g77', you can save time and disk space by doing a straight -build. - - To build just the compilers along with the necessary run-time -libraries, issue the following command: - - make -k CC=gcc - - If you run into problems using this method, you have two options: - - * Abandon this approach and do a bootstrap build. - - * Try to make this approach work by diagnosing the problems you're - running into and retrying. - - Especially if you do the latter, you might consider submitting any -solutions as bug/fix reports. *Note Known Causes of Trouble with GNU -Fortran: Trouble. - - However, understand that many problems preventing a straight build -from working are not `g77' problems, and, in such cases, are not likely -to be addressed in future versions of `g77'. Consider treating them as -`gcc' bugs instead. - -Pre-installation Checks ------------------------ - - Before installing the system, which includes installing `gcc', you -might want to do some minimum checking to ensure that some basic things -work. - - Here are some commands you can try, and output typically printed by -them when they work: - - sh# cd /usr/src/gcc - sh# ./g77 -B./ -v - g77 version 0.5.24 - Driving: ./g77 -B./ -v -c -xf77-version /dev/null -xnone - Reading specs from ./specs - gcc version 2.8.1 - cpp -lang-c -v -isystem ./include -undef -D__GNUC__=2 ... - GNU CPP version 2.8.1 (Alpha GNU/Linux with ELF) - #include "..." search starts here: - #include <...> search starts here: - include - /usr/alpha-linux/include - /usr/lib/gcc-lib/alpha-linux/2.8.1/include - /usr/include - End of search list. - ./f771 -fnull-version -quiet -dumpbase g77-version.f -version ... - GNU F77 version 2.8.1 (alpha-linux) compiled ... - GNU Fortran Front End version 0.5.24 - as -nocpp -o /tmp/cca14485.o /tmp/cca14485.s - ld -m elf64alpha -G 8 -O1 -dynamic-linker /lib/ld-linux.so.2 ... - /tmp/cca14485 - __G77_LIBF77_VERSION__: 0.5.24 - @(#)LIBF77 VERSION 19970919 - __G77_LIBI77_VERSION__: 0.5.24 - @(#) LIBI77 VERSION pjw,dmg-mods 19980405 - __G77_LIBU77_VERSION__: 0.5.24 - @(#) LIBU77 VERSION 19970919 - sh# ./xgcc -B./ -v -o /tmp/delete-me -xc /dev/null -xnone - Reading specs from ./specs - gcc version 2.8.1 - ./cpp -lang-c -v -isystem ./include -undef ... - GNU CPP version 2.8.1 (Alpha GNU/Linux with ELF) - #include "..." search starts here: - #include <...> search starts here: - include - /usr/alpha-linux/include - /usr/lib/gcc-lib/alpha-linux/2.8.1/include - /usr/include - End of search list. - ./cc1 /tmp/cca18063.i -quiet -dumpbase null.c -version ... - GNU C version 2.8.1 (alpha-linux) compiled ... - as -nocpp -o /tmp/cca180631.o /tmp/cca18063.s - ld -m elf64alpha -G 8 -O1 -dynamic-linker /lib/ld-linux.so.2 ... - /usr/lib/crt1.o: In function `_start': - ../sysdeps/alpha/elf/start.S:77: undefined reference to `main' - ../sysdeps/alpha/elf/start.S:77: undefined reference to `main' - sh# - - (Note that long lines have been truncated, and `...' used to -indicate such truncations.) - - The above two commands test whether `g77' and `gcc', respectively, -are able to compile empty (null) source files, whether invocation of -the C preprocessor works, whether libraries can be linked, and so on. - - If the output you get from either of the above two commands is -noticeably different, especially if it is shorter or longer in ways -that do not look consistent with the above sample output, you probably -should not install `gcc' and `g77' until you have investigated further. - - For example, you could try compiling actual applications and seeing -how that works. (You might want to do that anyway, even if the above -tests work.) - - To compile using the not-yet-installed versions of `gcc' and `g77', -use the following commands to invoke them. - - To invoke `g77', type: - - /usr/src/gcc/g77 -B/usr/src/gcc/ ... - - To invoke `gcc', type: - - /usr/src/gcc/xgcc -B/usr/src/gcc/ ... - -Installation of Binaries ------------------------- - - After configuring, building, and testing `g77' and `gcc', when you -are ready to install them on your system, type: - - make -k CC=gcc install - - As described in *Note Installing GNU CC: (gcc)Installation, the -values for the `CC' and `LANGUAGES' macros should be the same as those -you supplied for the build itself. - - So, the details of the above command might vary if you used a -bootstrap build (where you might be able to omit both definitions, or -might have to supply the same definitions you used when building the -final stage) or if you deviated from the instructions for a straight -build. - - If the above command does not install `libg2c.a' as expected, try -this: - - make -k ... install install-libf77 - - We don't know why some non-GNU versions of `make' sometimes require -this alternate command, but they do. (Remember to supply the -appropriate definition for `CC' where you see `...' in the above -command.) - - Note that using the `-k' option tells `make' to continue after some -installation problems, like not having `makeinfo' installed on your -system. It might not be necessary for your system. - - *Note:* `g77' no longer installs files not directly part of `g77', -such as `/usr/bin/f77', `/usr/lib/libf2c.a', and `/usr/include/f2c.h', -or their `/usr/local' equivalents. - - *Note Distributing Binaries::, for information on how to accommodate -systems with no existing non-`g77' `f77' compiler and systems with -`f2c' installed. - -Updating Your Info Directory ----------------------------- - - As part of installing `g77', you should make sure users of `info' -can easily access this manual on-line. - - `g77' does this automatically by invoking the `install-info' command -when you use `make install' to install `g77'. - - If that fails, or if the `info' directory it updates is not the one -normally accessed by users, consider invoking it yourself. For example: - - install-info --info-dir=/usr/info /usr/info/g77.info - - The above example assumes the `g77' documentation already is -installed in `/usr/info' and that `/usr/info/dir' is the file you wish -to update. Adjust the command accordingly, if those assumptions are -wrong. - -Missing tools? --------------- - - A build of `gcc' might fail due to one or more tools being called -upon by `make' (during the build or install process), when those tools -are not installed on your system. - - This situation can result from any of the following actions -(performed by you or someone else): - - * Changing the source code or documentation yourself (as a developer - or technical writer). - - * Applying a patch that changes the source code or documentation - (including, sometimes, the official patches distributed by the - FSF). - - * Deleting the files that are created by the (missing) tools. - - The `make maintainer-clean' command is supposed to delete these - files, so invoking this command without having all the appropriate - tools installed is not recommended. - - * Creating the source directory using a method that does not - preserve the date-time-modified information in the original - distribution. - - For example, the UNIX `cp -r' command copies a directory tree - without preserving the date-time-modified information. Use `cp - -pr' instead. - - The reason these activities cause `make' to try and invoke tools -that it probably wouldn't when building from a perfectly "clean" source -directory containing `gcc' and `g77' is that some files in the source -directory (and the corresponding distribution) aren't really source -files, but *derived* files that are produced by running tools with the -corresponding source files as input. These derived files "depend", in -`make' terminology, on the corresponding source files. - - `make' determines that a file that depends on another needs to be -updated if the date-time-modified information for the source file shows -that it is newer than the corresponding information for the derived -file. - - If it makes that determination, `make' runs the appropriate commands -(specified in the "Makefile") to update the derived file, and this -process typically calls upon one or more installed tools to do the work. - - The "safest" approach to dealing with this situation is to recreate -the `gcc' and `g77' source directories from complete `gcc' and `g77' -distributions known to be provided by the FSF. - - Another fairly "safe" approach is to simply install the tools you -need to complete the build process. This is especially appropriate if -you've changed the source code or applied a patch to do so. - - However, if you're certain that the problem is limited entirely to -incorrect date-time-modified information, that there are no -discrepancies between the contents of source files and files derived -from them in the source directory, you can often update the -date-time-modified information for the derived files to work around the -problem of not having the appropriate tools installed. - - On UNIX systems, the simplest way to update the date-time-modified -information of a file is to use the use the `touch' command. - - How to use `touch' to update the derived files updated by each of -the tools is described below. *Note:* New versions of `g77' might -change the set of files it generates by invoking each of these tools. -If you cannot figure out for yourself how to handle such a situation, -try an older version of `g77' until you find someone who can (or until -you obtain and install the relevant tools). - -Missing `autoconf'? -................... - - If you cannot install `autoconf', make sure you have started with a -*fresh* distribution of `gcc' and `g77', do *not* do `make -maintainer-clean', and, to ensure that `autoconf' is not invoked by -`make' during the build, type these commands: - - sh# cd gcc/f/runtime - sh# touch configure libU77/configure - sh# cd ../../.. - sh# - -Missing `bison'? -................ - - If you cannot install `bison', make sure you have started with a -*fresh* distribution of `gcc', do *not* do `make maintainer-clean', -and, to ensure that `bison' is not invoked by `make' during the build, -type these commands: - - sh# cd gcc - sh# touch bi-parser.c bi-parser.h c-parse.c c-parse.h cexp.c - sh# touch cp/parse.c cp/parse.h objc-parse.c - sh# cd .. - sh# - -Missing `gperf'? -................ - - If you cannot install `gperf', make sure you have started with a -*fresh* distribution of `gcc', do *not* do `make maintainer-clean', -and, to ensure that `gperf' is not invoked by `make' during the build, -type these commands: - - sh# cd gcc - sh# touch c-gperf.h - sh# cd .. - sh# - -Missing `makeinfo'? -................... - - If `makeinfo' is needed but unavailable when installing (via `make -install'), some files, like `libg2c.a', might not be installed, because -once `make' determines that it cannot invoke `makeinfo', it cancels any -further processing. - - If you cannot install `makeinfo', an easy work-around is to specify -`MAKEINFO=true' on the `make' command line, or to specify the `-k' -option (`make -k install'). - - Another approach is to force the relevant files to be up-to-date by -typing these commands and then re-trying the installation step: - - sh# cd gcc - sh# touch f/g77.info f/BUGS f/INSTALL f/NEWS - sh# cd .. - sh# + For `egcs' users, this information is superceded by the `egcs' +installation instructions. Distributing Binaries ===================== - If you are building `g77' for distribution to others in binary form, -first make sure you are aware of your legal responsibilities (read the -file `gcc/COPYING' thoroughly). - - Then, consider your target audience and decide where `g77' should be -installed. - - For systems like GNU/Linux that have no native Fortran compiler (or -where `g77' could be considered the native compiler for Fortran and -`gcc' for C, etc.), you should definitely configure `g77' for -installation in `/usr/bin' instead of `/usr/local/bin'. Specify the -`--prefix=/usr' option when running `./configure'. - - You might also want to set up the distribution so the `f77' command -is a link to `g77', although a script that accepts "classic" UNIX `f77' -options and translates the command-line to the appropriate `g77' -command line would be more appropriate. If you do this, *please* also -provide a "man page" in `man/man1/f77.1' describing the command. (A -link to `man/man1/g77.1' is appropriate if `bin/f77' is a link to -`bin/g77'.) - - For a system that might already have `f2c' installed, consider -whether inter-operation with `g77' will be important to users of `f2c' -on that system. If you want to improve the likelihood that users will -be able to use both `f2c' and `g77' to compile code for a single program -without encountering link-time or run-time incompatibilities, make sure -that, whenever they intend to combine `f2c'-produced code with -`g77'-produced code in an executable, they: - - * Use the `lib/gcc-lib/.../include/g2c.h' file generated by the - `g77' build in place of the `f2c.h' file that normally comes with - `f2c' (or versions of `g77' prior to 0.5.23) when compiling *all* - of the `f2c'-produced C code - - * Link to the `lib/gcc-lib/.../libg2c.a' library built by the `g77' - build instead of the `libf2c.a' library that normally comes with - `f2c' (or versions of `g77' prior to 0.5.23) - - How you choose to effect the above depends on whether the existing -installation of `f2c' must be maintained. - - In any case, it is important to try and ensure that the installation -keeps working properly even after subsequent re-installation of `f2c', -which probably involves overwriting `/usr/local/lib/libf2c.a' and -`/usr/local/include/f2c.h', or similar. - - At least, copying `libg2c.a' and `g2c.h' into the appropriate -"public" directories allows users to more easily select the version of -`libf2c' they wish to use for a particular build. The names are -changed by `g77' to make this coexistence easier to maintain; even if -`f2c' is installed later, the `g77' files normally installed by its -installation process aren't disturbed. Use of symbolic links from one -set of files to another might result in problems after a subsequent -reinstallation of either `f2c' or `g77', so be sure to alert users of -your distribution accordingly. - - (Make sure you clearly document, in the description of your -distribution, how installation of your distribution will affect -existing installations of `gcc', `f2c', `f77', `libf2c.a', and so on. -Similarly, you should clearly document any requirements you assume will -be met by users of your distribution.) - - For other systems with native `f77' (and `cc') compilers, configure -`g77' as you (or most of your audience) would configure `gcc' for their -installations. Typically this is for installation in `/usr/local', and -would not include a new version of `/usr/bin/f77' or -`/usr/local/bin/f77', so users could still use the native `f77'. - - In any case, for `g77' to work properly, you *must* ensure that the -binaries you distribute include: - -`bin/g77' - This is the command most users use to compile Fortran. - -`bin/gcc' - This is the command some users use to compile Fortran, typically - when compiling programs written in other languages at the same - time. The `bin/gcc' executable file must have been built from a - `gcc' source tree into which a `g77' source tree was merged and - configured, or it will not know how to compile Fortran programs. - -`info/g77.info*' - This is the documentation for `g77'. If it is not included, users - will have trouble understanding diagnostics messages and other - such things, and will send you a lot of email asking questions. - - Please edit this documentation (by editing `gcc/f/*.texi' and - doing `make doc' from the `/usr/src/gcc' directory) to reflect any - changes you've made to `g77', or at least to encourage users of - your binary distribution to report bugs to you first. - - Also, whether you distribute binaries or install `g77' on your own - system, it might be helpful for everyone to add a line listing - this manual by name and topic to the top-level `info' node in - `/usr/info/dir'. That way, users can find `g77' documentation more - easily. *Note Updating Your Info Directory: Updating - Documentation. - -`man/man1/g77.1' - This is the short man page for `g77'. It is not always kept - up-to-date, but you might as well include it for people who really - like "man" pages. - -`lib/gcc-lib' - This is the directory containing the "private" files installed by - and for `gcc', `g77', `g++', and other GNU compilers. - -`lib/gcc-lib/.../f771' - This is the actual Fortran compiler. - -`lib/gcc-lib/.../libg2c.a' - This is the run-time library for `g77'-compiled programs. - - Whether you want to include the slightly updated (and possibly -improved) versions of `cc1', `cc1plus', and whatever other binaries get -rebuilt with the changes the GNU Fortran distribution makes to the GNU -back end, is up to you. These changes are highly unlikely to break any -compilers, because they involve doing things like adding to the list of -acceptable compiler options (so, for example, `cc1plus' accepts, and -ignores, options that only `f771' actually processes). - - Please assure users that unless they have a specific need for their -existing, older versions of `gcc' command, they are unlikely to -experience any problems by overwriting it with your version--though -they could certainly protect themselves by making backup copies first! - - Otherwise, users might try and install your binaries in a "safe" -place, find they cannot compile Fortran programs with your distribution -(because, perhaps, they're invoking their old version of the `gcc' -command, which does not recognize Fortran programs), and assume that -your binaries (or, more generally, GNU Fortran distributions in -general) are broken, at least for their system. - - Finally, *please* ask for bug reports to go to you first, at least -until you're sure your distribution is widely used and has been well -tested. This especially goes for those of you making any changes to -the `g77' sources to port `g77', e.g. to OS/2. has -received a fair number of bug reports that turned out to be problems -with other peoples' ports and distributions, about which nothing could -be done for the user. Once you are quite certain a bug report does not -involve your efforts, you can forward it to us. + For `egcs' users, this information is superceded by the `egcs' +installation instructions. diff --git a/gcc/f/NEWS b/gcc/f/NEWS index 4659c4b3265..8004df5a928 100644 --- a/gcc/f/NEWS +++ b/gcc/f/NEWS @@ -1,11 +1,12 @@ -NOTE: This file is automatically generated from the files `news0.texi' -and `news.texi'. `NEWS' is *not* a source file, although it is -normally included within source distributions. +*Note:* This file is automatically generated from the files +`news0.texi' and `news.texi'. `NEWS' is *not* a source file, although +it is normally included within source distributions. - This file lists recent changes to the GNU Fortran compiler. -Copyright (C) 1995-1999 Free Software Foundation, Inc. You may copy, -distribute, and modify it freely as long as you preserve this copyright -notice and permission notice. + This file lists news about the EGCS-1.2 version (and some other +versions) of the GNU Fortran compiler. Copyright (C) 1995-1999 Free +Software Foundation, Inc. You may copy, distribute, and modify it +freely as long as you preserve this copyright notice and permission +notice. News About GNU Fortran ********************** @@ -42,15 +43,40 @@ clarify how they differ from other versions, though this can make getting a complete picture of what a particular `egcs' version contains somewhat more difficult. -In `egcs' 1.2: -============== + *Warning:* The information below is still under development, and +might not accurately reflect the `g77' code base of which it is a part. +Efforts are made to keep it somewhat up-to-date, but they are +particularly concentrated on any version of this information that is +distributed as part of a *released* `g77'. - * Fix `g77' so it no longer crashes when compiling I/O statements + In particular, while this information is intended to apply to the +EGCS-1.2 version of `g77', only an official *release* of that version +is expected to contain documentation that is most consistent with the +`g77' product in that version. + + Nevertheless, information on *previous* releases of `g77', below, is +likely to be more up-to-date and accurate than the equivalent +information that accompanied those releases, assuming the last-updated +date of the information below is later than the dates of those releases. + + That's due to attempts to keep this development version of news +about previous `g77' versions up-to-date. + + An online, "live" version of this document (derived directly from +the mainline, development version of `g77' within `egcs') is available +at `http://egcs.cygnus.com/onlinedocs/g77_news.html'. + + The following information was last updated on 1999-03-13: + +In `egcs' 1.2 (versus 1.1.2): +============================= + + 1. Fix `g77' so it no longer crashes when compiling I/O statements using keywords that define `INTEGER' values, such as `IOSTAT=J', where J is other than default `INTEGER' (such as `INTEGER*2'). Instead, it issues a diagnostic. - * The `-ax' option is now obeyed when compiling Fortran programs. + 2. The `-ax' option is now obeyed when compiling Fortran programs. (It is passed to the `f771' driver.) * Source file names with the suffixes `.FOR' and `.FPP' now are @@ -63,13 +89,11 @@ In `egcs' 1.2: references to the implementations of these intrinsics using the `EXTERNAL' mechanism (which would avoid the new warnings). - *Note Year 2000 (Y2K) Problems::, for more information. - - * `g77' now warns about a reference to a function when the + 3. `g77' now warns about a reference to a function when the corresponding *subsequent* function program unit disagrees with the reference concerning the type of the function. - * Improve documentation and indexing, including information on Year + 4. Improve documentation and indexing, including information on Year 2000 (Y2K) compliance. In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1): @@ -79,8 +103,6 @@ In 0.5.24 and `egcs' 1.1.2 (versus 0.5.23 and 1.1.1): documented, non-Y2K-compliant range of 0-99, instead of being returned as 100 in the year 2000. - *Note IDate Intrinsic (VXT)::, for more information. - * Fix the `Date_and_Time' intrinsic (in `libg2c') to return the milliseconds value properly in VALUES(8). @@ -114,14 +136,14 @@ In 0.5.24 and `egcs' 1.1.1 (versus 0.5.23 and 1.1): In `egcs' 1.1 (versus 0.5.24): ============================== - * Fix `g77' crash compiling code containing the construct + 5. Fix `g77' crash compiling code containing the construct `CMPLX(0.)' or similar. - * Fix `g77' crash (or apparently infinite run-time) when compiling + 6. Fix `g77' crash (or apparently infinite run-time) when compiling certain complicated expressions involving `COMPLEX' arithmetic (especially multiplication). - * Fix a code-generation bug that afflicted Intel x86 targets when + 7. Fix a code-generation bug that afflicted Intel x86 targets when `-O2' was specified compiling, for example, an old version of the `DNRM2' routine. @@ -137,25 +159,25 @@ In `egcs' 1.1 (versus 0.5.24): In `egcs' 1.1 (versus `egcs' 1.0.3): ==================================== - * Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte + 8. Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte beyond the end of its `CHARACTER' argument, and in the `libU77' intrinsics `GMTime' and `LTime' that overwrote their arguments. - * Assumed arrays with negative bounds (such as `REAL A(-1:*)') no + 9. Assumed arrays with negative bounds (such as `REAL A(-1:*)') no longer elicit spurious diagnostics from `g77', even on systems with pointers having different sizes than integers. This bug is not known to have existed in any recent version of `gcc'. It was introduced in an early release of `egcs'. - * Valid combinations of `EXTERNAL', passing that external as a dummy + 10. Valid combinations of `EXTERNAL', passing that external as a dummy argument without explicitly giving it a type, and, in a subsequent program unit, referencing that external as an external function with a different type no longer crash `g77'. - * `CASE DEFAULT' no longer crashes `g77'. + 11. `CASE DEFAULT' no longer crashes `g77'. - * The `-Wunused' option no longer issues a spurious warning about + 12. The `-Wunused' option no longer issues a spurious warning about the "master" procedure generated by `g77' for procedures containing `ENTRY' statements. @@ -180,25 +202,25 @@ In `egcs' 1.1 (versus `egcs' 1.0.3): `libf2c' environment, even when `libf2c' (now `libg2c') is a shared library. - * `g77' no longer installs the `f77' command and `f77.1' man page in + 13. `g77' no longer installs the `f77' command and `f77.1' man page in the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. - * `g77' no longer installs the `libf2c.a' library and `f2c.h' + 14. `g77' no longer installs the `libf2c.a' library and `f2c.h' include file in the `/usr' or `/usr/local' heirarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. - * The `libf2c.a' library produced by `g77' has been renamed to + 15. The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. - * The `f2c.h' include (header) file produced by `g77' has been + 16. The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from @@ -210,11 +232,11 @@ In `egcs' 1.1 (versus `egcs' 1.0.3): than the one built and installed as part of the same `g77' version is picked up. - * During the configuration and build process, `g77' creates + 17. During the configuration and build process, `g77' creates subdirectories it needs only as it needs them. Other cleaning up of the configuration and build process has been performed as well. - * `install-info' now used to update the directory of Info + 18. `install-info' now used to update the directory of Info documentation to contain an entry for `g77' (during installation). * Some diagnostics have been changed from warnings to errors, to @@ -223,28 +245,28 @@ In `egcs' 1.1 (versus `egcs' 1.0.3): in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and about truncations of various sorts of constants. - * Improve compilation of `FORMAT' expressions so that a null byte is + 19. Improve compilation of `FORMAT' expressions so that a null byte is appended to the last operand if it is a constant. This provides a cleaner run-time diagnostic as provided by `libf2c' for statements like `PRINT '(I1', 42'. - * Improve documentation and indexing. + 20. Improve documentation and indexing. - * The upgrade to `libf2c' as of 1998-06-18 should fix a variety of + 21. The upgrade to `libf2c' as of 1998-06-18 should fix a variety of problems, including those involving some uses of the `T' format specifier, and perhaps some build (porting) problems as well. In 0.5.24 and `egcs' 1.1 (versus 0.5.23): ========================================= - * `g77' no longer produces incorrect code and initial values for + 22. `g77' no longer produces incorrect code and initial values for `EQUIVALENCE' and `COMMON' aggregates that, due to "unnatural" ordering of members vis-a-vis their types, require initial padding. - * `g77' no longer crashes when compiling code containing + 23. `g77' no longer crashes when compiling code containing specification statements such as `INTEGER(KIND=7) PTR'. - * `g77' no longer crashes when compiling code such as `J = SIGNAL(1, + 24. `g77' no longer crashes when compiling code such as `J = SIGNAL(1, 2)'. * `g77' now treats `%LOC(EXPR)' and `LOC(EXPR)' as "ordinary" @@ -275,1389 +297,15 @@ In 0.5.24 and `egcs' 1.1 (versus 0.5.23): * The F90 `System_Clock' intrinsic allows the optional arguments (except for the `Count' argument) to be omitted. - * Upgrade to `libf2c' as of 1998-06-18. + 25. Upgrade to `libf2c' as of 1998-06-18. - * Improve documentation and indexing. + 26. Improve documentation and indexing. -In 0.5.23 (versus 0.5.22): -========================== +In previous versions: +===================== - * This release contains several regressions against version 0.5.22 - of `g77', due to using the "vanilla" `gcc' back end instead of - patching it to fix a few bugs and improve performance in a few - cases. - - *Note Actual Bugs We Haven't Fixed Yet: Actual Bugs, available in - plain-text format in `gcc/f/BUGS', for information on the known - bugs in this version, including the regressions. - - Features that have been dropped from this version of `g77' due to - their being implemented via `g77'-specific patches to the `gcc' - back end in previous releases include: - - - Support for `__restrict__' keyword, the options - `-fargument-alias', `-fargument-noalias', and - `-fargument-noalias-global', and the corresponding - alias-analysis code. - - (`egcs' has the alias-analysis code, but not the - `__restrict__' keyword. `egcs' `g77' users benefit from the - alias-analysis code despite the lack of the `__restrict__' - keyword, which is a C-language construct.) - - - Support for the GNU compiler options `-fmove-all-movables', - `-freduce-all-givs', and `-frerun-loop-opt'. - - (`egcs' supports these options. `g77' users of `egcs' - benefit from them even if they are not explicitly specified, - because the defaults are optimized for `g77' users.) - - - Support for the `-W' option warning about integer division by - zero. - - - The Intel x86-specific option `-malign-double' applying to - stack-allocated data as well as statically-allocate data. - - Note that the `gcc/f/gbe/' subdirectory has been removed from this - distribution as a result of `g77' no longer including patches for - the `gcc' back end. - - * Fix bugs in the `libU77' intrinsic `HostNm' that wrote one byte - beyond the end of its `CHARACTER' argument, and in the `libU77' - intrinsics `GMTime' and `LTime' that overwrote their arguments. - - * Support `gcc' version 2.8, and remove support for prior versions - of `gcc'. - - * Remove support for the `--driver' option, as `g77' now does all - the driving, just like `gcc'. - - * `CASE DEFAULT' no longer crashes `g77'. - - * Valid combinations of `EXTERNAL', passing that external as a dummy - argument without explicitly giving it a type, and, in a subsequent - program unit, referencing that external as an external function - with a different type no longer crash `g77'. - - * `g77' no longer installs the `f77' command and `f77.1' man page in - the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' - file exists in the source or build directory. See the - installation documentation for more information. - - * `g77' no longer installs the `libf2c.a' library and `f2c.h' - include file in the `/usr' or `/usr/local' heirarchy, even if the - `f2c-install-ok' or `f2c-exists-ok' files exist in the source or - build directory. See the installation documentation for more - information. - - * The `libf2c.a' library produced by `g77' has been renamed to - `libg2c.a'. It is installed only in the `gcc' "private" directory - heirarchy, `gcc-lib'. This allows system administrators and users - to choose which version of the `libf2c' library from `netlib' they - wish to use on a case-by-case basis. See the installation - documentation for more information. - - * The `f2c.h' include (header) file produced by `g77' has been - renamed to `g2c.h'. It is installed only in the `gcc' "private" - directory heirarchy, `gcc-lib'. This allows system administrators - and users to choose which version of the include file from - `netlib' they wish to use on a case-by-case basis. See the - installation documentation for more information. - - * The `g77' command now expects the run-time library to be named - `libg2c.a' instead of `libf2c.a', to ensure that a version other - than the one built and installed as part of the same `g77' version - is picked up. - - * The `-Wunused' option no longer issues a spurious warning about - the "master" procedure generated by `g77' for procedures - containing `ENTRY' statements. - - * `g77''s version of `libf2c' separates out the setting of global - state (such as command-line arguments and signal handling) from - `main.o' into distinct, new library archive members. - - This should make it easier to write portable applications that - have their own (non-Fortran) `main()' routine properly set up the - `libf2c' environment, even when `libf2c' (now `libg2c') is a - shared library. - - * During the configuration and build process, `g77' creates - subdirectories it needs only as it needs them, thus avoiding - unnecessary creation of, for example, `stage1/f/runtime' when - doing a non-bootstrap build. Other cleaning up of the - configuration and build process has been performed as well. - - * `install-info' now used to update the directory of Info - documentation to contain an entry for `g77' (during installation). - - * Some diagnostics have been changed from warnings to errors, to - prevent inadvertent use of the resulting, probably buggy, programs. - These mostly include diagnostics about use of unsupported features - in the `OPEN', `INQUIRE', `READ', and `WRITE' statements, and - about truncations of various sorts of constants. - - * Improve documentation and indexing. - - * Upgrade to `libf2c' as of 1998-04-20. - - This should fix a variety of problems, including those involving - some uses of the `T' format specifier, and perhaps some build - (porting) problems as well. - -In 0.5.22 (versus 0.5.21): -========================== - - * Fix code generation for iterative `DO' loops that have one or more - references to the iteration variable, or to aliases of it, in - their control expressions. For example, `DO 10 J=2,J' now is - compiled correctly. - - * Fix a code-generation bug that afflicted Intel x86 targets when - `-O2' was specified compiling, for example, an old version of the - `DNRM2' routine. - - The x87 coprocessor stack was being mismanaged in cases involving - assigned `GOTO' and `ASSIGN'. - - * Fix `DTime' intrinsic so as not to truncate results to integer - values (on some systems). - - * Fix `Signal' intrinsic so it offers portable support for 64-bit - systems (such as Digital Alphas running GNU/Linux). - - * Fix run-time crash involving `NAMELIST' on 64-bit machines such as - Alphas. - - * Fix `g77' version of `libf2c' so it no longer produces a spurious - `I/O recursion' diagnostic at run time when an I/O operation (such - as `READ *,I') is interrupted in a manner that causes the program - to be terminated via the `f_exit' routine (such as via `C-c'). - - * Fix `g77' crash triggered by `CASE' statement with an omitted - lower or upper bound. - - * Fix `g77' crash compiling references to `CPU_Time' intrinsic. - - * Fix `g77' crash (or apparently infinite run-time) when compiling - certain complicated expressions involving `COMPLEX' arithmetic - (especially multiplication). - - * Fix `g77' crash on statements such as `PRINT *, - (REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'. - - * Fix a `g++' crash. - - * Support `FORMAT(I)' when EXPR is a compile-time constant - `INTEGER' expression. - - * Fix `g77' `-g' option so procedures that use `ENTRY' can be - stepped through, line by line, in `gdb'. - - * Fix a profiling-related bug in `gcc' back end for Intel x86 - architecture. - - * Allow any `REAL' argument to intrinsics `Second' and `CPU_Time'. - - * Allow any numeric argument to intrinsics `Int2' and `Int8'. - - * Use `tempnam', if available, to open scratch files (as in - `OPEN(STATUS='SCRATCH')') so that the `TMPDIR' environment - variable, if present, is used. - - * Rename the `gcc' keyword `restrict' to `__restrict__', to avoid - rejecting valid, existing, C programs. Support for `restrict' is - now more like support for `complex'. - - * Fix `-fpedantic' to not reject procedure invocations such as - `I=J()' and `CALL FOO()'. - - * Fix `-fugly-comma' to affect invocations of only external - procedures. Restore rejection of gratuitous trailing omitted - arguments to intrinsics, as in `I=MAX(3,4,,)'. - - * Fix compiler so it accepts `-fgnu-intrinsics-*' and - `-fbadu77-intrinsics-*' options. - - * Improve diagnostic messages from `libf2c' so it is more likely - that the printing of the active format string is limited to the - string, with no trailing garbage being printed. - - (Unlike `f2c', `g77' did not append a null byte to its compiled - form of every format string specified via a `FORMAT' statement. - However, `f2c' would exhibit the problem anyway for a statement - like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the - format string.) - - * Improve compilation of `FORMAT' expressions so that a null byte is - appended to the last operand if it is a constant. This provides a - cleaner run-time diagnostic as provided by `libf2c' for statements - like `PRINT '(I1', 42'. - - * Fix various crashes involving code with diagnosed errors. - - * Fix cross-compilation bug when configuring `libf2c'. - - * Improve diagnostics. - - * Improve documentation and indexing. - - * Upgrade to `libf2c' as of 1997-09-23. This fixes a formatted-I/O - bug that afflicted 64-bit systems with 32-bit integers (such as - Digital Alpha running GNU/Linux). - -In `egcs' 1.0.2 (versus `egcs' 1.0.1): -====================================== - - * Fix `g77' crash triggered by `CASE' statement with an omitted - lower or upper bound. - - * Fix `g77' crash on statements such as `PRINT *, - (REAL(Z(I)),I=1,2)', where `Z' is `DOUBLE COMPLEX'. - - * Fix `-fPIC' (such as compiling for ELF targets) on the Intel x86 - architecture target so invalid assembler code is no longer - produced. - - * Fix `-fpedantic' to not reject procedure invocations such as - `I=J()' and `CALL FOO()'. - - * Fix `-fugly-comma' to affect invocations of only external - procedures. Restore rejection of gratuitous trailing omitted - arguments to intrinsics, as in `I=MAX(3,4,,)'. - - * Fix compiler so it accepts `-fgnu-intrinsics-*' and - `-fbadu77-intrinsics-*' options. - -In `egcs' 1.0.1 (versus `egcs' 1.0): -==================================== - - * Fix run-time crash involving `NAMELIST' on 64-bit machines such as - Alphas. - -In `egcs' 1.0 (versus 0.5.21): -============================== - - * Version 1.0 of `egcs' contains several regressions against version - 0.5.21 of `g77', due to using the "vanilla" `gcc' back end instead - of patching it to fix a few bugs and improve performance in a few - cases. - - *Note Actual Bugs We Haven't Fixed Yet: Actual Bugs, available in - plain-text format in `gcc/f/BUGS', for information on the known - bugs in this version, including the regressions. - - Features that have been dropped from this version of `g77' due to - their being implemented via `g77'-specific patches to the `gcc' - back end in previous releases include: - - - Support for the C-language `restrict' keyword. - - - Support for the `-W' option warning about integer division by - zero. - - - The Intel x86-specific option `-malign-double' applying to - stack-allocated data as well as statically-allocate data. - - Note that the `gcc/f/gbe/' subdirectory has been removed from this - distribution as a result of `g77' being fully integrated with the - `egcs' variant of the `gcc' back end. - - * Fix code generation for iterative `DO' loops that have one or more - references to the iteration variable, or to aliases of it, in - their control expressions. For example, `DO 10 J=2,J' now is - compiled correctly. - - * Fix `DTime' intrinsic so as not to truncate results to integer - values (on some systems). - - * Some Fortran code, miscompiled by `g77' built on `gcc' version - 2.8.1 on m68k-next-nextstep3 configurations when using the `-O2' - option, is now compiled correctly. It is believed that a C - function known to miscompile on that configuration when using the - `-O2 -funroll-loops' options also is now compiled correctly. - - * Remove support for non-`egcs' versions of `gcc'. - - * Remove support for the `--driver' option, as `g77' now does all - the driving, just like `gcc'. - - * Allow any numeric argument to intrinsics `Int2' and `Int8'. - - * Improve diagnostic messages from `libf2c' so it is more likely - that the printing of the active format string is limited to the - string, with no trailing garbage being printed. - - (Unlike `f2c', `g77' did not append a null byte to its compiled - form of every format string specified via a `FORMAT' statement. - However, `f2c' would exhibit the problem anyway for a statement - like `PRINT '(I)garbage', 1' by printing `(I)garbage' as the - format string.) - - * Upgrade to `libf2c' as of 1997-09-23. This fixes a formatted-I/O - bug that afflicted 64-bit systems with 32-bit integers (such as - Digital Alpha running GNU/Linux). - -In 0.5.21: -========== - - * Fix a code-generation bug introduced by 0.5.20 caused by loop - unrolling (by specifying `-funroll-loops' or similar). This bug - afflicted all code compiled by version 2.7.2.2.f.2 of `gcc' (C, - C++, Fortran, and so on). - - * Fix a code-generation bug manifested when combining local - `EQUIVALENCE' with a `DATA' statement that follows the first - executable statement (or is treated as an executable-context - statement as a result of using the `-fpedantic' option). - - * Fix a compiler crash that occured when an integer division by a - constant zero is detected. Instead, when the `-W' option is - specified, the `gcc' back end issues a warning about such a case. - This bug afflicted all code compiled by version 2.7.2.2.f.2 of - `gcc' (C, C++, Fortran, and so on). - - * Fix a compiler crash that occurred in some cases of procedure - inlining. (Such cases became more frequent in 0.5.20.) - - * Fix a compiler crash resulting from using `DATA' or similar to - initialize a `COMPLEX' variable or array to zero. - - * Fix compiler crashes involving use of `AND', `OR', or `XOR' - intrinsics. - - * Fix compiler bug triggered when using a `COMMON' or `EQUIVALENCE' - variable as the target of an `ASSIGN' or assigned-`GOTO' statement. - - * Fix compiler crashes due to using the name of a some non-standard - intrinsics (such as `FTELL' or `FPUTC') as such and as the name of - a procedure or common block. Such dual use of a name in a program - is allowed by the standard. - - * Place automatic arrays on the stack, even if `SAVE' or the - `-fno-automatic' option is in effect. This avoids a compiler - crash in some cases. - - * The `-malign-double' option now reliably aligns `DOUBLE PRECISION' - optimally on Pentium and Pentium Pro architectures (586 and 686 in - `gcc'). - - * New option `-Wno-globals' disables warnings about "suspicious" use - of a name both as a global name and as the implicit name of an - intrinsic, and warnings about disagreements over the number or - natures of arguments passed to global procedures, or the natures - of the procedures themselves. - - The default is to issue such warnings, which are new as of this - version of `g77'. - - * New option `-fno-globals' disables diagnostics about potentially - fatal disagreements analysis problems, such as disagreements over - the number or natures of arguments passed to global procedures, or - the natures of those procedures themselves. - - The default is to issue such diagnostics and flag the compilation - as unsuccessful. With this option, the diagnostics are issued as - warnings, or, if `-Wno-globals' is specified, are not issued at - all. - - This option also disables inlining of global procedures, to avoid - compiler crashes resulting from coding errors that these - diagnostics normally would identify. - - * Diagnose cases where a reference to a procedure disagrees with the - type of that procedure, or where disagreements about the number or - nature of arguments exist. This avoids a compiler crash. - - * Fix parsing bug whereby `g77' rejected a second initialization - specification immediately following the first's closing `/' without - an intervening comma in a `DATA' statement, and the second - specification was an implied-DO list. - - * Improve performance of the `gcc' back end so certain complicated - expressions involving `COMPLEX' arithmetic (especially - multiplication) don't appear to take forever to compile. - - * Fix a couple of profiling-related bugs in `gcc' back end. - - * Integrate GNU Ada's (GNAT's) changes to the back end, which - consist almost entirely of bug fixes. These fixes are circa - version 3.10p of GNAT. - - * Include some other `gcc' fixes that seem useful in `g77''s version - of `gcc'. (See `gcc/ChangeLog' for details--compare it to that - file in the vanilla `gcc-2.7.2.3.tar.gz' distribution.) - - * Fix `libU77' routines that accept file and other names to strip - trailing blanks from them, for consistency with other - implementations. Blanks may be forcibly appended to such names by - appending a single null character (`CHAR(0)') to the significant - trailing blanks. - - * Fix `CHMOD' intrinsic to work with file names that have embedded - blanks, commas, and so on. - - * Fix `SIGNAL' intrinsic so it accepts an optional third `Status' - argument. - - * Fix `IDATE()' intrinsic subroutine (VXT form) so it accepts - arguments in the correct order. Documentation fixed accordingly, - and for `GMTIME()' and `LTIME()' as well. - - * Make many changes to `libU77' intrinsics to support existing code - more directly. - - Such changes include allowing both subroutine and function forms - of many routines, changing `MCLOCK()' and `TIME()' to return - `INTEGER(KIND=1)' values, introducing `MCLOCK8()' and `TIME8()' to - return `INTEGER(KIND=2)' values, and placing functions that are - intended to perform side effects in a new intrinsic group, - `badu77'. - - * Improve `libU77' so it is more portable. - - * Add options `-fbadu77-intrinsics-delete', - `-fbadu77-intrinsics-hide', and so on. - - * Fix crashes involving diagnosed or invalid code. - - * `g77' and `gcc' now do a somewhat better job detecting and - diagnosing arrays that are too large to handle before these cause - diagnostics during the assembler or linker phase, a compiler - crash, or generation of incorrect code. - - * Make some fixes to alias analysis code. - - * Add support for `restrict' keyword in `gcc' front end. - - * Support `gcc' version 2.7.2.3 (modified by `g77' into version - 2.7.2.3.f.1), and remove support for prior versions of `gcc'. - - * Incorporate GNAT's patches to the `gcc' back end into `g77''s, so - GNAT users do not need to apply GNAT's patches to build both GNAT - and `g77' from the same source tree. - - * Modify `make' rules and related code so that generation of Info - documentation doesn't require compilation using `gcc'. Now, any - ANSI C compiler should be adequate to produce the `g77' - documentation (in particular, the tables of intrinsics) from - scratch. - - * Add `INT2' and `INT8' intrinsics. - - * Add `CPU_TIME' intrinsic. - - * Add `ALARM' intrinsic. - - * `CTIME' intrinsic now accepts any `INTEGER' argument, not just - `INTEGER(KIND=2)'. - - * Warn when explicit type declaration disagrees with the type of an - intrinsic invocation. - - * Support `*f771' entry in `gcc' `specs' file. - - * Fix typo in `make' rule `g77-cross', used only for cross-compiling. - - * Fix `libf2c' build procedure to re-archive library if previous - attempt to archive was interrupted. - - * Change `gcc' to unroll loops only during the last invocation (of - as many as two invocations) of loop optimization. - - * Improve handling of `-fno-f2c' so that code that attempts to pass - an intrinsic as an actual argument, such as `CALL FOO(ABS)', is - rejected due to the fact that the run-time-library routine is, - effectively, compiled with `-ff2c' in effect. - - * Fix `g77' driver to recognize `-fsyntax-only' as an option that - inhibits linking, just like `-c' or `-S', and to recognize and - properly handle the `-nostdlib', `-M', `-MM', `-nodefaultlibs', - and `-Xlinker' options. - - * Upgrade to `libf2c' as of 1997-08-16. - - * Modify `libf2c' to consistently and clearly diagnose recursive I/O - (at run time). - - * `g77' driver now prints version information (such as produced by - `g77 -v') to `stderr' instead of `stdout'. - - * The `.r' suffix now designates a Ratfor source file, to be - preprocessed via the `ratfor' command, available separately. - - * Fix some aspects of how `gcc' determines what kind of system is - being configured and what kinds are supported. For example, GNU - Linux/Alpha ELF systems now are directly supported. - - * Improve diagnostics. - - * Improve documentation and indexing. - - * Include all pertinent files for `libf2c' that come from - `netlib.bell-labs.com'; give any such files that aren't quite - accurate in `g77''s version of `libf2c' the suffix `.netlib'. - - * Reserve `INTEGER(KIND=0)' for future use. - -In 0.5.20: -========== - - * The `-fno-typeless-boz' option is now the default. - - This option specifies that non-decimal-radix constants using the - prefixed-radix form (such as `Z'1234'') are to be interpreted as - `INTEGER' constants. Specify `-ftypeless-boz' to cause such - constants to be interpreted as typeless. - - (Version 0.5.19 introduced `-fno-typeless-boz' and its inverse.) - - * Options `-ff90-intrinsics-enable' and `-fvxt-intrinsics-enable' - now are the defaults. - - Some programs might use names that clash with intrinsic names - defined (and now enabled) by these options or by the new `libU77' - intrinsics. Users of such programs might need to compile them - differently (using, for example, `-ff90-intrinsics-disable') or, - better yet, insert appropriate `EXTERNAL' statements specifying - that these names are not intended to be names of intrinsics. - - * The `ALWAYS_FLUSH' macro is no longer defined when building - `libf2c', which should result in improved I/O performance, - especially over NFS. - - *Note:* If you have code that depends on the behavior of `libf2c' - when built with `ALWAYS_FLUSH' defined, you will have to modify - `libf2c' accordingly before building it from this and future - versions of `g77'. - - * Dave Love's implementation of `libU77' has been added to the - version of `libf2c' distributed with and built as part of `g77'. - `g77' now knows about the routines in this library as intrinsics. - - * New option `-fvxt' specifies that the source file is written in - VXT Fortran, instead of GNU Fortran. - - * The `-fvxt-not-f90' option has been deleted, along with its - inverse, `-ff90-not-vxt'. - - If you used one of these deleted options, you should re-read the - pertinent documentation to determine which options, if any, are - appropriate for compiling your code with this version of `g77'. - - * The `-fugly' option now issues a warning, as it likely will be - removed in a future version. - - (Enabling all the `-fugly-*' options is unlikely to be feasible, - or sensible, in the future, so users should learn to specify only - those `-fugly-*' options they really need for a particular source - file.) - - * The `-fugly-assumed' option, introduced in version 0.5.19, has - been changed to better accommodate old and new code. - - * Make a number of fixes to the `g77' front end and the `gcc' back - end to better support Alpha (AXP) machines. This includes - providing at least one bug-fix to the `gcc' back end for Alphas. - - * Related to supporting Alpha (AXP) machines, the `LOC()' intrinsic - and `%LOC()' construct now return values of integer type that is - the same width (holds the same number of bits) as the pointer type - on the machine. - - On most machines, this won't make a difference, whereas on Alphas, - the type these constructs return is `INTEGER*8' instead of the - more common `INTEGER*4'. - - * Emulate `COMPLEX' arithmetic in the `g77' front end, to avoid bugs - in `complex' support in the `gcc' back end. New option - `-fno-emulate-complex' causes `g77' to revert the 0.5.19 behavior. - - * Fix bug whereby `REAL A(1)', for example, caused a compiler crash - if `-fugly-assumed' was in effect and A was a local (automatic) - array. That case is no longer affected by the new handling of - `-fugly-assumed'. - - * Fix `g77' command driver so that `g77 -o foo.f' no longer deletes - `foo.f' before issuing other diagnostics, and so the `-x' option - is properly handled. - - * Enable inlining of subroutines and functions by the `gcc' back end. - This works as it does for `gcc' itself--program units may be - inlined for invocations that follow them in the same program unit, - as long as the appropriate compile-time options are specified. - - * Dummy arguments are no longer assumed to potentially alias - (overlap) other dummy arguments or `COMMON' areas when any of - these are defined (assigned to) by Fortran code. - - This can result in faster and/or smaller programs when compiling - with optimization enabled, though on some systems this effect is - observed only when `-fforce-addr' also is specified. - - New options `-falias-check', `-fargument-alias', - `-fargument-noalias', and `-fno-argument-noalias-global' control - the way `g77' handles potential aliasing. - - * The `CONJG()' and `DCONJG()' intrinsics now are compiled in-line. - - * The bug-fix for 0.5.19.1 has been re-done. The `g77' compiler has - been changed back to assume `libf2c' has no aliasing problems in - its implementations of the `COMPLEX' (and `DOUBLE COMPLEX') - intrinsics. The `libf2c' has been changed to have no such - problems. - - As a result, 0.5.20 is expected to offer improved performance over - 0.5.19.1, perhaps as good as 0.5.19 in most or all cases, due to - this change alone. - - *Note:* This change requires version 0.5.20 of `libf2c', at least, - when linking code produced by any versions of `g77' other than - 0.5.19.1. Use `g77 -v' to determine the version numbers of the - `libF77', `libI77', and `libU77' components of the `libf2c' - library. (If these version numbers are not printed--in - particular, if the linker complains about unresolved references to - names like `g77__fvers__'--that strongly suggests your - installation has an obsolete version of `libf2c'.) - - * New option `-fugly-assign' specifies that the same memory - locations are to be used to hold the values assigned by both - statements `I = 3' and `ASSIGN 10 TO I', for example. (Normally, - `g77' uses a separate memory location to hold assigned statement - labels.) - - * `FORMAT' and `ENTRY' statements now are allowed to precede - `IMPLICIT NONE' statements. - - * Produce diagnostic for unsupported `SELECT CASE' on `CHARACTER' - type, instead of crashing, at compile time. - - * Fix crashes involving diagnosed or invalid code. - - * Change approach to building `libf2c' archive (`libf2c.a') so that - members are added to it only when truly necessary, so the user - that installs an already-built `g77' doesn't need to have write - access to the build tree (whereas the user doing the build might - not have access to install new software on the system). - - * Support `gcc' version 2.7.2.2 (modified by `g77' into version - 2.7.2.2.f.2), and remove support for prior versions of `gcc'. - - * Upgrade to `libf2c' as of 1997-02-08, and fix up some of the build - procedures. - - * Improve general build procedures for `g77', fixing minor bugs - (such as deletion of any file named `f771' in the parent directory - of `gcc/'). - - * Enable full support of `INTEGER*8' available in `libf2c' and - `f2c.h' so that `f2c' users may make full use of its features via - the `g77' version of `f2c.h' and the `INTEGER*8' support routines - in the `g77' version of `libf2c'. - - * Improve `g77' driver and `libf2c' so that `g77 -v' yields version - information on the library. - - * The `SNGL' and `FLOAT' intrinsics now are specific intrinsics, - instead of synonyms for the generic intrinsic `REAL'. - - * New intrinsics have been added. These are `REALPART', `IMAGPART', - `COMPLEX', `LONG', and `SHORT'. - - * A new group of intrinsics, `gnu', has been added to contain the - new `REALPART', `IMAGPART', and `COMPLEX' intrinsics. An old - group, `dcp', has been removed. - - * Complain about industry-wide ambiguous references `REAL(EXPR)' and - `AIMAG(EXPR)', where EXPR is `DOUBLE COMPLEX' (or any complex type - other than `COMPLEX'), unless `-ff90' option specifies Fortran 90 - interpretation or new `-fugly-complex' option, in conjunction with - `-fnot-f90', specifies `f2c' interpretation. - - * Make improvements to diagnostics. - - * Speed up compiler a bit. - - * Improvements to documentation and indexing, including a new - chapter containing information on one, later more, diagnostics - that users are directed to pull up automatically via a message in - the diagnostic itself. - - (Hence the menu item `M' for the node `Diagnostics' in the - top-level menu of the Info documentation.) - -In 0.5.19.1: -============ - - * Code-generation bugs afflicting operations on complex data have - been fixed. - - These bugs occurred when assigning the result of an operation to a - complex variable (or array element) that also served as an input - to that operation. - - The operations affected by this bug were: `CONJG()', `DCONJG()', - `CCOS()', `CDCOS()', `CLOG()', `CDLOG()', `CSIN()', `CDSIN()', - `CSQRT()', `CDSQRT()', complex division, and raising a `DOUBLE - COMPLEX' operand to an `INTEGER' power. (The related generic and - `Z'-prefixed intrinsics, such as `ZSIN()', also were affected.) - - For example, `C = CSQRT(C)', `Z = Z/C', and `Z = Z**I' (where `C' - is `COMPLEX' and `Z' is `DOUBLE COMPLEX') have been fixed. - -In 0.5.19: -========== - - * Fix `FORMAT' statement parsing so negative values for specifiers - such as `P' (e.g. `FORMAT(-1PF8.1)') are correctly processed as - negative. - - * Fix `SIGNAL' intrinsic so it once again accepts a procedure as its - second argument. - - * A temporary kludge option provides bare-bones information on - `COMMON' and `EQUIVALENCE' members at debug time. - - * New `-fonetrip' option specifies FORTRAN-66-style one-trip `DO' - loops. - - * New `-fno-silent' option causes names of program units to be - printed as they are compiled, in a fashion similar to UNIX `f77' - and `f2c'. - - * New `-fugly-assumed' option specifies that arrays dimensioned via - `DIMENSION X(1)', for example, are to be treated as assumed-size. - - * New `-fno-typeless-boz' option specifies that non-decimal-radix - constants using the prefixed-radix form (such as `Z'1234'') are to - be interpreted as `INTEGER' constants. - - * New `-ff66' option is a "shorthand" option that specifies - behaviors considered appropriate for FORTRAN 66 programs. - - * New `-ff77' option is a "shorthand" option that specifies - behaviors considered appropriate for UNIX `f77' programs. - - * New `-fugly-comma' and `-fugly-logint' options provided to perform - some of what `-fugly' used to do. `-fugly' and `-fno-ugly' are - now "shorthand" options, in that they do nothing more than enable - (or disable) other `-fugly-*' options. - - * Fix parsing of assignment statements involving targets that are - substrings of elements of `CHARACTER' arrays having names such as - `READ', `WRITE', `GOTO', and `REALFUNCTIONFOO'. - - * Fix crashes involving diagnosed code. - - * Fix handling of local `EQUIVALENCE' areas so certain cases of - valid Fortran programs are not misdiagnosed as improperly - extending the area backwards. - - * Support `gcc' version 2.7.2.1. - - * Upgrade to `libf2c' as of 1996-09-26, and fix up some of the build - procedures. - - * Change code generation for list-directed I/O so it allows for new - versions of `libf2c' that might return non-zero status codes for - some operations previously assumed to always return zero. - - This change not only affects how `IOSTAT=' variables are set by - list-directed I/O, it also affects whether `END=' and `ERR=' - labels are reached by these operations. - - * Add intrinsic support for new `FTELL' and `FSEEK' procedures in - `libf2c'. - - * Modify `fseek_()' in `libf2c' to be more portable (though, in - practice, there might be no systems where this matters) and to - catch invalid `whence' arguments. - - * Some useless warnings from the `-Wunused' option have been - eliminated. - - * Fix a problem building the `f771' executable on AIX systems by - linking with the `-bbigtoc' option. - - * Abort configuration if `gcc' has not been patched using the patch - file provided in the `gcc/f/gbe/' subdirectory. - - * Add options `--help' and `--version' to the `g77' command, to - conform to GNU coding guidelines. Also add printing of `g77' - version number when the `--verbose' (`-v') option is used. - - * Change internally generated name for local `EQUIVALENCE' areas to - one based on the alphabetically sorted first name in the list of - names for entities placed at the beginning of the areas. - - * Improvements to documentation and indexing. - -In 0.5.18: -========== - - * Add some rudimentary support for `INTEGER*1', `INTEGER*2', - `INTEGER*8', and their `LOGICAL' equivalents. (This support works - on most, maybe all, `gcc' targets.) - - Thanks to Scott Snyder () for providing - the patch for this! - - Among the missing elements from the support for these features are - full intrinsic support and constants. - - * Add some rudimentary support for the `BYTE' and `WORD' - type-declaration statements. `BYTE' corresponds to `INTEGER*1', - while `WORD' corresponds to `INTEGER*2'. - - Thanks to Scott Snyder () for providing - the patch for this! - - * The compiler code handling intrinsics has been largely rewritten - to accommodate the new types. No new intrinsics or arguments for - existing intrinsics have been added, so there is, at this point, - no intrinsic to convert to `INTEGER*8', for example. - - * Support automatic arrays in procedures. - - * Reduce space/time requirements for handling large *sparsely* - initialized aggregate arrays. This improvement applies to only a - subset of the general problem to be addressed in 0.6. - - * Treat initial values of zero as if they weren't specified (in DATA - and type-declaration statements). The initial values will be set - to zero anyway, but the amount of compile time processing them - will be reduced, in some cases significantly (though, again, this - is only a subset of the general problem to be addressed in 0.6). - - A new option, `-fzeros', is introduced to enable the traditional - treatment of zeros as any other value. - - * With `-ff90' in force, `g77' incorrectly interpreted `REAL(Z)' as - returning a `REAL' result, instead of as a `DOUBLE PRECISION' - result. (Here, `Z' is `DOUBLE COMPLEX'.) - - With `-fno-f90' in force, the interpretation remains unchanged, - since this appears to be how at least some F77 code using the - `DOUBLE COMPLEX' extension expected it to work. - - Essentially, `REAL(Z)' in F90 is the same as `DBLE(Z)', while in - extended F77, it appears to be the same as `REAL(REAL(Z))'. - - * An expression involving exponentiation, where both operands were - type `INTEGER' and the right-hand operand was negative, was - erroneously evaluated. - - * Fix bugs involving `DATA' implied-`DO' constructs (these involved - an errant diagnostic and a crash, both on good code, one involving - subsequent statement-function definition). - - * Close `INCLUDE' files after processing them, so compiling source - files with lots of `INCLUDE' statements does not result in being - unable to open `INCLUDE' files after all the available file - descriptors are used up. - - * Speed up compiling, especially of larger programs, and perhaps - slightly reduce memory utilization while compiling (this is *not* - the improvement planned for 0.6 involving large aggregate - areas)--these improvements result from simply turning off some - low-level code to do self-checking that hasn't been triggered in a - long time. - - * Introduce three new options that implement optimizations in the - `gcc' back end (GBE). These options are `-fmove-all-movables', - `-freduce-all-givs', and `-frerun-loop-opt', which are enabled, by - default, for Fortran compilations. These optimizations are - intended to help toon Fortran programs. - - * Patch the GBE to do a better job optimizing certain kinds of - references to array elements. - - * Due to patches to the GBE, the version number of `gcc' also is - patched to make it easier to manage installations, especially - useful if it turns out a `g77' change to the GBE has a bug. - - The `g77'-modified version number is the `gcc' version number with - the string `.f.N' appended, where `f' identifies the version as - enhanced for Fortran, and N is `1' for the first Fortran patch for - that version of `gcc', `2' for the second, and so on. - - So, this introduces version 2.7.2.f.1 of `gcc'. - - * Make several improvements and fixes to diagnostics, including the - removal of two that were inappropriate or inadequate. - - * Warning about two successive arithmetic operators, produced by - `-Wsurprising', now produced *only* when both operators are, - indeed, arithmetic (not relational/boolean). - - * `-Wsurprising' now warns about the remaining cases of using - non-integral variables for implied-`DO' loops, instead of these - being rejected unless `-fpedantic' or `-fugly' specified. - - * Allow `SAVE' of a local variable or array, even after it has been - given an initial value via `DATA', for example. - - * Introduce an Info version of `g77' documentation, which supercedes - `gcc/f/CREDITS', `gcc/f/DOC', and `gcc/f/PROJECTS'. These files - will be removed in a future release. The files `gcc/f/BUGS', - `gcc/f/INSTALL', and `gcc/f/NEWS' now are automatically built from - the texinfo source when distributions are made. - - This effort was inspired by a first pass at translating - `g77-0.5.16/f/DOC' that was contributed to Craig by David Ronis - (). - - * New `-fno-second-underscore' option to specify that, when - `-funderscoring' is in effect, a second underscore is not to be - appended to Fortran names already containing an underscore. - - * Change the way iterative `DO' loops work to follow the F90 - standard. In particular, calculation of the iteration count is - still done by converting the start, end, and increment parameters - to the type of the `DO' variable, but the result of the - calculation is always converted to the default `INTEGER' type. - - (This should have no effect on existing code compiled by `g77', - but code written to assume that use of a *wider* type for the `DO' - variable will result in an iteration count being fully calculated - using that wider type (wider than default `INTEGER') must be - rewritten.) - - * Support `gcc' version 2.7.2. - - * Upgrade to `libf2c' as of 1996-03-23, and fix up some of the build - procedures. - - Note that the email addresses related to `f2c' have changed--the - distribution site now is named `netlib.bell-labs.com', and the - maintainer's new address is . - -In 0.5.17: -========== - - * *Fix serious bug* in `g77 -v' command that can cause removal of a - system's `/dev/null' special file if run by user `root'. - - *All users* of version 0.5.16 should ensure that they have not - removed `/dev/null' or replaced it with an ordinary file (e.g. by - comparing the output of `ls -l /dev/null' with `ls -l /dev/zero'. - If the output isn't basically the same, contact your system - administrator about restoring `/dev/null' to its proper status). - - This bug is particularly insidious because removing `/dev/null' as - a special file can go undetected for quite a while, aside from - various applications and programs exhibiting sudden, strange - behaviors. - - I sincerely apologize for not realizing the implications of the - fact that when `g77 -v' runs the `ld' command with `-o /dev/null' - that `ld' tries to *remove* the executable it is supposed to build - (especially if it reports unresolved references, which it should - in this case)! - - * Fix crash on `CHARACTER*(*) FOO' in a main or block data program - unit. - - * Fix crash that can occur when diagnostics given outside of any - program unit (such as when input file contains `@foo'). - - * Fix crashes, infinite loops (hangs), and such involving diagnosed - code. - - * Fix `ASSIGN''ed variables so they can be `SAVE''d or dummy - arguments, and issue clearer error message in cases where target - of `ASSIGN' or `ASSIGN'ed `GOTO'/`FORMAT' is too small (which - should never happen). - - * Make `libf2c' build procedures work on more systems again by - eliminating unnecessary invocations of `ld -r -x' and `mv'. - - * Fix omission of `-funix-intrinsics-...' options in list of - permitted options to compiler. - - * Fix failure to always diagnose missing type declaration for - `IMPLICIT NONE'. - - * Fix compile-time performance problem (which could sometimes crash - the compiler, cause a hang, or whatever, due to a bug in the back - end) involving exponentiation with a large `INTEGER' constant for - the right-hand operator (e.g. `I**32767'). - - * Fix build procedures so cross-compiling `g77' (the `fini' utility - in particular) is properly built using the host compiler. - - * Add new `-Wsurprising' option to warn about constructs that are - interpreted by the Fortran standard (and `g77') in ways that are - surprising to many programmers. - - * Add `ERF()' and `ERFC()' as generic intrinsics mapping to existing - `ERF'/`DERF' and `ERFC'/`DERFC' specific intrinsics. - - *Note:* You should specify `INTRINSIC ERF,ERFC' in any code where - you might use these as generic intrinsics, to improve likelihood - of diagnostics (instead of subtle run-time bugs) when using a - compiler that doesn't support these as intrinsics (e.g. `f2c'). - - * Remove from `-fno-pedantic' the diagnostic about `DO' with - non-`INTEGER' index variable; issue that under `-Wsurprising' - instead. - - * Clarify some diagnostics that say things like "ignored" when that's - misleading. - - * Clarify diagnostic on use of `.EQ.'/`.NE.' on `LOGICAL' operands. - - * Minor improvements to code generation for various operations on - `LOGICAL' operands. - - * Minor improvement to code generation for some `DO' loops on some - machines. - - * Support `gcc' version 2.7.1. - - * Upgrade to `libf2c' as of 1995-11-15. - -In 0.5.16: -========== - - * Fix a code-generation bug involving complicated `EQUIVALENCE' - statements not involving `COMMON'. - - * Fix code-generation bugs involving invoking "gratis" library - procedures in `libf2c' from code compiled with `-fno-f2c' by - making these procedures known to `g77' as intrinsics (not affected - by -fno-f2c). This is known to fix code invoking `ERF()', - `ERFC()', `DERF()', and `DERFC()'. - - * Update `libf2c' to include netlib patches through 1995-08-16, and - `#define' `WANT_LEAD_0' to 1 to make `g77'-compiled code more - consistent with other Fortran implementations by outputting - leading zeros in formatted and list-directed output. - - * Fix a code-generation bug involving adjustable dummy arrays with - high bounds whose primaries are changed during procedure - execution, and which might well improve code-generation - performance for such arrays compared to `f2c' plus `gcc' (but - apparently only when using `gcc-2.7.0' or later). - - * Fix a code-generation bug involving invocation of `COMPLEX' and - `DOUBLE COMPLEX' `FUNCTION's and doing `COMPLEX' and `DOUBLE - COMPLEX' divides, when the result of the invocation or divide is - assigned directly to a variable that overlaps one or more of the - arguments to the invocation or divide. - - * Fix crash by not generating new optimal code for `X**I' if `I' is - nonconstant and the expression is used to dimension a dummy array, - since the `gcc' back end does not support the necessary mechanics - (and the `gcc' front end rejects the equivalent construct, as it - turns out). - - * Fix crash on expressions like `COMPLEX**INTEGER'. - - * Fix crash on expressions like `(1D0,2D0)**2', i.e. raising a - `DOUBLE COMPLEX' constant to an `INTEGER' constant power. - - * Fix crashes and such involving diagnosed code. - - * Diagnose, instead of crashing on, statement function definitions - having duplicate dummy argument names. - - * Fix bug causing rejection of good code involving statement function - definitions. - - * Fix bug resulting in debugger not knowing size of local equivalence - area when any member of area has initial value (via `DATA', for - example). - - * Fix installation bug that prevented installation of `g77' driver. - Provide for easy selection of whether to install copy of `g77' as - `f77' to replace the broken code. - - * Fix `gcc' driver (affects `g77' thereby) to not gratuitously - invoke the `f771' program (e.g. when `-E' is specified). - - * Fix diagnostic to point to correct source line when it immediately - follows an `INCLUDE' statement. - - * Support more compiler options in `gcc'/`g77' when compiling - Fortran files. These options include `-p', `-pg', `-aux-info', - `-P', correct setting of version-number macros for preprocessing, - full recognition of `-O0', and automatic insertion of - configuration-specific linker specs. - - * Add new intrinsics that interface to existing routines in `libf2c': - `ABORT', `DERF', `DERFC', `ERF', `ERFC', `EXIT', `FLUSH', - `GETARG', `GETENV', `IARGC', `SIGNAL', and `SYSTEM'. Note that - `ABORT', `EXIT', `FLUSH', `SIGNAL', and `SYSTEM' are intrinsic - subroutines, not functions (since they have side effects), so to - get the return values from `SIGNAL' and `SYSTEM', append a final - argument specifying an `INTEGER' variable or array element (e.g. - `CALL SYSTEM('rm foo',ISTAT)'). - - * Add new intrinsic group named `unix' to contain the new intrinsics, - and by default enable this new group. - - * Move `LOC()' intrinsic out of the `vxt' group to the new `unix' - group. - - * Improve `g77' so that `g77 -v' by itself (or with certain other - options, including `-B', `-b', `-i', `-nostdlib', and `-V') - reports lots more useful version info, and so that long-form - options `gcc' accepts are understood by `g77' as well (even in - truncated, unambiguous forms). - - * Add new `g77' option `--driver=name' to specify driver when - default, `gcc', isn't appropriate. - - * Add support for `#' directives (as output by the preprocessor) in - the compiler, and enable generation of those directives by the - preprocessor (when compiling `.F' files) so diagnostics and - debugging info are more useful to users of the preprocessor. - - * Produce better diagnostics, more like `gcc', with info such as `In - function `foo':' and `In file included from...:'. - - * Support `gcc''s `-fident' and `-fno-ident' options. - - * When `-Wunused' in effect, don't warn about local variables used as - statement-function dummy arguments or `DATA' implied-`DO' iteration - variables, even though, strictly speaking, these are not uses of - the variables themselves. - - * When `-W -Wunused' in effect, don't warn about unused dummy - arguments at all, since there's no way to turn this off for - individual cases (`g77' might someday start warning about - these)--applies to `gcc' versions 2.7.0 and later, since earlier - versions didn't warn about unused dummy arguments. - - * New option `-fno-underscoring' that inhibits transformation of - names (by appending one or two underscores) so users may experiment - with implications of such an environment. - - * Minor improvement to `gcc/f/info' module to make it easier to build - `g77' using the native (non-`gcc') compiler on certain machines - (but definitely not all machines nor all non-`gcc' compilers). - Please do not report bugs showing problems compilers have with - macros defined in `gcc/f/target.h' and used in places like - `gcc/f/expr.c'. - - * Add warning to be printed for each invocation of the compiler if - the target machine `INTEGER', `REAL', or `LOGICAL' size is not 32 - bits, since `g77' is known to not work well for such cases (to be - fixed in Version 0.6--*note Actual Bugs We Haven't Fixed Yet: - Actual Bugs.). - - * Lots of new documentation (though work is still needed to put it - into canonical GNU format). - - * Build `libf2c' with `-g0', not `-g2', in effect (by default), to - produce smaller library without lots of debugging clutter. - -In 0.5.15: -========== - - * Fix bad code generation involving `X**I' and temporary, internal - variables generated by `g77' and the back end (such as for `DO' - loops). - - * Fix crash given `CHARACTER A;DATA A/.TRUE./'. - - * Replace crash with diagnostic given `CHARACTER A;DATA A/1.0/'. - - * Fix crash or other erratic behavior when null character constant - (`''') is encountered. - - * Fix crash or other erratic behavior involving diagnosed code. - - * Fix code generation for external functions returning type `REAL' - when the `-ff2c' option is in force (which it is by default) so - that `f2c' compatibility is indeed provided. - - * Disallow `COMMON I(10)' if `I' has previously been specified with - an array declarator. - - * New `-ffixed-line-length-N' option, where N is the maximum length - of a typical fixed-form line, defaulting to 72 columns, such that - characters beyond column N are ignored, or N is `none', meaning no - characters are ignored. does not affect lines with `&' in column - 1, which are always processed as if `-ffixed-line-length-none' was - in effect. - - * No longer generate better code for some kinds of array references, - as `gcc' back end is to be fixed to do this even better, and it - turned out to slow down some code in some cases after all. - - * In `COMMON' and `EQUIVALENCE' areas with any members given initial - values (e.g. via `DATA'), uninitialized members now always - initialized to binary zeros (though this is not required by the - standard, and might not be done in future versions of `g77'). - Previously, in some `COMMON'/`EQUIVALENCE' areas (essentially - those with members of more than one type), the uninitialized - members were initialized to spaces, to cater to `CHARACTER' types, - but it seems no existing code expects that, while much existing - code expects binary zeros. - -In 0.5.14: -========== - - * Don't emit bad code when low bound of adjustable array is - nonconstant and thus might vary as an expression at run time. - - * Emit correct code for calculation of number of trips in `DO' loops - for cases where the loop should not execute at all. (This bug - affected cases where the difference between the begin and end - values was less than the step count, though probably not for - floating-point cases.) - - * Fix crash when extra parentheses surround item in `DATA' - implied-`DO' list. - - * Fix crash over minor internal inconsistencies in handling - diagnostics, just substitute dummy strings where necessary. - - * Fix crash on some systems when compiling call to `MVBITS()' - intrinsic. - - * Fix crash on array assignment `TYPEDDD(...)=...', where DDD is a - string of one or more digits. - - * Fix crash on `DCMPLX()' with a single `INTEGER' argument. - - * Fix various crashes involving code with diagnosed errors. - - * Support `-I' option for `INCLUDE' statement, plus `gcc''s - `header.gcc' facility for handling systems like MS-DOS. - - * Allow `INCLUDE' statement to be continued across multiple lines, - even allow it to coexist with other statements on the same line. - - * Incorporate Bellcore fixes to `libf2c' through 1995-03-15--this - fixes a bug involving infinite loops reading EOF with empty - list-directed I/O list. - - * Remove all the `g77'-specific auto-configuration scripts, code, - and so on, except for temporary substitutes for bsearch() and - strtoul(), as too many configure/build problems were reported in - these areas. People will have to fix their systems' problems - themselves, or at least somewhere other than `g77', which expects - a working ANSI C environment (and, for now, a GNU C compiler to - compile `g77' itself). - - * Complain if initialized common redeclared as larger in subsequent - program unit. - - * Warn if blank common initialized, since its size can vary and hence - related warnings that might be helpful won't be seen. - - * New `-fbackslash' option, on by default, that causes `\' within - `CHARACTER' and Hollerith constants to be interpreted a la GNU C. - Note that this behavior is somewhat different from `f2c''s, which - supports only a limited subset of backslash (escape) sequences. - - * Make `-fugly-args' the default. - - * New `-fugly-init' option, on by default, that allows - typeless/Hollerith to be specified as initial values for variables - or named constants (`PARAMETER'), and also allows - character<->numeric conversion in those contexts--turn off via - `-fno-ugly-init'. - - * New `-finit-local-zero' option to initialize local variables to - binary zeros. This does not affect whether they are `SAVE'd, i.e. - made automatic or static. - - * New `-Wimplicit' option to warn about implicitly typed variables, - arrays, and functions. (Basically causes all program units to - default to `IMPLICIT NONE'.) - - * `-Wall' now implies `-Wuninitialized' as with `gcc' (i.e. unless - `-O' not specified, since `-Wuninitialized' requires `-O'), and - implies `-Wunused' as well. - - * `-Wunused' no longer gives spurious messages for unused `EXTERNAL' - names (since they are assumed to refer to block data program - units, to make use of libraries more reliable). - - * Support `%LOC()' and `LOC()' of character arguments. - - * Support null (zero-length) character constants and expressions. - - * Support `f2c''s `IMAG()' generic intrinsic. - - * Support `ICHAR()', `IACHAR()', and `LEN()' of character - expressions that are valid in assignments but not normally as - actual arguments. - - * Support `f2c'-style `&' in column 1 to mean continuation line. - - * Allow `NAMELIST', `EXTERNAL', `INTRINSIC', and `VOLATILE' in - `BLOCK DATA', even though these are not allowed by the standard. - - * Allow `RETURN' in main program unit. - - * Changes to Hollerith-constant support to obey Appendix C of the - standard: - - - Now padded on the right with zeros, not spaces. - - - Hollerith "format specifications" in the form of arrays of - non-character allowed. - - - Warnings issued when non-space truncation occurs when - converting to another type. - - - When specified as actual argument, now passed by reference to - `INTEGER' (padded on right with spaces if constant too small, - otherwise fully intact if constant wider the `INTEGER' type) - instead of by value. - - *Warning:* `f2c' differs on the interpretation of `CALL FOO(1HX)', - which it treats exactly the same as `CALL FOO('X')', but which the - standard and `g77' treat as `CALL FOO(%REF('X '))' (padded with - as many spaces as necessary to widen to `INTEGER'), essentially. - - * Changes and fixes to typeless-constant support: - - - Now treated as a typeless double-length `INTEGER' value. - - - Warnings issued when overflow occurs. - - - Padded on the left with zeros when converting to a larger - type. - - - Should be properly aligned and ordered on the target machine - for whatever type it is turned into. - - - When specified as actual argument, now passed as reference to - a default `INTEGER' constant. - - * `%DESCR()' of a non-`CHARACTER' expression now passes a pointer to - the expression plus a length for the expression just as if it were - a `CHARACTER' expression. For example, `CALL FOO(%DESCR(D))', - where `D' is `REAL*8', is the same as `CALL FOO(D,%VAL(8)))'. - - * Name of multi-entrypoint master function changed to incorporate - the name of the primary entry point instead of a decimal value, so - the name of the master function for `SUBROUTINE X' with alternate - entry points is now `__g77_masterfun_x'. - - * Remove redundant message about zero-step-count `DO' loops. - - * Clean up diagnostic messages, shortening many of them. - - * Fix typo in `g77' man page. - - * Clarify implications of constant-handling bugs in `f/BUGS'. - - * Generate better code for `**' operator with a right-hand operand of - type `INTEGER'. - - * Generate better code for `SQRT()' and `DSQRT()', also when - `-ffast-math' specified, enable better code generation for `SIN()' - and `COS()'. - - * Generate better code for some kinds of array references. - - * Speed up lexing somewhat (this makes the compilation phase - noticeably faster). + Information on previous versions is not provided in this +`egcs/gcc/f/NEWS' file, to keep it short. See `egcs/gcc/f/news.texi', +or any of its other derivations (Info, HTML, dvi forms) for such +information.