Annotation of GNUtools/cc/gcc.info-9, 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: Incompatibilities,  Next: Fixed Headers,  Prev: External Bugs,  Up: Trouble
                     32: 
                     33: Incompatibilities of GNU CC
                     34: ===========================
                     35: 
                     36:    There are several noteworthy incompatibilities between GNU C and most
                     37: existing (non-ANSI) versions of C.  The `-traditional' option
                     38: eliminates many of these incompatibilities, *but not all*, by telling
                     39: GNU C to behave like the other C compilers.
                     40: 
                     41:    * GNU CC normally makes string constants read-only.  If several
                     42:      identical-looking string constants are used, GNU CC stores only one
                     43:      copy of the string.
                     44: 
                     45:      One consequence is that you cannot call `mktemp' with a string
                     46:      constant argument.  The function `mktemp' always alters the string
                     47:      its argument points to.
                     48: 
                     49:      Another consequence is that `sscanf' does not work on some systems
                     50:      when passed a string constant as its format control string or
                     51:      input.  This is because `sscanf' incorrectly tries to write into
                     52:      the string constant.  Likewise `fscanf' and `scanf'.
                     53: 
                     54:      The best solution to these problems is to change the program to use
                     55:      `char'-array variables with initialization strings for these
                     56:      purposes instead of string constants.  But if this is not possible,
                     57:      you can use the `-fwritable-strings' flag, which directs GNU CC to
                     58:      handle string constants the same way most C compilers do.
                     59:      `-traditional' also has this effect, among others.
                     60: 
                     61:    * `-2147483648' is positive.
                     62: 
                     63:      This is because 2147483648 cannot fit in the type `int', so
                     64:      (following the ANSI C rules) its data type is `unsigned long int'.
                     65:      Negating this value yields 2147483648 again.
                     66: 
                     67:    * GNU CC does not substitute macro arguments when they appear inside
                     68:      of string constants.  For example, the following macro in GNU CC
                     69: 
                     70:           #define foo(a) "a"
                     71: 
                     72:      will produce output `"a"' regardless of what the argument A is.
                     73: 
                     74:      The `-traditional' option directs GNU CC to handle such cases
                     75:      (among others) in the old-fashioned (non-ANSI) fashion.
                     76: 
                     77:    * When you use `setjmp' and `longjmp', the only automatic variables
                     78:      guaranteed to remain valid are those declared `volatile'.  This is
                     79:      a consequence of automatic register allocation.  Consider this
                     80:      function:
                     81: 
                     82:           jmp_buf j;
                     83:           
                     84:           foo ()
                     85:           {
                     86:             int a, b;
                     87:           
                     88:             a = fun1 ();
                     89:             if (setjmp (j))
                     90:               return a;
                     91:           
                     92:             a = fun2 ();
                     93:             /* `longjmp (j)' may occur in `fun3'. */
                     94:             return a + fun3 ();
                     95:           }
                     96: 
                     97:      Here `a' may or may not be restored to its first value when the
                     98:      `longjmp' occurs.  If `a' is allocated in a register, then its
                     99:      first value is restored; otherwise, it keeps the last value stored
                    100:      in it.
                    101: 
                    102:      If you use the `-W' option with the `-O' option, you will get a
                    103:      warning when GNU CC thinks such a problem might be possible.
                    104: 
                    105:      The `-traditional' option directs GNU C to put variables in the
                    106:      stack by default, rather than in registers, in functions that call
                    107:      `setjmp'.  This results in the behavior found in traditional C
                    108:      compilers.
                    109: 
                    110:    * Programs that use preprocessor directives in the middle of macro
                    111:      arguments do not work with GNU CC.  For example, a program like
                    112:      this will not work:
                    113: 
                    114:           foobar (
                    115:           #define luser
                    116:                   hack)
                    117: 
                    118:      ANSI C does not permit such a construct.  It would make sense to
                    119:      support it when `-traditional' is used, but it is too much work to
                    120:      implement.
                    121: 
                    122:    * Declarations of external variables and functions within a block
                    123:      apply only to the block containing the declaration.  In other
                    124:      words, they have the same scope as any other declaration in the
                    125:      same place.
                    126: 
                    127:      In some other C compilers, a `extern' declaration affects all the
                    128:      rest of the file even if it happens within a block.
                    129: 
                    130:      The `-traditional' option directs GNU C to treat all `extern'
                    131:      declarations as global, like traditional compilers.
                    132: 
                    133:    * In traditional C, you can combine `long', etc., with a typedef
                    134:      name, as shown here:
                    135: 
                    136:           typedef int foo;
                    137:           typedef long foo bar;
                    138: 
                    139:      In ANSI C, this is not allowed: `long' and other type modifiers
                    140:      require an explicit `int'.  Because this criterion is expressed by
                    141:      Bison grammar rules rather than C code, the `-traditional' flag
                    142:      cannot alter it.
                    143: 
                    144:    * PCC allows typedef names to be used as function parameters.  The
                    145:      difficulty described immediately above applies here too.
                    146: 
                    147:    * PCC allows whitespace in the middle of compound assignment
                    148:      operators such as `+='.  GNU CC, following the ANSI standard, does
                    149:      not allow this.  The difficulty described immediately above
                    150:      applies here too.
                    151: 
                    152:    * GNU CC complains about unterminated character constants inside of
                    153:      preprocessor conditionals that fail.  Some programs have English
                    154:      comments enclosed in conditionals that are guaranteed to fail; if
                    155:      these comments contain apostrophes, GNU CC will probably report an
                    156:      error.  For example, this code would produce an error:
                    157: 
                    158:           #if 0
                    159:           You can't expect this to work.
                    160:           #endif
                    161: 
                    162:      The best solution to such a problem is to put the text into an
                    163:      actual C comment delimited by `/*...*/'.  However, `-traditional'
                    164:      suppresses these error messages.
                    165: 
                    166:    * Many user programs contain the declaration `long time ();'.  In the
                    167:      past, the system header files on many systems did not actually
                    168:      declare `time', so it did not matter what type your program
                    169:      declared it to return.  But in systems with ANSI C headers, `time'
                    170:      is declared to return `time_t', and if that is not the same as
                    171:      `long', then `long time ();' is erroneous.
                    172: 
                    173:      The solution is to change your program to use `time_t' as the
                    174:      return type of `time'.
                    175: 
                    176:    * When compiling functions that return `float', PCC converts it to a
                    177:      double.  GNU CC actually returns a `float'.  If you are concerned
                    178:      with PCC compatibility, you should declare your functions to return
                    179:      `double'; you might as well say what you mean.
                    180: 
                    181:    * When compiling functions that return structures or unions, GNU CC
                    182:      output code normally uses a method different from that used on most
                    183:      versions of Unix.  As a result, code compiled with GNU CC cannot
                    184:      call a structure-returning function compiled with PCC, and vice
                    185:      versa.
                    186: 
                    187:      The method used by GNU CC is as follows: a structure or union
                    188:      which is 1, 2, 4 or 8 bytes long is returned like a scalar.  A
                    189:      structure or union with any other size is stored into an address
                    190:      supplied by the caller (usually in a special, fixed register, but
                    191:      on some machines it is passed on the stack).  The
                    192:      machine-description macros `STRUCT_VALUE' and
                    193:      `STRUCT_INCOMING_VALUE' tell GNU CC where to pass this address.
                    194: 
                    195:      By contrast, PCC on most target machines returns structures and
                    196:      unions of any size by copying the data into an area of static
                    197:      storage, and then returning the address of that storage as if it
                    198:      were a pointer value.  The caller must copy the data from that
                    199:      memory area to the place where the value is wanted.  GNU CC does
                    200:      not use this method because it is slower and nonreentrant.
                    201: 
                    202:      On some newer machines, PCC uses a reentrant convention for all
                    203:      structure and union returning.  GNU CC on most of these machines
                    204:      uses a compatible convention when returning structures and unions
                    205:      in memory, but still returns small structures and unions in
                    206:      registers.
                    207: 
                    208:      You can tell GNU CC to use a compatible convention for all
                    209:      structure and union returning with the option
                    210:      `-fpcc-struct-return'.
                    211: 
                    212:    * GNU C complains about program fragments such as `0x74ae-0x4000'
                    213:      which appear to be two hexadecimal constants separated by the minus
                    214:      operator.  Actually, this string is a single "preprocessing token".
                    215:      Each such token must correspond to one token in C.  Since this
                    216:      does not, GNU C prints an error message.  Although it may appear
                    217:      obvious that what is meant is an operator and two values, the ANSI
                    218:      C standard specifically requires that this be treated as erroneous.
                    219: 
                    220:      A "preprocessing token" is a "preprocessing number" if it begins
                    221:      with a digit and is followed by letters, underscores, digits,
                    222:      periods and `e+', `e-', `E+', or `E-' character sequences.
                    223: 
                    224:      To make the above program fragment valid, place whitespace in
                    225:      front of the minus sign.  This whitespace will end the
                    226:      preprocessing number.
                    227: 
                    228: 
                    229: File: gcc.info,  Node: Fixed Headers,  Next: Disappointments,  Prev: Incompatibilities,  Up: Trouble
                    230: 
                    231: Fixed Header Files
                    232: ==================
                    233: 
                    234:    GNU CC needs to install corrected versions of some system header
                    235: files.  This is because most target systems have some header files that
                    236: won't work with GNU CC unless they are changed.  Some have bugs, some
                    237: are incompatible with ANSI C, and some depend on special features of
                    238: other compilers.
                    239: 
                    240:    Installing GNU CC automatically creates and installs the fixed header
                    241: files, by running a program called `fixincludes' (or for certain
                    242: targets an alternative such as `fixinc.svr4').  Normally, you don't
                    243: need to pay attention to this.  But there are cases where it doesn't do
                    244: the right thing automatically.
                    245: 
                    246:    * If you update the system's header files, such as by installing a
                    247:      new system version, the fixed header files of GNU CC are not
                    248:      automatically updated.  The easiest way to update them is to
                    249:      reinstall GNU CC.  (If you want to be clever, look in the makefile
                    250:      and you can find a shortcut.)
                    251: 
                    252:    * On some systems, in particular SunOS 4, header file directories
                    253:      contain machine-specific symbolic links in certain places.  This
                    254:      makes it possible to share most of the header files among hosts
                    255:      running the same version of SunOS 4 on different machine models.
                    256: 
                    257:      The programs that fix the header files do not understand this
                    258:      special way of using symbolic links; therefore, the directory of
                    259:      fixed header files is good only for the machine model used to
                    260:      build it.
                    261: 
                    262:      In SunOS 4, only programs that look inside the kernel will notice
                    263:      the difference between machine models.  Therefore, for most
                    264:      purposes, you need not be concerned about this.
                    265: 
                    266:      It is possible to make separate sets of fixed header files for the
                    267:      different machine models, and arrange a structure of symbolic
                    268:      links so as to use the proper set, but you'll have to do this by
                    269:      hand.
                    270: 
                    271: 
                    272: File: gcc.info,  Node: Disappointments,  Next: C++ Misunderstandings,  Prev: Fixed Headers,  Up: Trouble
                    273: 
                    274: Disappointments and Misunderstandings
                    275: =====================================
                    276: 
                    277:    These problems are perhaps regrettable, but we don't know any
                    278: practical way around them.
                    279: 
                    280:    * Certain local variables aren't recognized by debuggers when you
                    281:      compile with optimization.
                    282: 
                    283:      This occurs because sometimes GNU CC optimizes the variable out of
                    284:      existence.  There is no way to tell the debugger how to compute the
                    285:      value such a variable "would have had", and it is not clear that
                    286:      would be desirable anyway.  So GNU CC simply does not mention the
                    287:      eliminated variable when it writes debugging information.
                    288: 
                    289:      You have to expect a certain amount of disagreement between the
                    290:      executable and your source code, when you use optimization.
                    291: 
                    292:    * Users often think it is a bug when GNU CC reports an error for code
                    293:      like this:
                    294: 
                    295:           int foo (struct mumble *);
                    296:           
                    297:           struct mumble { ... };
                    298:           
                    299:           int foo (struct mumble *x)
                    300:           { ... }
                    301: 
                    302:      This code really is erroneous, because the scope of `struct
                    303:      mumble' in the prototype is limited to the argument list
                    304:      containing it.  It does not refer to the `struct mumble' defined
                    305:      with file scope immediately below--they are two unrelated types
                    306:      with similar names in different scopes.
                    307: 
                    308:      But in the definition of `foo', the file-scope type is used
                    309:      because that is available to be inherited.  Thus, the definition
                    310:      and the prototype do not match, and you get an error.
                    311: 
                    312:      This behavior may seem silly, but it's what the ANSI standard
                    313:      specifies.  It is easy enough for you to make your code work by
                    314:      moving the definition of `struct mumble' above the prototype.
                    315:      It's not worth being incompatible with ANSI C just to avoid an
                    316:      error for the example shown above.
                    317: 
                    318:    * Accesses to bitfields even in volatile objects works by accessing
                    319:      larger objects, such as a byte or a word.  You cannot rely on what
                    320:      size of object is accessed in order to read or write the bitfield;
                    321:      it may even vary for a given bitfield according to the precise
                    322:      usage.
                    323: 
                    324:      If you care about controlling the amount of memory that is
                    325:      accessed, use volatile but do not use bitfields.
                    326: 
                    327:    * GNU CC comes with shell scripts to fix certain known problems in
                    328:      system header files.  They install corrected copies of various
                    329:      header files in a special directory where only GNU CC will
                    330:      normally look for them.  The scripts adapt to various systems by
                    331:      searching all the system header files for the problem cases that
                    332:      we know about.
                    333: 
                    334:      If new system header files are installed, nothing automatically
                    335:      arranges to update the corrected header files.  You will have to
                    336:      reinstall GNU CC to fix the new header files.  More specifically,
                    337:      go to the build directory and delete the files `stmp-fixinc' and
                    338:      `stmp-headers', and the subdirectory `include'; then do `make
                    339:      install' again.
                    340: 
                    341:    * On 68000 systems, you can get paradoxical results if you test the
                    342:      precise values of floating point numbers.  For example, you can
                    343:      find that a floating point value which is not a NaN is not equal
                    344:      to itself.  This results from the fact that the the floating point
                    345:      registers hold a few more bits of precision than fit in a `double'
                    346:      in memory.  Compiled code moves values between memory and floating
                    347:      point registers at its convenience, and moving them into memory
                    348:      truncates them.
                    349: 
                    350:      You can partially avoid this problem by using the `-ffloat-store'
                    351:      option (*note Optimize Options::.).
                    352: 
                    353:    * On the MIPS, variable argument functions using `varargs.h' cannot
                    354:      have a floating point value for the first argument.  The reason
                    355:      for this is that in the absence of a prototype in scope, if the
                    356:      first argument is a floating point, it is passed in a floating
                    357:      point register, rather than an integer register.
                    358: 
                    359:      If the code is rewritten to use the ANSI standard `stdarg.h'
                    360:      method of variable arguments, and the prototype is in scope at the
                    361:      time of the call, everything will work fine.
                    362: 
                    363: 
                    364: File: gcc.info,  Node: C++ Misunderstandings,  Next: Protoize Caveats,  Prev: Disappointments,  Up: Trouble
                    365: 
                    366: Common Misunderstandings with GNU C++
                    367: =====================================
                    368: 
                    369:    C++ is a complex language and an evolving one, and its standard
                    370: definition (the ANSI C++ draft standard) is also evolving.  As a result,
                    371: your C++ compiler may occasionally surprise you, even when its behavior
                    372: is correct.  This section discusses some areas that frequently give
                    373: rise to questions of this sort.
                    374: 
                    375: * Menu:
                    376: 
                    377: * Static Definitions::  Static member declarations are not definitions
                    378: * Temporaries::         Temporaries may vanish before you expect
                    379: 
                    380: 
                    381: File: gcc.info,  Node: Static Definitions,  Next: Temporaries,  Up: C++ Misunderstandings
                    382: 
                    383: Declare *and* Define Static Members
                    384: -----------------------------------
                    385: 
                    386:    When a class has static data members, it is not enough to *declare*
                    387: the static member; you must also *define* it.  For example:
                    388: 
                    389:      class Foo
                    390:      {
                    391:        ...
                    392:        void method();
                    393:        static int bar;
                    394:      };
                    395: 
                    396:    This declaration only establishes that the class `Foo' has an `int'
                    397: named `Foo::bar', and a member function named `Foo::method'.  But you
                    398: still need to define *both* `method' and `bar' elsewhere.  According to
                    399: the draft ANSI standard, you must supply an initializer in one (and
                    400: only one) source file, such as:
                    401: 
                    402:      int Foo::bar = 0;
                    403: 
                    404:    Other C++ compilers may not correctly implement the standard
                    405: behavior.  As a result, when you switch to `g++' from one of these
                    406: compilers, you may discover that a program that appeared to work
                    407: correctly in fact does not conform to the standard: `g++' reports as
                    408: undefined symbols any static data members that lack definitions.
                    409: 
                    410: 
                    411: File: gcc.info,  Node: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
                    412: 
                    413: Temporaries May Vanish Before You Expect
                    414: ----------------------------------------
                    415: 
                    416:    It is dangerous to use pointers or references to *portions* of a
                    417: temporary object.  The compiler may very well delete the object before
                    418: you expect it to, leaving a pointer to garbage.  The most common place
                    419: where this problem crops up is in classes like the libg++ `String'
                    420: class, that define a conversion function to type `char *' or `const
                    421: char *'.  However, any class that returns a pointer to some internal
                    422: structure is potentially subject to this problem.
                    423: 
                    424:    For example, a program may use a function `strfunc' that returns
                    425: `String' objects, and another function `charfunc' that operates on
                    426: pointers to `char':
                    427: 
                    428:      String strfunc ();
                    429:      void charfunc (const char *);
                    430: 
                    431: In this situation, it may seem natural to write
                    432: `charfunc (strfunc ());' based on the knowledge that class `String' has
                    433: an explicit conversion to `char' pointers.  However, what really
                    434: happens is akin to `charfunc (strfunc ().convert ());', where the
                    435: `convert' method is a function to do the same data conversion normally
                    436: performed by a cast.  Since the last use of the temporary `String'
                    437: object is the call to the conversion function, the compiler may delete
                    438: that object before actually calling `charfunc'.  The compiler has no
                    439: way of knowing that deleting the `String' object will invalidate the
                    440: pointer.  The pointer then points to garbage, so that by the time
                    441: `charfunc' is called, it gets an invalid argument.
                    442: 
                    443:    Code like this may run successfully under some other compilers,
                    444: especially those that delete temporaries relatively late.  However, the
                    445: GNU C++ behavior is also standard-conformant, so if your program depends
                    446: on late destruction of temporaries it is not portable.
                    447: 
                    448:    If you think this is surprising, you should be aware that the ANSI
                    449: C++ committee continues to debate the lifetime-of-temporaries problem.
                    450: 
                    451:    For now, at least, the safe way to write such code is to give the
                    452: temporary a name, which forces it to remain until the end of the scope
                    453: of the name.  For example:
                    454: 
                    455:      String& tmp = strfunc ();
                    456:      charfunc (tmp);
                    457: 
                    458: 
                    459: File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
                    460: 
                    461: Caveats of using `protoize'
                    462: ===========================
                    463: 
                    464:    The conversion programs `protoize' and `unprotoize' can sometimes
                    465: change a source file in a way that won't work unless you rearrange it.
                    466: 
                    467:    * `protoize' can insert references to a type name or type tag before
                    468:      the definition, or in a file where they are not defined.
                    469: 
                    470:      If this happens, compiler error messages should show you where the
                    471:      new references are, so fixing the file by hand is straightforward.
                    472: 
                    473:    * There are some C constructs which `protoize' cannot figure out.
                    474:      For example, it can't determine argument types for declaring a
                    475:      pointer-to-function variable; this you must do by hand.  `protoize'
                    476:      inserts a comment containing `???' each time it finds such a
                    477:      variable; so you can find all such variables by searching for this
                    478:      string.  ANSI C does not require declaring the argument types of
                    479:      pointer-to-function types.
                    480: 
                    481:    * Using `unprotoize' can easily introduce bugs.  If the program
                    482:      relied on prototypes to bring about conversion of arguments, these
                    483:      conversions will not take place in the program without prototypes.
                    484:      One case in which you can be sure `unprotoize' is safe is when you
                    485:      are removing prototypes that were made with `protoize'; if the
                    486:      program worked before without any prototypes, it will work again
                    487:      without them.
                    488: 
                    489:      You can find all the places where this problem might occur by
                    490:      compiling the program with the `-Wconversion' option.  It prints a
                    491:      warning whenever an argument is converted.
                    492: 
                    493:    * Both conversion programs can be confused if there are macro calls
                    494:      in and around the text to be converted.  In other words, the
                    495:      standard syntax for a declaration or definition must not result
                    496:      from expanding a macro.  This problem is inherent in the design of
                    497:      C and cannot be fixed.  If only a few functions have confusing
                    498:      macro calls, you can easily convert them manually.
                    499: 
                    500:    * `protoize' cannot get the argument types for a function whose
                    501:      definition was not actually compiled due to preprocessor
                    502:      conditionals.  When this happens, `protoize' changes nothing in
                    503:      regard to such a function.  `protoize' tries to detect such
                    504:      instances and warn about them.
                    505: 
                    506:      You can generally work around this problem by using `protoize' step
                    507:      by step, each time specifying a different set of `-D' options for
                    508:      compilation, until all of the functions have been converted.
                    509:      There is no automatic way to verify that you have got them all,
                    510:      however.
                    511: 
                    512:    * Confusion may result if there is an occasion to convert a function
                    513:      declaration or definition in a region of source code where there
                    514:      is more than one formal parameter list present.  Thus, attempts to
                    515:      convert code containing multiple (conditionally compiled) versions
                    516:      of a single function header (in the same vicinity) may not produce
                    517:      the desired (or expected) results.
                    518: 
                    519:      If you plan on converting source files which contain such code, it
                    520:      is recommended that you first make sure that each conditionally
                    521:      compiled region of source code which contains an alternative
                    522:      function header also contains at least one additional follower
                    523:      token (past the final right parenthesis of the function header).
                    524:      This should circumvent the problem.
                    525: 
                    526:    * `unprotoize' can become confused when trying to convert a function
                    527:      definition or declaration which contains a declaration for a
                    528:      pointer-to-function formal argument which has the same name as the
                    529:      function being defined or declared.  We recommand you avoid such
                    530:      choices of formal parameter names.
                    531: 
                    532:    * You might also want to correct some of the indentation by hand and
                    533:      break long lines.  (The conversion programs don't write lines
                    534:      longer than eighty characters in any case.)
                    535: 
                    536: 
                    537: File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
                    538: 
                    539: Certain Changes We Don't Want to Make
                    540: =====================================
                    541: 
                    542:    This section lists changes that people frequently request, but which
                    543: we do not make because we think GNU CC is better without them.
                    544: 
                    545:    * Checking the number and type of arguments to a function which has
                    546:      an old-fashioned definition and no prototype.
                    547: 
                    548:      Such a feature would work only occasionally--only for calls that
                    549:      appear in the same file as the called function, following the
                    550:      definition.  The only way to check all calls reliably is to add a
                    551:      prototype for the function.  But adding a prototype eliminates the
                    552:      motivation for this feature.  So the feature is not worthwhile.
                    553: 
                    554:    * Warning about using an expression whose type is signed as a shift
                    555:      count.
                    556: 
                    557:      Shift count operands are probably signed more often than unsigned.
                    558:      Warning about this would cause far more annoyance than good.
                    559: 
                    560:    * Warning about assigning a signed value to an unsigned variable.
                    561: 
                    562:      Such assignments must be very common; warning about them would
                    563:      cause more annoyance than good.
                    564: 
                    565:    * Warning about unreachable code.
                    566: 
                    567:      It's very common to have unreachable code in machine-generated
                    568:      programs.  For example, this happens normally in some files of GNU
                    569:      C itself.
                    570: 
                    571:    * Warning when a non-void function value is ignored.
                    572: 
                    573:      Coming as I do from a Lisp background, I balk at the idea that
                    574:      there is something dangerous about discarding a value.  There are
                    575:      functions that return values which some callers may find useful;
                    576:      it makes no sense to clutter the program with a cast to `void'
                    577:      whenever the value isn't useful.
                    578: 
                    579:    * Assuming (for optimization) that the address of an external symbol
                    580:      is never zero.
                    581: 
                    582:      This assumption is false on certain systems when `#pragma weak' is
                    583:      used.
                    584: 
                    585:    * Making `-fshort-enums' the default.
                    586: 
                    587:      This would cause storage layout to be incompatible with most other
                    588:      C compilers.  And it doesn't seem very important, given that you
                    589:      can get the same result in other ways.  The case where it matters
                    590:      most is when the enumeration-valued object is inside a structure,
                    591:      and in that case you can specify a field width explicitly.
                    592: 
                    593:    * Making bitfields unsigned by default on particular machines where
                    594:      "the ABI standard" says to do so.
                    595: 
                    596:      The ANSI C standard leaves it up to the implementation whether a
                    597:      bitfield declared plain `int' is signed or not.  This in effect
                    598:      creates two alternative dialects of C.
                    599: 
                    600:      The GNU C compiler supports both dialects; you can specify the
                    601:      signed dialect with `-fsigned-bitfields' and the unsigned dialect
                    602:      with `-funsigned-bitfields'.  However, this leaves open the
                    603:      question of which dialect to use by default.
                    604: 
                    605:      Currently, the preferred dialect makes plain bitfields signed,
                    606:      because this is simplest.  Since `int' is the same as `signed int'
                    607:      in every other context, it is cleanest for them to be the same in
                    608:      bitfields as well.
                    609: 
                    610:      Some computer manufacturers have published Application Binary
                    611:      Interface standards which specify that plain bitfields should be
                    612:      unsigned.  It is a mistake, however, to say anything about this
                    613:      issue in an ABI.  This is because the handling of plain bitfields
                    614:      distinguishes two dialects of C.  Both dialects are meaningful on
                    615:      every type of machine.  Whether a particular object file was
                    616:      compiled using signed bitfields or unsigned is of no concern to
                    617:      other object files, even if they access the same bitfields in the
                    618:      same data structures.
                    619: 
                    620:      A given program is written in one or the other of these two
                    621:      dialects.  The program stands a chance to work on most any machine
                    622:      if it is compiled with the proper dialect.  It is unlikely to work
                    623:      at all if compiled with the wrong dialect.
                    624: 
                    625:      Many users appreciate the GNU C compiler because it provides an
                    626:      environment that is uniform across machines.  These users would be
                    627:      inconvenienced if the compiler treated plain bitfields differently
                    628:      on certain machines.
                    629: 
                    630:      Occasionally users write programs intended only for a particular
                    631:      machine type.  On these occasions, the users would benefit if the
                    632:      GNU C compiler were to support by default the same dialect as the
                    633:      other compilers on that machine.  But such applications are rare.
                    634:      And users writing a program to run on more than one type of
                    635:      machine cannot possibly benefit from this kind of compatibility.
                    636: 
                    637:      This is why GNU CC does and will treat plain bitfields in the same
                    638:      fashion on all types of machines (by default).
                    639: 
                    640:      There are some arguments for making bitfields unsigned by default
                    641:      on all machines.  If, for example, this becomes a universal de
                    642:      facto standard, it would make sense for GNU CC to go along with
                    643:      it.  This is something to be considered in the future.
                    644: 
                    645:      (Of course, users strongly concerned about portability should
                    646:      indicate explicitly in each bitfield whether it is signed or not.
                    647:      In this way, they write programs which have the same meaning in
                    648:      both C dialects.)
                    649: 
                    650:    * Undefining `__STDC__' when `-ansi' is not used.
                    651: 
                    652:      Currently, GNU CC defines `__STDC__' as long as you don't use
                    653:      `-traditional'.  This provides good results in practice.
                    654: 
                    655:      Programmers normally use conditionals on `__STDC__' to ask whether
                    656:      it is safe to use certain features of ANSI C, such as function
                    657:      prototypes or ANSI token concatenation.  Since plain `gcc' supports
                    658:      all the features of ANSI C, the correct answer to these questions
                    659:      is "yes".
                    660: 
                    661:      Some users try to use `__STDC__' to check for the availability of
                    662:      certain library facilities.  This is actually incorrect usage in
                    663:      an ANSI C program, because the ANSI C standard says that a
                    664:      conforming freestanding implementation should define `__STDC__'
                    665:      even though it does not have the library facilities.  `gcc -ansi
                    666:      -pedantic' is a conforming freestanding implementation, and it is
                    667:      therefore required to define `__STDC__', even though it does not
                    668:      come with an ANSI C library.
                    669: 
                    670:      Sometimes people say that defining `__STDC__' in a compiler that
                    671:      does not completely conform to the ANSI C standard somehow
                    672:      violates the standard.  This is illogical.  The standard is a
                    673:      standard for compilers that claim to support ANSI C, such as `gcc
                    674:      -ansi'--not for other compilers such as plain `gcc'.  Whatever the
                    675:      ANSI C standard says is relevant to the design of plain `gcc'
                    676:      without `-ansi' only for pragmatic reasons, not as a requirement.
                    677: 
                    678:    * Undefining `__STDC__' in C++.
                    679: 
                    680:      Programs written to compile with C++-to-C translators get the
                    681:      value of `__STDC__' that goes with the C compiler that is
                    682:      subsequently used.  These programs must test `__STDC__' to
                    683:      determine what kind of C preprocessor that compiler uses: whether
                    684:      they should concatenate tokens in the ANSI C fashion or in the
                    685:      traditional fashion.
                    686: 
                    687:      These programs work properly with GNU C++ if `__STDC__' is defined.
                    688:      They would not work otherwise.
                    689: 
                    690:      In addition, many header files are written to provide prototypes
                    691:      in ANSI C but not in traditional C.  Many of these header files
                    692:      can work without change in C++ provided `__STDC__' is defined.  If
                    693:      `__STDC__' is not defined, they will all fail, and will all need
                    694:      to be changed to test explicitly for C++ as well.
                    695: 
                    696:    * Deleting "empty" loops.
                    697: 
                    698:      GNU CC does not delete "empty" loops because the most likely reason
                    699:      you would put one in a program is to have a delay.  Deleting them
                    700:      will not make real programs run any faster, so it would be
                    701:      pointless.
                    702: 
                    703:      It would be different if optimization of a nonempty loop could
                    704:      produce an empty one.  But this generally can't happen.
                    705: 
                    706:    * Making side effects happen in the same order as in some other
                    707:      compiler.
                    708: 
                    709:      It is never safe to depend on the order of evaluation of side
                    710:      effects.  For example, a function call like this may very well
                    711:      behave differently from one compiler to another:
                    712: 
                    713:           void func (int, int);
                    714:           
                    715:           int i = 2;
                    716:           func (i++, i++);
                    717: 
                    718:      There is no guarantee (in either the C or the C++ standard language
                    719:      definitions) that the increments will be evaluated in any
                    720:      particular order.  Either increment might happen first.  `func'
                    721:      might get the arguments `3, 4', or it might get `4, 3', or even
                    722:      `3, 3'.
                    723: 
                    724:    * Using the "canonical" form of the target configuration name as the
                    725:      directory for installation.
                    726: 
                    727:      This would be an improvement in some respects, but it would also
                    728:      cause problems.  For one thing, users might expect to use in the
                    729:      `-b' option the same name specified at installation; if
                    730:      installation used the canonical form, that would not work.  What's
                    731:      more, the canonical name might be too long for certain file
                    732:      systems.
                    733: 
                    734:      We suggest you make a link to the installation directory under the
                    735:      canonical name, if you want to use that name in the `-b' option.
                    736: 
                    737: 
                    738: File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
                    739: 
                    740: Warning Messages and Error Messages
                    741: ===================================
                    742: 
                    743:    The GNU compiler can produce two kinds of diagnostics: errors and
                    744: warnings.  Each kind has a different purpose:
                    745: 
                    746:      *Errors* report problems that make it impossible to compile your
                    747:      program.  GNU CC reports errors with the source file name and line
                    748:      number where the problem is apparent.
                    749: 
                    750:      *Warnings* report other unusual conditions in your code that *may*
                    751:      indicate a problem, although compilation can (and does) proceed.
                    752:      Warning messages also report the source file name and line number,
                    753:      but include the text `warning:' to distinguish them from error
                    754:      messages.
                    755: 
                    756:    Warnings may indicate danger points where you should check to make
                    757: sure that your program really does what you intend; or the use of
                    758: obsolete features; or the use of nonstandard features of GNU C or C++.
                    759: Many warnings are issued only if you ask for them, with one of the `-W'
                    760: options (for instance, `-Wall' requests a variety of useful warnings).
                    761: 
                    762:    GNU CC always tries to compile your program if possible; it never
                    763: gratuituously rejects a program whose meaning is clear merely because
                    764: (for instance) it fails to conform to a standard.  In some cases,
                    765: however, the C and C++ standards specify that certain extensions are
                    766: forbidden, and a diagnostic *must* be issued by a conforming compiler.
                    767: The `-pedantic' option tells GNU CC to issue warnings in such cases;
                    768: `-pedantic-errors' says to make them errors instead.  This does not
                    769: mean that *all* non-ANSI constructs get warnings or errors.
                    770: 
                    771:    *Note Options to Request or Suppress Warnings: Warning Options, for
                    772: more detail on these and related command-line options.
                    773: 
                    774: 
                    775: File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
                    776: 
                    777: Reporting Bugs
                    778: **************
                    779: 
                    780:    Your bug reports play an essential role in making GNU CC reliable.
                    781: 
                    782:    When you encounter a problem, the first thing to do is to see if it
                    783: is already known.  *Note Trouble::.  If it isn't known, then you should
                    784: report the problem.
                    785: 
                    786:    Reporting a bug may help you by bringing a solution to your problem,
                    787: or it may not.  (If it does not, look in the service directory; see
                    788: *Note Service::.)  In any case, the principal function of a bug report
                    789: is to help the entire community by making the next version of GNU CC
                    790: work better.  Bug reports are your contribution to the maintenance of
                    791: GNU CC.
                    792: 
                    793:    Since the maintainers are very overloaded, we cannot respond to every
                    794: bug report.  However, if the bug has not been fixed, we are likely to
                    795: send you a patch and ask you to tell us whether it works.
                    796: 
                    797:    In order for a bug report to serve its purpose, you must include the
                    798: information that makes for fixing the bug.
                    799: 
                    800: * Menu:
                    801: 
                    802: * Criteria:  Bug Criteria.   Have you really found a bug?
                    803: * Where: Bug Lists.         Where to send your bug report.
                    804: * Reporting: Bug Reporting.  How to report a bug effectively.
                    805: * Patches: Sending Patches.  How to send a patch for GNU CC.
                    806: * Known: Trouble.            Known problems.
                    807: * Help: Service.             Where to ask for help.
                    808: 
                    809: 
                    810: File: gcc.info,  Node: Bug Criteria,  Next: Bug Lists,  Up: Bugs
                    811: 
                    812: Have You Found a Bug?
                    813: =====================
                    814: 
                    815:    If you are not sure whether you have found a bug, here are some
                    816: guidelines:
                    817: 
                    818:    * If the compiler gets a fatal signal, for any input whatever, that
                    819:      is a compiler bug.  Reliable compilers never crash.
                    820: 
                    821:    * If the compiler produces invalid assembly code, for any input
                    822:      whatever (except an `asm' statement), that is a compiler bug,
                    823:      unless the compiler reports errors (not just warnings) which would
                    824:      ordinarily prevent the assembler from being run.
                    825: 
                    826:    * If the compiler produces valid assembly code that does not
                    827:      correctly execute the input source code, that is a compiler bug.
                    828: 
                    829:      However, you must double-check to make sure, because you may have
                    830:      run into an incompatibility between GNU C and traditional C (*note
                    831:      Incompatibilities::.).  These incompatibilities might be considered
                    832:      bugs, but they are inescapable consequences of valuable features.
                    833: 
                    834:      Or you may have a program whose behavior is undefined, which
                    835:      happened by chance to give the desired results with another C or
                    836:      C++ compiler.
                    837: 
                    838:      For example, in many nonoptimizing compilers, you can write `x;'
                    839:      at the end of a function instead of `return x;', with the same
                    840:      results.  But the value of the function is undefined if `return'
                    841:      is omitted; it is not a bug when GNU CC produces different results.
                    842: 
                    843:      Problems often result from expressions with two increment
                    844:      operators, as in `f (*p++, *p++)'.  Your previous compiler might
                    845:      have interpreted that expression the way you intended; GNU CC might
                    846:      interpret it another way.  Neither compiler is wrong.  The bug is
                    847:      in your code.
                    848: 
                    849:      After you have localized the error to a single source line, it
                    850:      should be easy to check for these things.  If your program is
                    851:      correct and well defined, you have found a compiler bug.
                    852: 
                    853:    * If the compiler produces an error message for valid input, that is
                    854:      a compiler bug.
                    855: 
                    856:    * If the compiler does not produce an error message for invalid
                    857:      input, that is a compiler bug.  However, you should note that your
                    858:      idea of "invalid input" might be my idea of "an extension" or
                    859:      "support for traditional practice".
                    860: 
                    861:    * If you are an experienced user of C or C++ compilers, your
                    862:      suggestions for improvement of GNU CC or GNU C++ are welcome in
                    863:      any case.
                    864: 
                    865: 
                    866: File: gcc.info,  Node: Bug Lists,  Next: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
                    867: 
                    868: Where to Report Bugs
                    869: ====================
                    870: 
                    871:    Send bug reports for GNU C to one of these addresses:
                    872: 
                    873:      [email protected]
                    874:      {ucbvax|mit-eddie|uunet}!prep.ai.mit.edu!bug-gcc
                    875: 
                    876:    Send bug reports for GNU C++ to one of these addresses:
                    877: 
                    878:      [email protected]
                    879:      {ucbvax|mit-eddie|uunet}!prep.ai.mit.edu!bug-g++
                    880: 
                    881:    If your bug involves the C++ class library libg++, send mail to
                    882: `[email protected]'.  If you're not sure, you can send the
                    883: bug report to both lists.
                    884: 
                    885:    *Do not send bug reports to the mailing list `help-gcc', or to the
                    886: newsgroup `gnu.gcc.help'.* Most users of GNU CC do not want to receive
                    887: bug reports.  Those that do, have asked to be on `bug-gcc' and/or
                    888: `bug-g++'.
                    889: 
                    890:    The mailing lists `bug-gcc' and `bug-g++' both have newsgroups which
                    891: serve as repeaters: `gnu.gcc.bug' and `gnu.g++.bug'.  Each mailing list
                    892: and its newsgroup carry exactly the same messages.
                    893: 
                    894:    Often people think of posting bug reports to the newsgroup instead of
                    895: mailing them.  This appears to work, but it has one problem which can be
                    896: crucial: a newsgroup posting does not contain a mail path back to the
                    897: sender.  Thus, if maintainers need more information, they may be unable
                    898: to reach you.  For this reason, you should always send bug reports by
                    899: mail to the proper mailing list.
                    900: 
                    901:    As a last resort, send bug reports on paper to:
                    902: 
                    903:      GNU Compiler Bugs
                    904:      Free Software Foundation
                    905:      675 Mass Ave
                    906:      Cambridge, MA 02139
                    907: 

unix.superglobalmegacorp.com

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