Annotation of GNUtools/cc/gcc.info-6, revision 1.1.1.1

1.1       root        1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
                      2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
                      9:    Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
                     10: 
                     11:    Permission is granted to make and distribute verbatim copies of this
                     12: manual provided the copyright notice and this permission notice are
                     13: preserved on all copies.
                     14: 
                     15:    Permission is granted to copy and distribute modified versions of
                     16: this manual under the conditions for verbatim copying, provided also
                     17: that the sections entitled "GNU General Public License" and "Protect
                     18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
                     19: original, and provided that the entire resulting derived work is
                     20: distributed under the terms of a permission notice identical to this
                     21: one.
                     22: 
                     23:    Permission is granted to copy and distribute translations of this
                     24: manual into another language, under the above conditions for modified
                     25: versions, except that the sections entitled "GNU General Public
                     26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
                     27: permission notice, may be included in translations approved by the Free
                     28: Software Foundation instead of in the original English.
                     29: 
                     30: 
                     31: File: gcc.info,  Node: PA Install,  Next: Sun Install,  Prev: Cross-Compiler,  Up: Installation
                     32: 
                     33: Installing on the HP Precision Architecture
                     34: ===========================================
                     35: 
                     36:    There are two variants of this CPU, called 1.0 and 1.1, which have
                     37: different machine descriptions.  You must use the right one for your
                     38: machine.  All 7NN machines and 8N7 machines use 1.1, while all other
                     39: 8NN machines use 1.0.
                     40: 
                     41:    The easiest way to handle this problem is to use `configure hpNNN'
                     42: or `configure hpNNN-hpux', where NNN is the model number of the
                     43: machine.  Then `configure' will figure out if the machine is a 1.0 or
                     44: 1.1.  Use `uname -a' to find out the model number of your machine.
                     45: 
                     46:    `-g' does not work on HP-UX, since that system uses a peculiar
                     47: debugging format which GNU CC does not know about.  There are
                     48: preliminary versions of GAS and GDB for the HP-PA which do work with
                     49: GNU CC for debugging.  You can get them by anonymous ftp from
                     50: `jaguar.cs.utah.edu' `dist' subdirectory.  You would need to install
                     51: GAS in the file
                     52: 
                     53:      /usr/local/lib/gcc-lib/CONFIGURATION/GCCVERSION/as
                     54: 
                     55: where CONFIGURATION is the configuration name (perhaps `hpNNN-hpux')
                     56: and GCCVERSION is the GNU CC version number.  Do this *before* starting
                     57: the build process, otherwise you will get errors from the HPUX
                     58: assembler while building `libgcc2.a'.  The command
                     59: 
                     60:      make install-dir
                     61: 
                     62: will create the necessary directory hierarchy so you can install GAS
                     63: before building GCC.
                     64: 
                     65:    If you obtained GAS before October 6, 1992 it is highly recommended
                     66: you get a new one to avoid several bugs which have been discovered
                     67: recently.
                     68: 
                     69:    To enable debugging, configure GNU CC with the `--gas' option before
                     70: building.
                     71: 
                     72:    It has been reported that GNU CC produces invalid assembly code for
                     73: 1.1 machines running HP-UX 8.02 when using the HP assembler.  Typically
                     74: the errors look like this:
                     75:      as: bug.s @line#15 [err#1060]
                     76:        Argument 0 or 2 in FARG upper
                     77:               - lookahead = ARGW1=FR,RTNVAL=GR
                     78:      as: foo.s @line#28 [err#1060]
                     79:        Argument 0 or 2 in FARG upper
                     80:               - lookahead = ARGW1=FR
                     81: 
                     82:    You can check the version of HP-UX you are running by executing the
                     83: command `uname -r'.   If you are indeed running HP-UX 8.02 on a 1.1
                     84: machine and using the HP assembler then configure GCC with
                     85: "hp700-hpux8.02".
                     86: 
                     87: 
                     88: File: gcc.info,  Node: Sun Install,  Next: 3b1 Install,  Prev: PA Install,  Up: Installation
                     89: 
                     90: Installing GNU CC on the Sun
                     91: ============================
                     92: 
                     93:    On Solaris (version 2.1), do not use the linker or other tools in
                     94: `/usr/ucb' to build GNU CC.  Use `/usr/ccs/bin'.
                     95: 
                     96:    Make sure the environment variable `FLOAT_OPTION' is not set when
                     97: you compile `libgcc.a'.  If this option were set to `f68881' when
                     98: `libgcc.a' is compiled, the resulting code would demand to be linked
                     99: with a special startup file and would not link properly without special
                    100: pains.
                    101: 
                    102:    The GNU compiler does not really support the Super SPARC processor
                    103: that is used in SPARC Station 10 and similar class machines.  You can
                    104: get code that runs by specifying `sparc' as the cpu type; however, its
                    105: performance is not very good, and may vary widely according to the
                    106: compiler version and optimization options used.  This is because the
                    107: instruction scheduling parameters designed for the Sparc are not correct
                    108: for the Super SPARC.  Implementing scheduling parameters for the Super
                    109: SPARC might be a good project for someone who is willing to learn a
                    110: great deal about instruction scheduling in GNU CC.
                    111: 
                    112:    There is a bug in `alloca' in certain versions of the Sun library.
                    113: To avoid this bug, install the binaries of GNU CC that were compiled by
                    114: GNU CC.  They use `alloca' as a built-in function and never the one in
                    115: the library.
                    116: 
                    117:    Some versions of the Sun compiler crash when compiling GNU CC.  The
                    118: problem is a segmentation fault in cpp.  This problem seems to be due to
                    119: the bulk of data in the environment variables.  You may be able to avoid
                    120: it by using the following command to compile GNU CC with Sun CC:
                    121: 
                    122:      make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
                    123: 
                    124: 
                    125: File: gcc.info,  Node: 3b1 Install,  Next: Unos Install,  Prev: Sun Install,  Up: Installation
                    126: 
                    127: Installing GNU CC on the 3b1
                    128: ============================
                    129: 
                    130:    Installing GNU CC on the 3b1 is difficult if you do not already have
                    131: GNU CC running, due to bugs in the installed C compiler.  However, the
                    132: following procedure might work.  We are unable to test it.
                    133: 
                    134:   1. Comment out the `#include "config.h"' line on line 37 of `cccp.c'
                    135:      and do `make cpp'.  This makes a preliminary version of GNU cpp.
                    136: 
                    137:   2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to that
                    138:      file name.
                    139: 
                    140:   3. Undo your change in `cccp.c', or reinstall the original version,
                    141:      and do `make cpp' again.
                    142: 
                    143:   4. Copy this final version of GNU cpp into `/lib/cpp'.
                    144: 
                    145:   5. Replace every occurrence of `obstack_free' in the file `tree.c'
                    146:      with `_obstack_free'.
                    147: 
                    148:   6. Run `make' to get the first-stage GNU CC.
                    149: 
                    150:   7. Reinstall the original version of `/lib/cpp'.
                    151: 
                    152:   8. Now you can compile GNU CC with itself and install it in the normal
                    153:      fashion.
                    154: 
                    155: 
                    156: File: gcc.info,  Node: Unos Install,  Next: VMS Install,  Prev: 3b1 Install,  Up: Installation
                    157: 
                    158: Installing GNU CC on Unos
                    159: =========================
                    160: 
                    161:    Use `configure unos' for building on Unos.
                    162: 
                    163:    The Unos assembler is named `casm' instead of `as'.  For some
                    164: strange reason linking `/bin/as' to `/bin/casm' changes the behavior,
                    165: and does not work.  So, when installing GNU CC, you should install the
                    166: following script as `as' in the subdirectory where the passes of GCC
                    167: are installed:
                    168: 
                    169:      #!/bin/sh
                    170:      casm $*
                    171: 
                    172:    The default Unos library is named `libunos.a' instead of `libc.a'.
                    173: To allow GNU CC to function, either change all references to `-lc' in
                    174: `gcc.c' to `-lunos' or link `/lib/libc.a' to `/lib/libunos.a'.
                    175: 
                    176:    When compiling GNU CC with the standard compiler, to overcome bugs in
                    177: the support of `alloca', do not use `-O' when making stage 2.  Then use
                    178: the stage 2 compiler with `-O' to make the stage 3 compiler.  This
                    179: compiler will have the same characteristics as the usual stage 2
                    180: compiler on other systems.  Use it to make a stage 4 compiler and
                    181: compare that with stage 3 to verify proper compilation.
                    182: 
                    183:    (Perhaps simply defining `ALLOCA' in `x-crds' as described in the
                    184: comments there will make the above paragraph superfluous.  Please
                    185: inform us of whether this works.)
                    186: 
                    187:    Unos uses memory segmentation instead of demand paging, so you will
                    188: need a lot of memory.  5 Mb is barely enough if no other tasks are
                    189: running.  If linking `cc1' fails, try putting the object files into a
                    190: library and linking from that library.
                    191: 
                    192: 
                    193: File: gcc.info,  Node: VMS Install,  Next: WE32K Install,  Prev: Unos Install,  Up: Installation
                    194: 
                    195: Installing GNU CC on VMS
                    196: ========================
                    197: 
                    198:    The VMS version of GNU CC is distributed in a backup saveset
                    199: containing both source code and precompiled binaries.
                    200: 
                    201:    To install the `gcc' command so you can use the compiler easily, in
                    202: the same manner as you use the VMS C compiler, you must install the VMS
                    203: CLD file for GNU CC as follows:
                    204: 
                    205:   1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to
                    206:      point to the directories where the GNU CC executables
                    207:      (`gcc-cpp.exe', `gcc-cc1.exe', etc.) and the C include files are
                    208:      kept respectively.  This should be done with the commands:
                    209: 
                    210:           $ assign /system /translation=concealed -
                    211:             disk:[gcc.] gnu_cc
                    212:           $ assign /system /translation=concealed -
                    213:             disk:[gcc.include.] gnu_cc_include
                    214: 
                    215:      with the appropriate disk and directory names.  These commands can
                    216:      be placed in your system startup file so they will be executed
                    217:      whenever the machine is rebooted.  You may, if you choose, do this
                    218:      via the `GCC_INSTALL.COM' script in the `[GCC]' directory.
                    219: 
                    220:   2. Install the `GCC' command with the command line:
                    221: 
                    222:           $ set command /table=sys$common:[syslib]dcltables -
                    223:             /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
                    224:           $ install replace sys$common:[syslib]dcltables
                    225: 
                    226:   3. To install the help file, do the following:
                    227: 
                    228:           $ library/help sys$library:helplib.hlb gcc.hlp
                    229: 
                    230:      Now you can invoke the compiler with a command like `gcc /verbose
                    231:      file.c', which is equivalent to the command `gcc -v -c file.c' in
                    232:      Unix.
                    233: 
                    234:    If you wish to use GNU C++ you must first install GNU CC, and then
                    235: perform the following steps:
                    236: 
                    237:   1. Define the VMS logical name `GNU_GXX_INCLUDE' to point to the
                    238:      directory where the preprocessor will search for the C++ header
                    239:      files.  This can be done with the command:
                    240: 
                    241:           $ assign /system /translation=concealed -
                    242:             disk:[gcc.gxx_include.] gnu_gxx_include
                    243: 
                    244:      with the appropriate disk and directory name.  If you are going to
                    245:      be using libg++, this is where the libg++ install procedure will
                    246:      install the libg++ header files.
                    247: 
                    248:   2. Obtain the file `gcc-cc1plus.exe', and place this in the same
                    249:      directory that `gcc-cc1.exe' is kept.
                    250: 
                    251:      The GNU C++ compiler can be invoked with a command like `gcc /plus
                    252:      /verbose file.cc', which is equivalent to the command `g++ -v -c
                    253:      file.cc' in Unix.
                    254: 
                    255:    We try to put corresponding binaries and sources on the VMS
                    256: distribution tape.  But sometimes the binaries will be from an older
                    257: version than the sources, because we don't always have time to update
                    258: them.  (Use the `/version' option to determine the version number of
                    259: the binaries and compare it with the source file `version.c' to tell
                    260: whether this is so.)  In this case, you should use the binaries you get
                    261: to recompile the sources.  If you must recompile, here is how:
                    262: 
                    263:   1. Execute the command procedure `vmsconfig.com' to set up the files
                    264:      `tm.h', `config.h', `aux-output.c', and `md.', and to create files
                    265:      `tconfig.h' and `hconfig.h'.  This procedure also creates several
                    266:      linker option files used by `make-cc1.com' and a data file used by
                    267:      `make-l2.com'.
                    268: 
                    269:           $ @vmsconfig.com
                    270: 
                    271:   2. Setup the logical names and command tables as defined above.  In
                    272:      addition, define the VMS logical name `GNU_BISON' to point at the
                    273:      to the directories where the Bison executable is kept.  This
                    274:      should be done with the command:
                    275: 
                    276:           $ assign /system /translation=concealed -
                    277:             disk:[bison.] gnu_bison
                    278: 
                    279:      You may, if you choose, use the `INSTALL_BISON.COM' script in the
                    280:      `[BISON]' directory.
                    281: 
                    282:   3. Install the `BISON' command with the command line:
                    283: 
                    284:           $ set command /table=sys$common:[syslib]dcltables -
                    285:             /output=sys$common:[syslib]dcltables -
                    286:             gnu_bison:[000000]bison
                    287:           $ install replace sys$common:[syslib]dcltables
                    288: 
                    289:   4. Type `@make-gcc' to recompile everything (alternatively, submit
                    290:      the file `make-gcc.com' to a batch queue).  If you wish to build
                    291:      the GNU C++ compiler as well as the GNU CC compiler, you must
                    292:      first edit `make-gcc.com' and follow the instructions that appear
                    293:      in the comments.
                    294: 
                    295:   5. In order to use GCC, you need a library of functions which GCC
                    296:      compiled code will call to perform certain tasks, and these
                    297:      functions are defined in the file `libgcc2.c'.  To compile this
                    298:      you should use the command procedure `make-l2.com', which will
                    299:      generate the library `libgcc2.olb'.  `libgcc2.olb' should be built
                    300:      using the compiler built from the same distribution that
                    301:      `libgcc2.c' came from, and `make-gcc.com' will automatically do
                    302:      all of this for you.
                    303: 
                    304:      To install the library, use the following commands:
                    305: 
                    306:           $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
                    307:           $ library gnu_cc:[000000]gcclib/delete=L_*
                    308:           $ library libgcc2/extract=*/output=libgcc2.obj
                    309:           $ library gnu_cc:[000000]gcclib libgcc2.obj
                    310: 
                    311:      The first command simply removes old modules that will be replaced
                    312:      with modules from `libgcc2' under different module names.  The
                    313:      modules `new' and `eprintf' may not actually be present in your
                    314:      `gcclib.olb'--if the VMS librarian complains about those modules
                    315:      not being present, simply ignore the message and continue on with
                    316:      the next command.  The second command removes the modules that
                    317:      came from the previous version of the library `libgcc2.c'.
                    318: 
                    319:      Whenever you update the compiler on your system, you should also
                    320:      update the library with the above procedure.
                    321: 
                    322:   6. You may wish to build GCC in such a way that no files are written
                    323:      to the directory where the source files reside.  An example would
                    324:      be the when the source files are on a read-only disk.  In these
                    325:      cases, execute the following DCL commands (substituting your
                    326:      actual path names):
                    327: 
                    328:           $ assign dua0:[gcc.build_dir.]/translation=concealed, -
                    329:                    dua1:[gcc.source_dir.]/translation=concealed  gcc_build
                    330:           $ set default gcc_build:[000000]
                    331: 
                    332:      where the directory `dua1:[gcc.source_dir]' contains the source
                    333:      code, and the directory `dua0:[gcc.build_dir]' is meant to contain
                    334:      all of the generated object files and executables.  Once you have
                    335:      done this, you can proceed building GCC as described above.  (Keep
                    336:      in mind that `gcc_build' is a rooted logical name, and thus the
                    337:      device names in each element of the search list must be an actual
                    338:      physical device name rather than another rooted logical name).
                    339: 
                    340:   7. *If you are building GNU CC with a previous version of GNU CC, you
                    341:      also should check to see that you have the newest version of the
                    342:      assembler*.  In particular, GNU CC version 2 treats global constant
                    343:      variables slightly differently from GNU CC version 1, and GAS
                    344:      version 1.38.1 does not have the patches required to work with GCC
                    345:      version 2.  If you use GAS 1.38.1, then `extern const' variables
                    346:      will not have the read-only bit set, and the linker will generate
                    347:      warning messages about mismatched psect attributes for these
                    348:      variables.  These warning messages are merely a nuisance, and can
                    349:      safely be ignored.
                    350: 
                    351:      If you are compiling with a version of GNU CC older than 1.33,
                    352:      specify `/DEFINE=("inline=")' as an option in all the
                    353:      compilations.  This requires editing all the `gcc' commands in
                    354:      `make-cc1.com'.  (The older versions had problems supporting
                    355:      `inline'.)  Once you have a working 1.33 or newer GNU CC, you can
                    356:      change this file back.
                    357: 
                    358:   8. If you want to build GNU CC with the VAX C compiler, you will need
                    359:      to make minor changes in `make-cccp.com' and `make-cc1.com' to
                    360:      choose alternate definitions of `CC', `CFLAGS', and `LIBS'.  See
                    361:      comments in those files.  However, you must also have a working
                    362:      version of the GNU assembler (GNU as, aka GAS) as it is used as
                    363:      the back-end for GNU CC to produce binary object modules and is
                    364:      not included in the GNU CC sources.  GAS is also needed to compile
                    365:      `libgcc2' in order to build `gcclib' (see above); `make-l2.com'
                    366:      expects to be able to find it operational in
                    367:      `gnu_cc:[000000]gnu-as.exe'.
                    368: 
                    369:      To use GNU CC on VMS, you need the VMS driver programs `gcc.exe',
                    370:      `gcc.com', and `gcc.cld'.  They are distributed with the VMS
                    371:      binaries (`gcc-vms') rather than the GNU CC sources.  GAS is also
                    372:      included in `gcc-vms', as is Bison.
                    373: 
                    374:      Once you have successfully built GNU CC with VAX C, you should use
                    375:      the resulting compiler to rebuild itself.  Before doing this, be
                    376:      sure to restore the `CC', `CFLAGS', and `LIBS' definitions in
                    377:      `make-cccp.com' and `make-cc1.com'.  The second generation
                    378:      compiler will be able to take advantage of many optimizations that
                    379:      must be suppressed when building with other compilers.
                    380: 
                    381:    Under previous versions of GNU CC, the generated code would
                    382: occasionally give strange results when linked with the sharable
                    383: `VAXCRTL' library.  Now this should work.
                    384: 
                    385:    Even with this version, however, GNU CC itself should not be linked
                    386: with the sharable `VAXCRTL'.  The version of `qsort' in `VAXCRTL' has a
                    387: bug (known to be present in VMS versions V4.6 through V5.5) which
                    388: causes the compiler to fail.
                    389: 
                    390:    The executables are generated by `make-cc1.com' and `make-cccp.com'
                    391: use the object library version of `VAXCRTL' in order to make use of the
                    392: `qsort' routine in `gcclib.olb'.  If you wish to link the compiler
                    393: executables with the shareable image version of `VAXCRTL', you should
                    394: edit the file `tm.h' (created by `vmsconfig.com') to define the macro
                    395: `QSORT_WORKAROUND'.
                    396: 
                    397:    `QSORT_WORKAROUND' is always defined when GNU CC is compiled with
                    398: VAX C, to avoid a problem in case `gcclib.olb' is not yet available.
                    399: 
                    400: 
                    401: File: gcc.info,  Node: WE32K Install,  Next: MIPS Install,  Prev: VMS Install,  Up: Installation
                    402: 
                    403: Installing GNU CC on the WE32K
                    404: ==============================
                    405: 
                    406:    These computers are also known as the 3b2, 3b5, 3b20 and other
                    407: similar names.  (However, the 3b1 is actually a 68000; see *Note 3b1
                    408: Install::.)
                    409: 
                    410:    Don't use `-g' when compiling with the system's compiler.  The
                    411: system's linker seems to be unable to handle such a large program with
                    412: debugging information.
                    413: 
                    414:    The system's compiler runs out of capacity when compiling `stmt.c'
                    415: in GNU CC.  You can work around this by building `cpp' in GNU CC first,
                    416: then use that instead of the system's preprocessor with the system's C
                    417: compiler to compile `stmt.c'.  Here is how:
                    418: 
                    419:      mv /lib/cpp /lib/cpp.att
                    420:      cp cpp /lib/cpp.gnu
                    421:      echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp
                    422:      chmod +x /lib/cpp
                    423: 
                    424:    The system's compiler produces bad code for some of the GNU CC
                    425: optimization files.  So you must build the stage 2 compiler without
                    426: optimization.  Then build a stage 3 compiler with optimization.  That
                    427: executable should work.  Here are the necessary commands:
                    428: 
                    429:      make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
                    430:      make stage2
                    431:      make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
                    432: 
                    433:    You may need to raise the ULIMIT setting to build a C++ compiler, as
                    434: the file `cc1plus' is larger than one megabyte.
                    435: 
                    436: 
                    437: File: gcc.info,  Node: MIPS Install,  Next: Collect2,  Prev: WE32K Install,  Up: Installation
                    438: 
                    439: Installing GNU CC on the MIPS
                    440: =============================
                    441: 
                    442:    See *Note Installation:: about whether to use either of the options
                    443: `--with-stabs' or `--with-gnu-as'.
                    444: 
                    445:    The MIPS C compiler needs to be told to increase its table size for
                    446: switch statements with the `-Wf,-XNg1500' option in order to compile
                    447: `cp-parse.c'.  If you use the `-O2' optimization option, you also need
                    448: to use `-Olimit 3000'.  Both of these options are automatically
                    449: generated in the `Makefile' that the shell script `configure' builds.
                    450: If you override the `CC' make variable and use the MIPS compilers, you
                    451: may need to add `-Wf,-XNg1500 -Olimit 3000'.
                    452: 
                    453:    MIPS computers running RISC-OS can support four different
                    454: personalities: default, BSD 4.3, System V.3, and System V.4 (older
                    455: versions of RISC-OS don't support V.4).  To configure GCC for these
                    456: platforms use the following configurations:
                    457: 
                    458: `mips-mips-riscos`rev''
                    459:      Default configuration for RISC-OS, revision `rev'.
                    460: 
                    461: `mips-mips-riscos`rev'bsd'
                    462:      BSD 4.3 configuration for RISC-OS, revision `rev'.
                    463: 
                    464: `mips-mips-riscos`rev'sysv4'
                    465:      System V.4 configuration for RISC-OS, revision `rev'.
                    466: 
                    467: `mips-mips-riscos`rev'sysv'
                    468:      System V.3 configuration for RISC-OS, revision `rev'.
                    469: 
                    470:    The revision `rev' mentioned above is the revision of RISC-OS to
                    471: use.  You must reconfigure GCC when going from a RISC-OS revision 4 to
                    472: RISC-OS revision 5.  This has the effect of avoiding a linker bug (see
                    473: *Note Installation Problems:: for more details).
                    474: 
                    475:    DECstations can support three different personalities: Ultrix, DEC
                    476: OSF/1, and OSF/rose.  To configure GCC for these platforms use the
                    477: following configurations:
                    478: 
                    479: `decstation-ultrix'
                    480:      Ultrix configuration.
                    481: 
                    482: `decstation-osf1'
                    483:      Dec's version of OSF/1.
                    484: 
                    485: `decstation-osfrose'
                    486:      Open Software Foundation reference port of OSF/1 which uses the
                    487:      OSF/rose object file format instead of ECOFF.  Normally, you would
                    488:      not select this configuration.
                    489: 
                    490:    On Irix version 4.0.5F, and perhaps on some other versions as well,
                    491: there is an assembler bug that reorders instructions incorrectly.  To
                    492: work around it, specify the target configuration `mips-sgi-irix4loser'.
                    493: This configuration inhibits assembler optimization.
                    494: 
                    495:    You can turn off assembler optimization in a compiler configured with
                    496: target `mips-sgi-irix4' using the `-noasmopt' option.  This compiler
                    497: option passes the option `-O0' to the assembler, to inhibit reordering.
                    498: 
                    499:    The `-noasmopt' option can be useful for testing whether a problem
                    500: is due to erroneous assembler reordering.  Even if a problem does not go
                    501: away with `-noasmopt', it may still be due to assembler
                    502: reordering--perhaps GNU CC itself was miscompiled as a result.
                    503: 
                    504:    We know this is inconvenient, but it's the best that can be done at
                    505: the last minute.
                    506: 
                    507: 
                    508: File: gcc.info,  Node: Collect2,  Next: Header Dirs,  Prev: MIPS Install,  Up: Installation
                    509: 
                    510: `collect2'
                    511: ==========
                    512: 
                    513:    Many target systems do not have support in the assembler and linker
                    514: for "constructors"--initialization functions to be called before the
                    515: official "start" of `main'.  On such systems, GNU CC uses a utility
                    516: called `collect2' to arrange to call these functions at start time.
                    517: 
                    518:    The program `collect2' works by linking the program once and looking
                    519: through the linker output file for symbols with particular names
                    520: indicating they are constructor functions.  If it finds any, it creates
                    521: a new temporary `.c' file containing a table of them, compiles it, and
                    522: links the program a second time including that file.
                    523: 
                    524:    The actual calls to the constructors are carried out by a subroutine
                    525: called `__main', which is called (automatically) at the beginning of
                    526: the body of `main' (provided `main' was compiled with GNU CC).
                    527: 
                    528:    The program `collect2' is installed as `ld' in the directory where
                    529: the passes of the compiler are installed.  When `collect2' needs to
                    530: find the *real* `ld', it tries the following file names:
                    531: 
                    532:    * `gld' in the directories listed in the compiler's search
                    533:      directories.
                    534: 
                    535:    * `gld' in the directories listed in the environment variable `PATH'.
                    536: 
                    537:    * `real-ld' in the compiler's search directories.
                    538: 
                    539:    * `real-ld' in `PATH'.
                    540: 
                    541:    * `ld' in `PATH'.
                    542: 
                    543:    "The compiler's search directories" means all the directories where
                    544: `gcc' searches for passes of the compiler.  This includes directories
                    545: that you specify with `-B'.
                    546: 
                    547:    Cross-compilers search a little differently:
                    548: 
                    549:    * `gld' in the compiler's search directories.
                    550: 
                    551:    * `TARGET-gld' in `PATH'.
                    552: 
                    553:    * `real-ld' in the compiler's search directories.
                    554: 
                    555:    * `TARGET-real-ld' in `PATH'.
                    556: 
                    557:    * `TARGET-ld' in `PATH'.
                    558: 
                    559:    `collect2' does not search for `ld' using the compiler's search
                    560: directories, because if it did, it would find itself--not the real
                    561: `ld'--and this could lead to infinite recursion.  However, the
                    562: directory where `collect2' is installed might happen to be in `PATH'.
                    563: That could lead `collect2' to invoke itself anyway.  when looking for
                    564: `ld'.
                    565: 
                    566:    To prevent this, `collect2' explicitly avoids running `ld' using the
                    567: file name under which `collect2' itself was invoked.  In fact, it
                    568: remembers up to two such names--in case one copy of `collect2' finds
                    569: another copy (or version) of `collect2' installed as `ld' in a second
                    570: place in the search path.
                    571: 
                    572:    If two file names to avoid are not sufficient, you may still
                    573: encounter an infinite recursion of `collect2' processes.  When this
                    574: happens.  check all the files installed as `ld' in any of the
                    575: directories searched, and straighten out the situation.
                    576: 
                    577:    (In a future version, we will probably change `collect2' to avoid
                    578: any reinvocation of a file from which any parent `collect2' was run.)
                    579: 
                    580: 
                    581: File: gcc.info,  Node: Header Dirs,  Prev: Collect2,  Up: Installation
                    582: 
                    583: Standard Header File Directories
                    584: ================================
                    585: 
                    586:    `GCC_INCLUDE_DIR' means the same thing for native and cross.  It is
                    587: where GNU CC stores its private include files, and also where GNU CC
                    588: stores the fixed include files.  A cross compiled GNU CC runs
                    589: `fixincludes' on the header files in `$(tooldir)/include'.  (If the
                    590: cross compilation header files need to be fixed, they must be installed
                    591: before GNU CC is built.  If the cross compilation header files are
                    592: already suitable for ANSI C and GNU CC, nothing special need be done).
                    593: 
                    594:    `GPLUS_INCLUDE_DIR' means the same thing for native and cross.  It
                    595: is where `g++' looks first for header files.  `libg++' installs only
                    596: target independent header files in that directory.
                    597: 
                    598:    `LOCAL_INCLUDE_DIR' is used only for a native compiler.  It is
                    599: normally `/usr/local/include'.  GNU CC searches this directory so that
                    600: users can install header files in `/usr/local/include'.
                    601: 
                    602:    `CROSS_INCLUDE_DIR' is used only for a cross compiler.  GNU CC
                    603: doesn't install anything there.
                    604: 
                    605:    `TOOL_INCLUDE_DIR' is used for both native and cross compilers.  It
                    606: is the place for other packages to install header files that GNU CC will
                    607: use.  For a cross-compiler, this is the equivalent of `/usr/include'.
                    608: When you build a cross-compiler, `fixincludes' processes any header
                    609: files in this directory.
                    610: 
                    611: 
                    612: File: gcc.info,  Node: C Extensions,  Next: C++ Extensions,  Prev: Installation,  Up: Top
                    613: 
                    614: Extensions to the C Language Family
                    615: ***********************************
                    616: 
                    617:    GNU C provides several language features not found in ANSI standard
                    618: C.  (The `-pedantic' option directs GNU CC to print a warning message if
                    619: any of these features is used.)  To test for the availability of these
                    620: features in conditional compilation, check for a predefined macro
                    621: `__GNUC__', which is always defined under GNU CC.
                    622: 
                    623:    These extensions are available in C and in the languages derived from
                    624: it, C++ and Objective C.  *Note Extensions to the C++ Language: C++
                    625: Extensions, for extensions that apply *only* to C++.
                    626: 
                    627: * Menu:
                    628: 
                    629: * Statement Exprs::     Putting statements and declarations inside expressions.
                    630: * Local Labels::        Labels local to a statement-expression.
                    631: * Labels as Values::    Getting pointers to labels, and computed gotos.
                    632: * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
                    633: * Constructing Calls:: Dispatching a call to another function.
                    634: * Naming Types::        Giving a name to the type of some expression.
                    635: * Typeof::              `typeof': referring to the type of an expression.
                    636: * Lvalues::             Using `?:', `,' and casts in lvalues.
                    637: * Conditionals::        Omitting the middle operand of a `?:' expression.
                    638: * Long Long::          Double-word integers--`long long int'.
                    639: * Complex::             Data types for complex numbers.
                    640: * Zero Length::         Zero-length arrays.
                    641: * Variable Length::     Arrays whose length is computed at run time.
                    642: * Macro Varargs::      Macros with variable number of arguments.
                    643: * Subscripting::        Any array can be subscripted, even if not an lvalue.
                    644: * Pointer Arith::       Arithmetic on `void'-pointers and function pointers.
                    645: * Initializers::        Non-constant initializers.
                    646: * Constructors::        Constructor expressions give structures, unions
                    647:                          or arrays as values.
                    648: * Labeled Elements::   Labeling elements of initializers.
                    649: * Cast to Union::       Casting to union type from any member of the union.
                    650: * Case Ranges::                `case 1 ... 9' and such.
                    651: * Function Attributes:: Declaring that functions have no side effects,
                    652:                          or that they can never return.
                    653: * Function Prototypes:: Prototype declarations and old-style definitions.
                    654: * Dollar Signs::        Dollar sign is allowed in identifiers.
                    655: * Character Escapes::   `\e' stands for the character ESC.
                    656: * Variable Attributes::        Specifying attributes of variables.
                    657: * Alignment::           Inquiring about the alignment of a type or variable.
                    658: * Inline::              Defining inline functions (as fast as macros).
                    659: * Extended Asm::        Assembler instructions with C expressions as operands.
                    660:                          (With them you can define "built-in" functions.)
                    661: * Asm Labels::          Specifying the assembler name to use for a C symbol.
                    662: * Explicit Reg Vars::   Defining variables residing in specified registers.
                    663: * Alternate Keywords::  `__const__', `__asm__', etc., for header files.
                    664: * Incomplete Enums::    `enum foo;', with details to follow.
                    665: * Function Names::     Printable strings which are the name of the current
                    666:                         function.
                    667: 
                    668: 
                    669: File: gcc.info,  Node: Statement Exprs,  Next: Local Labels,  Up: C Extensions
                    670: 
                    671: Statements and Declarations in Expressions
                    672: ==========================================
                    673: 
                    674:    A compound statement enclosed in parentheses may appear as an
                    675: expression in GNU C.  This allows you to use loops, switches, and local
                    676: variables within an expression.
                    677: 
                    678:    Recall that a compound statement is a sequence of statements
                    679: surrounded by braces; in this construct, parentheses go around the
                    680: braces.  For example:
                    681: 
                    682:      ({ int y = foo (); int z;
                    683:         if (y > 0) z = y;
                    684:         else z = - y;
                    685:         z; })
                    686: 
                    687: is a valid (though slightly more complex than necessary) expression for
                    688: the absolute value of `foo ()'.
                    689: 
                    690:    The last thing in the compound statement should be an expression
                    691: followed by a semicolon; the value of this subexpression serves as the
                    692: value of the entire construct.  (If you use some other kind of statement
                    693: last within the braces, the construct has type `void', and thus
                    694: effectively no value.)
                    695: 
                    696:    This feature is especially useful in making macro definitions "safe"
                    697: (so that they evaluate each operand exactly once).  For example, the
                    698: "maximum" function is commonly defined as a macro in standard C as
                    699: follows:
                    700: 
                    701:      #define max(a,b) ((a) > (b) ? (a) : (b))
                    702: 
                    703: But this definition computes either A or B twice, with bad results if
                    704: the operand has side effects.  In GNU C, if you know the type of the
                    705: operands (here let's assume `int'), you can define the macro safely as
                    706: follows:
                    707: 
                    708:      #define maxint(a,b) \
                    709:        ({int _a = (a), _b = (b); _a > _b ? _a : _b; })
                    710: 
                    711:    Embedded statements are not allowed in constant expressions, such as
                    712: the value of an enumeration constant, the width of a bit field, or the
                    713: initial value of a static variable.
                    714: 
                    715:    If you don't know the type of the operand, you can still do this,
                    716: but you must use `typeof' (*note Typeof::.) or type naming (*note
                    717: Naming Types::.).
                    718: 
                    719: 
                    720: File: gcc.info,  Node: Local Labels,  Next: Labels as Values,  Prev: Statement Exprs,  Up: C Extensions
                    721: 
                    722: Locally Declared Labels
                    723: =======================
                    724: 
                    725:    Each statement expression is a scope in which "local labels" can be
                    726: declared.  A local label is simply an identifier; you can jump to it
                    727: with an ordinary `goto' statement, but only from within the statement
                    728: expression it belongs to.
                    729: 
                    730:    A local label declaration looks like this:
                    731: 
                    732:      __label__ LABEL;
                    733: 
                    734: or
                    735: 
                    736:      __label__ LABEL1, LABEL2, ...;
                    737: 
                    738:    Local label declarations must come at the beginning of the statement
                    739: expression, right after the `({', before any ordinary declarations.
                    740: 
                    741:    The label declaration defines the label *name*, but does not define
                    742: the label itself.  You must do this in the usual way, with `LABEL:',
                    743: within the statements of the statement expression.
                    744: 
                    745:    The local label feature is useful because statement expressions are
                    746: often used in macros.  If the macro contains nested loops, a `goto' can
                    747: be useful for breaking out of them.  However, an ordinary label whose
                    748: scope is the whole function cannot be used: if the macro can be
                    749: expanded several times in one function, the label will be multiply
                    750: defined in that function.  A local label avoids this problem.  For
                    751: example:
                    752: 
                    753:      #define SEARCH(array, target)                     \
                    754:      ({                                               \
                    755:        __label__ found;                                \
                    756:        typeof (target) _SEARCH_target = (target);      \
                    757:        typeof (*(array)) *_SEARCH_array = (array);     \
                    758:        int i, j;                                       \
                    759:        int value;                                      \
                    760:        for (i = 0; i < max; i++)                       \
                    761:          for (j = 0; j < max; j++)                     \
                    762:            if (_SEARCH_array[i][j] == _SEARCH_target)  \
                    763:              { value = i; goto found; }              \
                    764:        value = -1;                                     \
                    765:       found:                                           \
                    766:        value;                                          \
                    767:      })
                    768: 
                    769: 
                    770: File: gcc.info,  Node: Labels as Values,  Next: Nested Functions,  Prev: Local Labels,  Up: C Extensions
                    771: 
                    772: Labels as Values
                    773: ================
                    774: 
                    775:    You can get the address of a label defined in the current function
                    776: (or a containing function) with the unary operator `&&'.  The value has
                    777: type `void *'.  This value is a constant and can be used wherever a
                    778: constant of that type is valid.  For example:
                    779: 
                    780:      void *ptr;
                    781:      ...
                    782:      ptr = &&foo;
                    783: 
                    784:    To use these values, you need to be able to jump to one.  This is
                    785: done with the computed goto statement(1), `goto *EXP;'.  For example,
                    786: 
                    787:      goto *ptr;
                    788: 
                    789: Any expression of type `void *' is allowed.
                    790: 
                    791:    One way of using these constants is in initializing a static array
                    792: that will serve as a jump table:
                    793: 
                    794:      static void *array[] = { &&foo, &&bar, &&hack };
                    795: 
                    796:    Then you can select a label with indexing, like this:
                    797: 
                    798:      goto *array[i];
                    799: 
                    800: Note that this does not check whether the subscript is in bounds--array
                    801: indexing in C never does that.
                    802: 
                    803:    Such an array of label values serves a purpose much like that of the
                    804: `switch' statement.  The `switch' statement is cleaner, so use that
                    805: rather than an array unless the problem does not fit a `switch'
                    806: statement very well.
                    807: 
                    808:    Another use of label values is in an interpreter for threaded code.
                    809: The labels within the interpreter function can be stored in the
                    810: threaded code for super-fast dispatching.
                    811: 
                    812:    You can use this mechanism to jump to code in a different function.
                    813: If you do that, totally unpredictable things will happen.  The best way
                    814: to avoid this is to store the label address only in automatic variables
                    815: and never pass it as an argument.
                    816: 
                    817:    ---------- Footnotes ----------
                    818: 
                    819:    (1)  The analogous feature in Fortran is called an assigned goto,
                    820: but that name seems inappropriate in C, where one can do more than
                    821: simply store label addresses in label variables.
                    822: 
                    823: 
                    824: File: gcc.info,  Node: Nested Functions,  Next: Constructing Calls,  Prev: Labels as Values,  Up: C Extensions
                    825: 
                    826: Nested Functions
                    827: ================
                    828: 
                    829:    A "nested function" is a function defined inside another function.
                    830: (Nested functions are not supported for GNU C++.)  The nested function's
                    831: name is local to the block where it is defined.  For example, here we
                    832: define a nested function named `square', and call it twice:
                    833: 
                    834:      foo (double a, double b)
                    835:      {
                    836:        double square (double z) { return z * z; }
                    837:      
                    838:        return square (a) + square (b);
                    839:      }
                    840: 
                    841:    The nested function can access all the variables of the containing
                    842: function that are visible at the point of its definition.  This is
                    843: called "lexical scoping".  For example, here we show a nested function
                    844: which uses an inherited variable named `offset':
                    845: 
                    846:      bar (int *array, int offset, int size)
                    847:      {
                    848:        int access (int *array, int index)
                    849:          { return array[index + offset]; }
                    850:        int i;
                    851:        ...
                    852:        for (i = 0; i < size; i++)
                    853:          ... access (array, i) ...
                    854:      }
                    855: 
                    856:    Nested function definitions are permitted within functions in the
                    857: places where variable definitions are allowed; that is, in any block,
                    858: before the first statement in the block.
                    859: 
                    860:    It is possible to call the nested function from outside the scope of
                    861: its name by storing its address or passing the address to another
                    862: function:
                    863: 
                    864:      hack (int *array, int size)
                    865:      {
                    866:        void store (int index, int value)
                    867:          { array[index] = value; }
                    868:      
                    869:        intermediate (store, size);
                    870:      }
                    871: 
                    872:    Here, the function `intermediate' receives the address of `store' as
                    873: an argument.  If `intermediate' calls `store', the arguments given to
                    874: `store' are used to store into `array'.  But this technique works only
                    875: so long as the containing function (`hack', in this example) does not
                    876: exit.  If you try to call the nested function through its address after
                    877: the containing function has exited, all hell will break loose.
                    878: 
                    879:    GNU CC implements taking the address of a nested function using a
                    880: technique called "trampolines".  A paper describing them is available
                    881: from `maya.idiap.ch' in directory `pub/tmb', file `usenix88-lexic.ps.Z'.
                    882: 
                    883:    A nested function can jump to a label inherited from a containing
                    884: function, provided the label was explicitly declared in the containing
                    885: function (*note Local Labels::.).  Such a jump returns instantly to the
                    886: containing function, exiting the nested function which did the `goto'
                    887: and any intermediate functions as well.  Here is an example:
                    888: 
                    889:      bar (int *array, int offset, int size)
                    890:      {
                    891:        __label__ failure;
                    892:        int access (int *array, int index)
                    893:          {
                    894:            if (index > size)
                    895:              goto failure;
                    896:            return array[index + offset];
                    897:          }
                    898:        int i;
                    899:        ...
                    900:        for (i = 0; i < size; i++)
                    901:          ... access (array, i) ...
                    902:        ...
                    903:        return 0;
                    904:      
                    905:       /* Control comes here from `access'
                    906:          if it detects an error.  */
                    907:       failure:
                    908:        return -1;
                    909:      }
                    910: 
                    911:    A nested function always has internal linkage.  Declaring one with
                    912: `extern' is erroneous.  If you need to declare the nested function
                    913: before its definition, use `auto' (which is otherwise meaningless for
                    914: function declarations).
                    915: 
                    916:      bar (int *array, int offset, int size)
                    917:      {
                    918:        __label__ failure;
                    919:        auto int access (int *, int);
                    920:        ...
                    921:        int access (int *array, int index)
                    922:          {
                    923:            if (index > size)
                    924:              goto failure;
                    925:            return array[index + offset];
                    926:          }
                    927:        ...
                    928:      }
                    929: 
                    930: 
                    931: File: gcc.info,  Node: Constructing Calls,  Next: Naming Types,  Prev: Nested Functions,  Up: C Extensions
                    932: 
                    933: Constructing Function Calls
                    934: ===========================
                    935: 
                    936:    Using the built-in functions described below, you can record the
                    937: arguments a function received, and call another function with the same
                    938: arguments, without knowing the number or types of the arguments.
                    939: 
                    940:    You can also record the return value of that function call, and
                    941: later return that value, without knowing what data type the function
                    942: tried to return (as long as your caller expects that data type).
                    943: 
                    944: `__builtin_apply_args ()'
                    945:      This built-in function returns a pointer of type `void *' to data
                    946:      describing how to perform a call with the same arguments as were
                    947:      passed to the current function.
                    948: 
                    949:      The function saves the arg pointer register, structure value
                    950:      address, and all registers that might be used to pass arguments to
                    951:      a function into a block of memory allocated on the stack.  Then it
                    952:      returns the address of that block.
                    953: 
                    954: `__builtin_apply (FUNCTION, ARGUMENTS, SIZE)'
                    955:      This built-in function invokes FUNCTION (type `void (*)()') with a
                    956:      copy of the parameters described by ARGUMENTS (type `void *') and
                    957:      SIZE (type `int').
                    958: 
                    959:      The value of ARGUMENTS should be the value returned by
                    960:      `__builtin_apply_args'.  The argument SIZE specifies the size of
                    961:      the stack argument data, in bytes.
                    962: 
                    963:      This function returns a pointer of type `void *' to data describing
                    964:      how to return whatever value was returned by FUNCTION.  The data
                    965:      is saved in a block of memory allocated on the stack.
                    966: 
                    967:      It is not always simple to compute the proper value for SIZE.  The
                    968:      value is used by `__builtin_apply' to compute the amount of data
                    969:      that should be pushed on the stack and copied from the incoming
                    970:      argument area.
                    971: 
                    972: `__builtin_return (RESULT)'
                    973:      This built-in function returns the value described by RESULT from
                    974:      the containing function.  You should specify, for RESULT, a value
                    975:      returned by `__builtin_apply'.
                    976: 
                    977: 
                    978: File: gcc.info,  Node: Naming Types,  Next: Typeof,  Prev: Constructing Calls,  Up: C Extensions
                    979: 
                    980: Naming an Expression's Type
                    981: ===========================
                    982: 
                    983:    You can give a name to the type of an expression using a `typedef'
                    984: declaration with an initializer.  Here is how to define NAME as a type
                    985: name for the type of EXP:
                    986: 
                    987:      typedef NAME = EXP;
                    988: 
                    989:    This is useful in conjunction with the statements-within-expressions
                    990: feature.  Here is how the two together can be used to define a safe
                    991: "maximum" macro that operates on any arithmetic type:
                    992: 
                    993:      #define max(a,b) \
                    994:        ({typedef _ta = (a), _tb = (b);  \
                    995:          _ta _a = (a); _tb _b = (b);     \
                    996:          _a > _b ? _a : _b; })
                    997: 
                    998:    The reason for using names that start with underscores for the local
                    999: variables is to avoid conflicts with variable names that occur within
                   1000: the expressions that are substituted for `a' and `b'.  Eventually we
                   1001: hope to design a new form of declaration syntax that allows you to
                   1002: declare variables whose scopes start only after their initializers;
                   1003: this will be a more reliable way to prevent such conflicts.
                   1004: 
                   1005: 
                   1006: File: gcc.info,  Node: Typeof,  Next: Lvalues,  Prev: Naming Types,  Up: C Extensions
                   1007: 
                   1008: Referring to a Type with `typeof'
                   1009: =================================
                   1010: 
                   1011:    Another way to refer to the type of an expression is with `typeof'.
                   1012: The syntax of using of this keyword looks like `sizeof', but the
                   1013: construct acts semantically like a type name defined with `typedef'.
                   1014: 
                   1015:    There are two ways of writing the argument to `typeof': with an
                   1016: expression or with a type.  Here is an example with an expression:
                   1017: 
                   1018:      typeof (x[0](1))
                   1019: 
                   1020: This assumes that `x' is an array of functions; the type described is
                   1021: that of the values of the functions.
                   1022: 
                   1023:    Here is an example with a typename as the argument:
                   1024: 
                   1025:      typeof (int *)
                   1026: 
                   1027: Here the type described is that of pointers to `int'.
                   1028: 
                   1029:    If you are writing a header file that must work when included in
                   1030: ANSI C programs, write `__typeof__' instead of `typeof'.  *Note
                   1031: Alternate Keywords::.
                   1032: 
                   1033:    A `typeof'-construct can be used anywhere a typedef name could be
                   1034: used.  For example, you can use it in a declaration, in a cast, or
                   1035: inside of `sizeof' or `typeof'.
                   1036: 
                   1037:    * This declares `y' with the type of what `x' points to.
                   1038: 
                   1039:           typeof (*x) y;
                   1040: 
                   1041:    * This declares `y' as an array of such values.
                   1042: 
                   1043:           typeof (*x) y[4];
                   1044: 
                   1045:    * This declares `y' as an array of pointers to characters:
                   1046: 
                   1047:           typeof (typeof (char *)[4]) y;
                   1048: 
                   1049:      It is equivalent to the following traditional C declaration:
                   1050: 
                   1051:           char *y[4];
                   1052: 
                   1053:      To see the meaning of the declaration using `typeof', and why it
                   1054:      might be a useful way to write, let's rewrite it with these macros:
                   1055: 
                   1056:           #define pointer(T)  typeof(T *)
                   1057:           #define array(T, N) typeof(T [N])
                   1058: 
                   1059:      Now the declaration can be rewritten this way:
                   1060: 
                   1061:           array (pointer (char), 4) y;
                   1062: 
                   1063:      Thus, `array (pointer (char), 4)' is the type of arrays of 4
                   1064:      pointers to `char'.
                   1065: 
                   1066: 
                   1067: File: gcc.info,  Node: Lvalues,  Next: Conditionals,  Prev: Typeof,  Up: C Extensions
                   1068: 
                   1069: Generalized Lvalues
                   1070: ===================
                   1071: 
                   1072:    Compound expressions, conditional expressions and casts are allowed
                   1073: as lvalues provided their operands are lvalues.  This means that you
                   1074: can take their addresses or store values into them.
                   1075: 
                   1076:    For example, a compound expression can be assigned, provided the last
                   1077: expression in the sequence is an lvalue.  These two expressions are
                   1078: equivalent:
                   1079: 
                   1080:      (a, b) += 5
                   1081:      a, (b += 5)
                   1082: 
                   1083:    Similarly, the address of the compound expression can be taken.
                   1084: These two expressions are equivalent:
                   1085: 
                   1086:      &(a, b)
                   1087:      a, &b
                   1088: 
                   1089:    A conditional expression is a valid lvalue if its type is not void
                   1090: and the true and false branches are both valid lvalues.  For example,
                   1091: these two expressions are equivalent:
                   1092: 
                   1093:      (a ? b : c) = 5
                   1094:      (a ? b = 5 : (c = 5))
                   1095: 
                   1096:    A cast is a valid lvalue if its operand is an lvalue.  A simple
                   1097: assignment whose left-hand side is a cast works by converting the
                   1098: right-hand side first to the specified type, then to the type of the
                   1099: inner left-hand side expression.  After this is stored, the value is
                   1100: converted back to the specified type to become the value of the
                   1101: assignment.  Thus, if `a' has type `char *', the following two
                   1102: expressions are equivalent:
                   1103: 
                   1104:      (int)a = 5
                   1105:      (int)(a = (char *)(int)5)
                   1106: 
                   1107:    An assignment-with-arithmetic operation such as `+=' applied to a
                   1108: cast performs the arithmetic using the type resulting from the cast,
                   1109: and then continues as in the previous case.  Therefore, these two
                   1110: expressions are equivalent:
                   1111: 
                   1112:      (int)a += 5
                   1113:      (int)(a = (char *)(int) ((int)a + 5))
                   1114: 
                   1115:    You cannot take the address of an lvalue cast, because the use of its
                   1116: address would not work out coherently.  Suppose that `&(int)f' were
                   1117: permitted, where `f' has type `float'.  Then the following statement
                   1118: would try to store an integer bit-pattern where a floating point number
                   1119: belongs:
                   1120: 
                   1121:      *&(int)f = 1;
                   1122: 
                   1123:    This is quite different from what `(int)f = 1' would do--that would
                   1124: convert 1 to floating point and store it.  Rather than cause this
                   1125: inconsistency, we think it is better to prohibit use of `&' on a cast.
                   1126: 
                   1127:    If you really do want an `int *' pointer with the address of `f',
                   1128: you can simply write `(int *)&f'.
                   1129: 
                   1130: 
                   1131: File: gcc.info,  Node: Conditionals,  Next: Long Long,  Prev: Lvalues,  Up: C Extensions
                   1132: 
                   1133: Conditionals with Omitted Operands
                   1134: ==================================
                   1135: 
                   1136:    The middle operand in a conditional expression may be omitted.  Then
                   1137: if the first operand is nonzero, its value is the value of the
                   1138: conditional expression.
                   1139: 
                   1140:    Therefore, the expression
                   1141: 
                   1142:      x ? : y
                   1143: 
                   1144: has the value of `x' if that is nonzero; otherwise, the value of `y'.
                   1145: 
                   1146:    This example is perfectly equivalent to
                   1147: 
                   1148:      x ? x : y
                   1149: 
                   1150: In this simple case, the ability to omit the middle operand is not
                   1151: especially useful.  When it becomes useful is when the first operand
                   1152: does, or may (if it is a macro argument), contain a side effect.  Then
                   1153: repeating the operand in the middle would perform the side effect
                   1154: twice.  Omitting the middle operand uses the value already computed
                   1155: without the undesirable effects of recomputing it.
                   1156: 
                   1157: 
                   1158: File: gcc.info,  Node: Long Long,  Next: Complex,  Prev: Conditionals,  Up: C Extensions
                   1159: 
                   1160: Double-Word Integers
                   1161: ====================
                   1162: 
                   1163:    GNU C supports data types for integers that are twice as long as
                   1164: `long int'.  Simply write `long long int' for a signed integer, or
                   1165: `unsigned long long int' for an unsigned integer.  To make an integer
                   1166: constant of type `long long int', add the suffix `LL' to the integer.
                   1167: To make an integer constant of type `unsigned long long int', add the
                   1168: suffix `ULL' to the integer.
                   1169: 
                   1170:    You can use these types in arithmetic like any other integer types.
                   1171: Addition, subtraction, and bitwise boolean operations on these types
                   1172: are open-coded on all types of machines.  Multiplication is open-coded
                   1173: if the machine supports fullword-to-doubleword a widening multiply
                   1174: instruction.  Division and shifts are open-coded only on machines that
                   1175: provide special support.  The operations that are not open-coded use
                   1176: special library routines that come with GNU CC.
                   1177: 
                   1178:    There may be pitfalls when you use `long long' types for function
                   1179: arguments, unless you declare function prototypes.  If a function
                   1180: expects type `int' for its argument, and you pass a value of type `long
                   1181: long int', confusion will result because the caller and the subroutine
                   1182: will disagree about the number of bytes for the argument.  Likewise, if
                   1183: the function expects `long long int' and you pass `int'.  The best way
                   1184: to avoid such problems is to use prototypes.
                   1185: 
                   1186: 
                   1187: File: gcc.info,  Node: Complex,  Next: Zero Length,  Prev: Long Long,  Up: C Extensions
                   1188: 
                   1189: Complex Numbers
                   1190: ===============
                   1191: 
                   1192:    GNU C supports complex data types.  You can declare both complex
                   1193: integer types and complex floating types, using the keyword
                   1194: `__complex__'.
                   1195: 
                   1196:    For example, `__complex__ double x;' declares `x' as a variable
                   1197: whose real part and imaginary part are both of type `double'.
                   1198: `__complex__ short int y;' declares `y' to have real and imaginary
                   1199: parts of type `short int'; this is not likely to be useful, but it
                   1200: shows that the set of complex types is complete.
                   1201: 
                   1202:    To write a constant with a complex data type, use the suffix `i' or
                   1203: `j' (either one; they are equivalent).  For example, `2.5fi' has type
                   1204: `__complex__ float' and `3i' has type `__complex__ int'.  Such a
                   1205: constant always has a pure imaginary value, but you can form any
                   1206: complex value you like by adding one to a real constant.
                   1207: 
                   1208:    To extract the real part of a complex-valued expression EXP, write
                   1209: `__real__ EXP'.  Likewise, use `__imag__' to extract the imaginary part.
                   1210: 
                   1211:    The operator `~' performs complex conjugation when used on a value
                   1212: with a complex type.
                   1213: 
                   1214:    GNU CC can allocate complex automatic variables in a noncontiguous
                   1215: fashion; it's even possible for the real part to be in a register while
                   1216: the imaginary part is on the stack (or vice-versa).  None of the
                   1217: supported debugging info formats has a way to represent noncontiguous
                   1218: allocation like this, so GNU CC describes a noncontiguous complex
                   1219: variable as if it were two separate variables of noncomplex type.  If
                   1220: the variable's actual name is `foo', the two fictitious variables are
                   1221: named `foo$real' and `foo$imag'.  You can examine and set these two
                   1222: fictitious variables with your debugger.
                   1223: 
                   1224:    A future version of GDB will know how to recognize such pairs and
                   1225: treat them as a single variable with a complex type.
                   1226: 
                   1227: 
                   1228: File: gcc.info,  Node: Zero Length,  Next: Variable Length,  Prev: Complex,  Up: C Extensions
                   1229: 
                   1230: Arrays of Length Zero
                   1231: =====================
                   1232: 
                   1233:    Zero-length arrays are allowed in GNU C.  They are very useful as
                   1234: the last element of a structure which is really a header for a
                   1235: variable-length object:
                   1236: 
                   1237:      struct line {
                   1238:        int length;
                   1239:        char contents[0];
                   1240:      };
                   1241:      
                   1242:      {
                   1243:        struct line *thisline = (struct line *)
                   1244:          malloc (sizeof (struct line) + this_length);
                   1245:        thisline->length = this_length;
                   1246:      }
                   1247: 
                   1248:    In standard C, you would have to give `contents' a length of 1, which
                   1249: means either you waste space or complicate the argument to `malloc'.
                   1250: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.