Annotation of gcc/gcc.info-12, revision 1.1.1.9

1.1.1.9 ! root        1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the
        !             2: input file gcc.texi.
1.1       root        3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
1.1.1.8   root        6:    Published by the Free Software Foundation 59 Temple Place - Suite 330
                      7: Boston, MA 02111-1307 USA
1.1.1.5   root        8: 
1.1.1.8   root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
                     10: Foundation, Inc.
1.1       root       11: 
1.1.1.3   root       12:    Permission is granted to make and distribute verbatim copies of this
                     13: manual provided the copyright notice and this permission notice are
                     14: preserved on all copies.
1.1       root       15: 
                     16:    Permission is granted to copy and distribute modified versions of
                     17: this manual under the conditions for verbatim copying, provided also
1.1.1.7   root       18: that the sections entitled "GNU General Public License," "Funding for
                     19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
                     20: included exactly as in the original, and provided that the entire
                     21: resulting derived work is distributed under the terms of a permission
                     22: notice identical to this one.
1.1       root       23: 
                     24:    Permission is granted to copy and distribute translations of this
                     25: manual into another language, under the above conditions for modified
1.1.1.3   root       26: versions, except that the sections entitled "GNU General Public
1.1.1.7   root       27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
                     28: `Look And Feel'", and this permission notice, may be included in
                     29: translations approved by the Free Software Foundation instead of in the
                     30: original English.
1.1.1.3   root       31: 
                     32: 
1.1.1.8   root       33: File: gcc.info,  Node: Temporaries,  Prev: Static Definitions,  Up: C++ Misunderstandings
1.1.1.6   root       34: 
1.1.1.8   root       35: Temporaries May Vanish Before You Expect
                     36: ----------------------------------------
1.1.1.6   root       37: 
1.1.1.8   root       38:    It is dangerous to use pointers or references to *portions* of a
                     39: temporary object.  The compiler may very well delete the object before
                     40: you expect it to, leaving a pointer to garbage.  The most common place
                     41: where this problem crops up is in classes like the libg++ `String'
                     42: class, that define a conversion function to type `char *' or `const
                     43: char *'.  However, any class that returns a pointer to some internal
                     44: structure is potentially subject to this problem.
                     45: 
                     46:    For example, a program may use a function `strfunc' that returns
                     47: `String' objects, and another function `charfunc' that operates on
                     48: pointers to `char':
                     49: 
                     50:      String strfunc ();
                     51:      void charfunc (const char *);
                     52: 
                     53: In this situation, it may seem natural to write
                     54: `charfunc (strfunc ());' based on the knowledge that class `String' has
                     55: an explicit conversion to `char' pointers.  However, what really
                     56: happens is akin to `charfunc (strfunc ().convert ());', where the
                     57: `convert' method is a function to do the same data conversion normally
                     58: performed by a cast.  Since the last use of the temporary `String'
                     59: object is the call to the conversion function, the compiler may delete
                     60: that object before actually calling `charfunc'.  The compiler has no
                     61: way of knowing that deleting the `String' object will invalidate the
                     62: pointer.  The pointer then points to garbage, so that by the time
                     63: `charfunc' is called, it gets an invalid argument.
                     64: 
                     65:    Code like this may run successfully under some other compilers,
                     66: especially those that delete temporaries relatively late.  However, the
                     67: GNU C++ behavior is also standard-conforming, so if your program depends
                     68: on late destruction of temporaries it is not portable.
                     69: 
                     70:    If you think this is surprising, you should be aware that the ANSI
                     71: C++ committee continues to debate the lifetime-of-temporaries problem.
                     72: 
                     73:    For now, at least, the safe way to write such code is to give the
                     74: temporary a name, which forces it to remain until the end of the scope
                     75: of the name.  For example:
                     76: 
                     77:      String& tmp = strfunc ();
                     78:      charfunc (tmp);
                     79: 
                     80: 
                     81: File: gcc.info,  Node: Protoize Caveats,  Next: Non-bugs,  Prev: C++ Misunderstandings,  Up: Trouble
                     82: 
                     83: Caveats of using `protoize'
                     84: ===========================
                     85: 
                     86:    The conversion programs `protoize' and `unprotoize' can sometimes
                     87: change a source file in a way that won't work unless you rearrange it.
                     88: 
                     89:    * `protoize' can insert references to a type name or type tag before
                     90:      the definition, or in a file where they are not defined.
                     91: 
                     92:      If this happens, compiler error messages should show you where the
                     93:      new references are, so fixing the file by hand is straightforward.
                     94: 
                     95:    * There are some C constructs which `protoize' cannot figure out.
                     96:      For example, it can't determine argument types for declaring a
                     97:      pointer-to-function variable; this you must do by hand.  `protoize'
                     98:      inserts a comment containing `???' each time it finds such a
                     99:      variable; so you can find all such variables by searching for this
                    100:      string.  ANSI C does not require declaring the argument types of
                    101:      pointer-to-function types.
                    102: 
                    103:    * Using `unprotoize' can easily introduce bugs.  If the program
                    104:      relied on prototypes to bring about conversion of arguments, these
                    105:      conversions will not take place in the program without prototypes.
                    106:      One case in which you can be sure `unprotoize' is safe is when you
                    107:      are removing prototypes that were made with `protoize'; if the
                    108:      program worked before without any prototypes, it will work again
                    109:      without them.
                    110: 
                    111:      You can find all the places where this problem might occur by
                    112:      compiling the program with the `-Wconversion' option.  It prints a
                    113:      warning whenever an argument is converted.
                    114: 
                    115:    * Both conversion programs can be confused if there are macro calls
                    116:      in and around the text to be converted.  In other words, the
                    117:      standard syntax for a declaration or definition must not result
                    118:      from expanding a macro.  This problem is inherent in the design of
                    119:      C and cannot be fixed.  If only a few functions have confusing
                    120:      macro calls, you can easily convert them manually.
                    121: 
                    122:    * `protoize' cannot get the argument types for a function whose
                    123:      definition was not actually compiled due to preprocessing
                    124:      conditionals.  When this happens, `protoize' changes nothing in
                    125:      regard to such a function.  `protoize' tries to detect such
                    126:      instances and warn about them.
                    127: 
                    128:      You can generally work around this problem by using `protoize' step
                    129:      by step, each time specifying a different set of `-D' options for
                    130:      compilation, until all of the functions have been converted.
                    131:      There is no automatic way to verify that you have got them all,
                    132:      however.
                    133: 
                    134:    * Confusion may result if there is an occasion to convert a function
                    135:      declaration or definition in a region of source code where there
                    136:      is more than one formal parameter list present.  Thus, attempts to
                    137:      convert code containing multiple (conditionally compiled) versions
                    138:      of a single function header (in the same vicinity) may not produce
                    139:      the desired (or expected) results.
                    140: 
                    141:      If you plan on converting source files which contain such code, it
                    142:      is recommended that you first make sure that each conditionally
                    143:      compiled region of source code which contains an alternative
                    144:      function header also contains at least one additional follower
                    145:      token (past the final right parenthesis of the function header).
                    146:      This should circumvent the problem.
                    147: 
                    148:    * `unprotoize' can become confused when trying to convert a function
                    149:      definition or declaration which contains a declaration for a
                    150:      pointer-to-function formal argument which has the same name as the
                    151:      function being defined or declared.  We recommand you avoid such
                    152:      choices of formal parameter names.
                    153: 
                    154:    * You might also want to correct some of the indentation by hand and
                    155:      break long lines.  (The conversion programs don't write lines
                    156:      longer than eighty characters in any case.)
                    157: 
                    158: 
                    159: File: gcc.info,  Node: Non-bugs,  Next: Warnings and Errors,  Prev: Protoize Caveats,  Up: Trouble
                    160: 
                    161: Certain Changes We Don't Want to Make
                    162: =====================================
                    163: 
                    164:    This section lists changes that people frequently request, but which
                    165: we do not make because we think GNU CC is better without them.
                    166: 
                    167:    * Checking the number and type of arguments to a function which has
                    168:      an old-fashioned definition and no prototype.
                    169: 
                    170:      Such a feature would work only occasionally--only for calls that
                    171:      appear in the same file as the called function, following the
                    172:      definition.  The only way to check all calls reliably is to add a
                    173:      prototype for the function.  But adding a prototype eliminates the
                    174:      motivation for this feature.  So the feature is not worthwhile.
                    175: 
                    176:    * Warning about using an expression whose type is signed as a shift
                    177:      count.
                    178: 
                    179:      Shift count operands are probably signed more often than unsigned.
                    180:      Warning about this would cause far more annoyance than good.
                    181: 
                    182:    * Warning about assigning a signed value to an unsigned variable.
                    183: 
                    184:      Such assignments must be very common; warning about them would
                    185:      cause more annoyance than good.
                    186: 
                    187:    * Warning about unreachable code.
                    188: 
                    189:      It's very common to have unreachable code in machine-generated
                    190:      programs.  For example, this happens normally in some files of GNU
                    191:      C itself.
                    192: 
                    193:    * Warning when a non-void function value is ignored.
                    194: 
                    195:      Coming as I do from a Lisp background, I balk at the idea that
                    196:      there is something dangerous about discarding a value.  There are
                    197:      functions that return values which some callers may find useful;
                    198:      it makes no sense to clutter the program with a cast to `void'
                    199:      whenever the value isn't useful.
                    200: 
                    201:    * Assuming (for optimization) that the address of an external symbol
                    202:      is never zero.
                    203: 
                    204:      This assumption is false on certain systems when `#pragma weak' is
                    205:      used.
                    206: 
                    207:    * Making `-fshort-enums' the default.
                    208: 
                    209:      This would cause storage layout to be incompatible with most other
                    210:      C compilers.  And it doesn't seem very important, given that you
                    211:      can get the same result in other ways.  The case where it matters
                    212:      most is when the enumeration-valued object is inside a structure,
                    213:      and in that case you can specify a field width explicitly.
                    214: 
                    215:    * Making bitfields unsigned by default on particular machines where
                    216:      "the ABI standard" says to do so.
                    217: 
                    218:      The ANSI C standard leaves it up to the implementation whether a
                    219:      bitfield declared plain `int' is signed or not.  This in effect
                    220:      creates two alternative dialects of C.
                    221: 
                    222:      The GNU C compiler supports both dialects; you can specify the
                    223:      signed dialect with `-fsigned-bitfields' and the unsigned dialect
                    224:      with `-funsigned-bitfields'.  However, this leaves open the
                    225:      question of which dialect to use by default.
                    226: 
                    227:      Currently, the preferred dialect makes plain bitfields signed,
                    228:      because this is simplest.  Since `int' is the same as `signed int'
                    229:      in every other context, it is cleanest for them to be the same in
                    230:      bitfields as well.
                    231: 
                    232:      Some computer manufacturers have published Application Binary
                    233:      Interface standards which specify that plain bitfields should be
                    234:      unsigned.  It is a mistake, however, to say anything about this
                    235:      issue in an ABI.  This is because the handling of plain bitfields
                    236:      distinguishes two dialects of C.  Both dialects are meaningful on
                    237:      every type of machine.  Whether a particular object file was
                    238:      compiled using signed bitfields or unsigned is of no concern to
                    239:      other object files, even if they access the same bitfields in the
                    240:      same data structures.
                    241: 
                    242:      A given program is written in one or the other of these two
                    243:      dialects.  The program stands a chance to work on most any machine
                    244:      if it is compiled with the proper dialect.  It is unlikely to work
                    245:      at all if compiled with the wrong dialect.
                    246: 
                    247:      Many users appreciate the GNU C compiler because it provides an
                    248:      environment that is uniform across machines.  These users would be
                    249:      inconvenienced if the compiler treated plain bitfields differently
                    250:      on certain machines.
                    251: 
                    252:      Occasionally users write programs intended only for a particular
                    253:      machine type.  On these occasions, the users would benefit if the
                    254:      GNU C compiler were to support by default the same dialect as the
                    255:      other compilers on that machine.  But such applications are rare.
                    256:      And users writing a program to run on more than one type of
                    257:      machine cannot possibly benefit from this kind of compatibility.
                    258: 
                    259:      This is why GNU CC does and will treat plain bitfields in the same
                    260:      fashion on all types of machines (by default).
                    261: 
                    262:      There are some arguments for making bitfields unsigned by default
                    263:      on all machines.  If, for example, this becomes a universal de
                    264:      facto standard, it would make sense for GNU CC to go along with
                    265:      it.  This is something to be considered in the future.
                    266: 
                    267:      (Of course, users strongly concerned about portability should
                    268:      indicate explicitly in each bitfield whether it is signed or not.
                    269:      In this way, they write programs which have the same meaning in
                    270:      both C dialects.)
                    271: 
                    272:    * Undefining `__STDC__' when `-ansi' is not used.
                    273: 
                    274:      Currently, GNU CC defines `__STDC__' as long as you don't use
                    275:      `-traditional'.  This provides good results in practice.
                    276: 
                    277:      Programmers normally use conditionals on `__STDC__' to ask whether
                    278:      it is safe to use certain features of ANSI C, such as function
                    279:      prototypes or ANSI token concatenation.  Since plain `gcc' supports
                    280:      all the features of ANSI C, the correct answer to these questions
                    281:      is "yes".
                    282: 
                    283:      Some users try to use `__STDC__' to check for the availability of
                    284:      certain library facilities.  This is actually incorrect usage in
                    285:      an ANSI C program, because the ANSI C standard says that a
                    286:      conforming freestanding implementation should define `__STDC__'
                    287:      even though it does not have the library facilities.  `gcc -ansi
                    288:      -pedantic' is a conforming freestanding implementation, and it is
                    289:      therefore required to define `__STDC__', even though it does not
                    290:      come with an ANSI C library.
                    291: 
                    292:      Sometimes people say that defining `__STDC__' in a compiler that
                    293:      does not completely conform to the ANSI C standard somehow
                    294:      violates the standard.  This is illogical.  The standard is a
                    295:      standard for compilers that claim to support ANSI C, such as `gcc
                    296:      -ansi'--not for other compilers such as plain `gcc'.  Whatever the
                    297:      ANSI C standard says is relevant to the design of plain `gcc'
                    298:      without `-ansi' only for pragmatic reasons, not as a requirement.
                    299: 
                    300:    * Undefining `__STDC__' in C++.
                    301: 
                    302:      Programs written to compile with C++-to-C translators get the
                    303:      value of `__STDC__' that goes with the C compiler that is
                    304:      subsequently used.  These programs must test `__STDC__' to
                    305:      determine what kind of C preprocessor that compiler uses: whether
                    306:      they should concatenate tokens in the ANSI C fashion or in the
                    307:      traditional fashion.
                    308: 
                    309:      These programs work properly with GNU C++ if `__STDC__' is defined.
                    310:      They would not work otherwise.
                    311: 
                    312:      In addition, many header files are written to provide prototypes
                    313:      in ANSI C but not in traditional C.  Many of these header files
                    314:      can work without change in C++ provided `__STDC__' is defined.  If
                    315:      `__STDC__' is not defined, they will all fail, and will all need
                    316:      to be changed to test explicitly for C++ as well.
                    317: 
                    318:    * Deleting "empty" loops.
                    319: 
                    320:      GNU CC does not delete "empty" loops because the most likely reason
                    321:      you would put one in a program is to have a delay.  Deleting them
                    322:      will not make real programs run any faster, so it would be
                    323:      pointless.
                    324: 
                    325:      It would be different if optimization of a nonempty loop could
                    326:      produce an empty one.  But this generally can't happen.
                    327: 
                    328:    * Making side effects happen in the same order as in some other
                    329:      compiler.
                    330: 
                    331:      It is never safe to depend on the order of evaluation of side
                    332:      effects.  For example, a function call like this may very well
                    333:      behave differently from one compiler to another:
                    334: 
                    335:           void func (int, int);
                    336:           
                    337:           int i = 2;
                    338:           func (i++, i++);
                    339: 
                    340:      There is no guarantee (in either the C or the C++ standard language
                    341:      definitions) that the increments will be evaluated in any
                    342:      particular order.  Either increment might happen first.  `func'
                    343:      might get the arguments `2, 3', or it might get `3, 2', or even
                    344:      `2, 2'.
                    345: 
                    346:    * Not allowing structures with volatile fields in registers.
                    347: 
                    348:      Strictly speaking, there is no prohibition in the ANSI C standard
                    349:      against allowing structures with volatile fields in registers, but
                    350:      it does not seem to make any sense and is probably not what you
                    351:      wanted to do.  So the compiler will give an error message in this
                    352:      case.
1.1.1.6   root      353: 
                    354: 
1.1.1.8   root      355: File: gcc.info,  Node: Warnings and Errors,  Prev: Non-bugs,  Up: Trouble
                    356: 
                    357: Warning Messages and Error Messages
                    358: ===================================
                    359: 
                    360:    The GNU compiler can produce two kinds of diagnostics: errors and
                    361: warnings.  Each kind has a different purpose:
                    362: 
                    363:      *Errors* report problems that make it impossible to compile your
                    364:      program.  GNU CC reports errors with the source file name and line
                    365:      number where the problem is apparent.
                    366: 
                    367:      *Warnings* report other unusual conditions in your code that *may*
                    368:      indicate a problem, although compilation can (and does) proceed.
                    369:      Warning messages also report the source file name and line number,
                    370:      but include the text `warning:' to distinguish them from error
                    371:      messages.
                    372: 
                    373:    Warnings may indicate danger points where you should check to make
                    374: sure that your program really does what you intend; or the use of
                    375: obsolete features; or the use of nonstandard features of GNU C or C++.
                    376: Many warnings are issued only if you ask for them, with one of the `-W'
                    377: options (for instance, `-Wall' requests a variety of useful warnings).
                    378: 
                    379:    GNU CC always tries to compile your program if possible; it never
                    380: gratuitously rejects a program whose meaning is clear merely because
                    381: (for instance) it fails to conform to a standard.  In some cases,
                    382: however, the C and C++ standards specify that certain extensions are
                    383: forbidden, and a diagnostic *must* be issued by a conforming compiler.
                    384: The `-pedantic' option tells GNU CC to issue warnings in such cases;
                    385: `-pedantic-errors' says to make them errors instead.  This does not
                    386: mean that *all* non-ANSI constructs get warnings or errors.
                    387: 
                    388:    *Note Options to Request or Suppress Warnings: Warning Options, for
                    389: more detail on these and related command-line options.
                    390: 
                    391: 
                    392: File: gcc.info,  Node: Bugs,  Next: Service,  Prev: Trouble,  Up: Top
                    393: 
                    394: Reporting Bugs
                    395: **************
1.1.1.6   root      396: 
1.1.1.8   root      397:    Your bug reports play an essential role in making GNU CC reliable.
1.1.1.6   root      398: 
1.1.1.8   root      399:    When you encounter a problem, the first thing to do is to see if it
                    400: is already known.  *Note Trouble::.  If it isn't known, then you should
                    401: report the problem.
                    402: 
                    403:    Reporting a bug may help you by bringing a solution to your problem,
                    404: or it may not.  (If it does not, look in the service directory; see
                    405: *Note Service::.)  In any case, the principal function of a bug report
                    406: is to help the entire community by making the next version of GNU CC
                    407: work better.  Bug reports are your contribution to the maintenance of
                    408: GNU CC.
                    409: 
                    410:    Since the maintainers are very overloaded, we cannot respond to every
                    411: bug report.  However, if the bug has not been fixed, we are likely to
                    412: send you a patch and ask you to tell us whether it works.
                    413: 
                    414:    In order for a bug report to serve its purpose, you must include the
                    415: information that makes for fixing the bug.
1.1.1.7   root      416: 
                    417: * Menu:
                    418: 
1.1.1.8   root      419: * Criteria:  Bug Criteria.   Have you really found a bug?
                    420: * Where: Bug Lists.         Where to send your bug report.
                    421: * Reporting: Bug Reporting.  How to report a bug effectively.
                    422: * Patches: Sending Patches.  How to send a patch for GNU CC.
                    423: * Known: Trouble.            Known problems.
                    424: * Help: Service.             Where to ask for help.
1.1.1.6   root      425: 
                    426: 
1.1.1.8   root      427: File: gcc.info,  Node: Bug Criteria,  Next: Bug Lists,  Up: Bugs
1.1.1.6   root      428: 
1.1.1.8   root      429: Have You Found a Bug?
                    430: =====================
1.1.1.6   root      431: 
1.1.1.8   root      432:    If you are not sure whether you have found a bug, here are some
                    433: guidelines:
1.1.1.6   root      434: 
1.1.1.8   root      435:    * If the compiler gets a fatal signal, for any input whatever, that
                    436:      is a compiler bug.  Reliable compilers never crash.
                    437: 
                    438:    * If the compiler produces invalid assembly code, for any input
                    439:      whatever (except an `asm' statement), that is a compiler bug,
                    440:      unless the compiler reports errors (not just warnings) which would
                    441:      ordinarily prevent the assembler from being run.
                    442: 
                    443:    * If the compiler produces valid assembly code that does not
                    444:      correctly execute the input source code, that is a compiler bug.
                    445: 
                    446:      However, you must double-check to make sure, because you may have
                    447:      run into an incompatibility between GNU C and traditional C (*note
                    448:      Incompatibilities::.).  These incompatibilities might be considered
                    449:      bugs, but they are inescapable consequences of valuable features.
                    450: 
                    451:      Or you may have a program whose behavior is undefined, which
                    452:      happened by chance to give the desired results with another C or
                    453:      C++ compiler.
                    454: 
                    455:      For example, in many nonoptimizing compilers, you can write `x;'
                    456:      at the end of a function instead of `return x;', with the same
                    457:      results.  But the value of the function is undefined if `return'
                    458:      is omitted; it is not a bug when GNU CC produces different results.
                    459: 
                    460:      Problems often result from expressions with two increment
                    461:      operators, as in `f (*p++, *p++)'.  Your previous compiler might
                    462:      have interpreted that expression the way you intended; GNU CC might
                    463:      interpret it another way.  Neither compiler is wrong.  The bug is
                    464:      in your code.
                    465: 
                    466:      After you have localized the error to a single source line, it
                    467:      should be easy to check for these things.  If your program is
                    468:      correct and well defined, you have found a compiler bug.
                    469: 
                    470:    * If the compiler produces an error message for valid input, that is
                    471:      a compiler bug.
                    472: 
                    473:    * If the compiler does not produce an error message for invalid
                    474:      input, that is a compiler bug.  However, you should note that your
                    475:      idea of "invalid input" might be my idea of "an extension" or
                    476:      "support for traditional practice".
                    477: 
                    478:    * If you are an experienced user of C or C++ compilers, your
                    479:      suggestions for improvement of GNU CC or GNU C++ are welcome in
                    480:      any case.
1.1.1.6   root      481: 
                    482: 
1.1.1.8   root      483: File: gcc.info,  Node: Bug Lists,  Next: Bug Reporting,  Prev: Bug Criteria,  Up: Bugs
                    484: 
                    485: Where to Report Bugs
                    486: ====================
                    487: 
                    488:    Send bug reports for GNU C to `[email protected]'.
1.1.1.6   root      489: 
1.1.1.8   root      490:    Send bug reports for GNU C++ to `[email protected]'.  If your
                    491: bug involves the C++ class library libg++, send mail to
                    492: `[email protected]'.  If you're not sure, you can send the
                    493: bug report to both lists.
                    494: 
                    495:    *Do not send bug reports to `[email protected]' or to the
                    496: newsgroup `gnu.gcc.help'.* Most users of GNU CC do not want to receive
                    497: bug reports.  Those that do, have asked to be on `bug-gcc' and/or
                    498: `bug-g++'.
                    499: 
                    500:    The mailing lists `bug-gcc' and `bug-g++' both have newsgroups which
                    501: serve as repeaters: `gnu.gcc.bug' and `gnu.g++.bug'.  Each mailing list
                    502: and its newsgroup carry exactly the same messages.
                    503: 
                    504:    Often people think of posting bug reports to the newsgroup instead of
                    505: mailing them.  This appears to work, but it has one problem which can be
                    506: crucial: a newsgroup posting does not contain a mail path back to the
                    507: sender.  Thus, if maintainers need more information, they may be unable
                    508: to reach you.  For this reason, you should always send bug reports by
                    509: mail to the proper mailing list.
                    510: 
                    511:    As a last resort, send bug reports on paper to:
                    512: 
                    513:      GNU Compiler Bugs
                    514:      Free Software Foundation
                    515:      59 Temple Place - Suite 330
                    516:      Boston, MA 02111-1307, USA
                    517: 
                    518: 
                    519: File: gcc.info,  Node: Bug Reporting,  Next: Sending Patches,  Prev: Bug Lists,  Up: Bugs
                    520: 
                    521: How to Report Bugs
1.1.1.7   root      522: ==================
1.1.1.6   root      523: 
1.1.1.8   root      524:    The fundamental principle of reporting bugs usefully is this:
                    525: *report all the facts*.  If you are not sure whether to state a fact or
                    526: leave it out, state it!
                    527: 
                    528:    Often people omit facts because they think they know what causes the
                    529: problem and they conclude that some details don't matter.  Thus, you
                    530: might assume that the name of the variable you use in an example does
                    531: not matter.  Well, probably it doesn't, but one cannot be sure.
                    532: Perhaps the bug is a stray memory reference which happens to fetch from
                    533: the location where that name is stored in memory; perhaps, if the name
                    534: were different, the contents of that location would fool the compiler
                    535: into doing the right thing despite the bug.  Play it safe and give a
                    536: specific, complete example.  That is the easiest thing for you to do,
                    537: and the most helpful.
                    538: 
                    539:    Keep in mind that the purpose of a bug report is to enable someone to
                    540: fix the bug if it is not known.  It isn't very important what happens if
                    541: the bug is already known.  Therefore, always write your bug reports on
                    542: the assumption that the bug is not known.
                    543: 
                    544:    Sometimes people give a few sketchy facts and ask, "Does this ring a
                    545: bell?"  This cannot help us fix a bug, so it is basically useless.  We
                    546: respond by asking for enough details to enable us to investigate.  You
                    547: might as well expedite matters by sending them to begin with.
                    548: 
                    549:    Try to make your bug report self-contained.  If we have to ask you
                    550: for more information, it is best if you include all the previous
                    551: information in your response, as well as the information that was
                    552: missing.
                    553: 
                    554:    Please report each bug in a separate message.  This makes it easier
                    555: for us to track which bugs have been fixed and to forward your bugs
                    556: reports to the appropriate maintainer.
                    557: 
                    558:    Do not compress and encode any part of your bug report using programs
                    559: such as `uuencode'.  If you do so it will slow down the processing of
                    560: your bug.  If you must submit multiple large files, use `shar', which
                    561: allows us to read your message without having to run any decompression
                    562: programs.
                    563: 
                    564:    To enable someone to investigate the bug, you should include all
                    565: these things:
                    566: 
                    567:    * The version of GNU CC.  You can get this by running it with the
                    568:      `-v' option.
                    569: 
                    570:      Without this, we won't know whether there is any point in looking
                    571:      for the bug in the current version of GNU CC.
                    572: 
                    573:    * A complete input file that will reproduce the bug.  If the bug is
                    574:      in the C preprocessor, send a source file and any header files
                    575:      that it requires.  If the bug is in the compiler proper (`cc1'),
                    576:      run your source file through the C preprocessor by doing `gcc -E
                    577:      SOURCEFILE > OUTFILE', then include the contents of OUTFILE in the
                    578:      bug report.  (When you do this, use the same `-I', `-D' or `-U'
                    579:      options that you used in actual compilation.)
                    580: 
                    581:      A single statement is not enough of an example.  In order to
                    582:      compile it, it must be embedded in a complete file of compiler
                    583:      input; and the bug might depend on the details of how this is done.
                    584: 
                    585:      Without a real example one can compile, all anyone can do about
                    586:      your bug report is wish you luck.  It would be futile to try to
                    587:      guess how to provoke the bug.  For example, bugs in register
                    588:      allocation and reloading frequently depend on every little detail
                    589:      of the function they happen in.
                    590: 
                    591:      Even if the input file that fails comes from a GNU program, you
                    592:      should still send the complete test case.  Don't ask the GNU CC
                    593:      maintainers to do the extra work of obtaining the program in
                    594:      question--they are all overworked as it is.  Also, the problem may
                    595:      depend on what is in the header files on your system; it is
                    596:      unreliable for the GNU CC maintainers to try the problem with the
                    597:      header files available to them.  By sending CPP output, you can
                    598:      eliminate this source of uncertainty and save us a certain
                    599:      percentage of wild goose chases.
                    600: 
                    601:    * The command arguments you gave GNU CC or GNU C++ to compile that
                    602:      example and observe the bug.  For example, did you use `-O'?  To
                    603:      guarantee you won't omit something important, list all the options.
                    604: 
                    605:      If we were to try to guess the arguments, we would probably guess
                    606:      wrong and then we would not encounter the bug.
                    607: 
                    608:    * The type of machine you are using, and the operating system name
                    609:      and version number.
                    610: 
                    611:    * The operands you gave to the `configure' command when you installed
                    612:      the compiler.
                    613: 
                    614:    * A complete list of any modifications you have made to the compiler
                    615:      source.  (We don't promise to investigate the bug unless it
                    616:      happens in an unmodified compiler.  But if you've made
                    617:      modifications and don't tell us, then you are sending us on a wild
                    618:      goose chase.)
                    619: 
                    620:      Be precise about these changes.  A description in English is not
                    621:      enough--send a context diff for them.
                    622: 
                    623:      Adding files of your own (such as a machine description for a
                    624:      machine we don't support) is a modification of the compiler source.
                    625: 
                    626:    * Details of any other deviations from the standard procedure for
                    627:      installing GNU CC.
                    628: 
                    629:    * A description of what behavior you observe that you believe is
                    630:      incorrect.  For example, "The compiler gets a fatal signal," or,
                    631:      "The assembler instruction at line 208 in the output is incorrect."
                    632: 
                    633:      Of course, if the bug is that the compiler gets a fatal signal,
                    634:      then one can't miss it.  But if the bug is incorrect output, the
                    635:      maintainer might not notice unless it is glaringly wrong.  None of
                    636:      us has time to study all the assembler code from a 50-line C
                    637:      program just on the chance that one instruction might be wrong.
                    638:      We need *you* to do this part!
                    639: 
                    640:      Even if the problem you experience is a fatal signal, you should
                    641:      still say so explicitly.  Suppose something strange is going on,
                    642:      such as, your copy of the compiler is out of synch, or you have
                    643:      encountered a bug in the C library on your system.  (This has
                    644:      happened!)  Your copy might crash and the copy here would not.  If
                    645:      you said to expect a crash, then when the compiler here fails to
                    646:      crash, we would know that the bug was not happening.  If you don't
                    647:      say to expect a crash, then we would not know whether the bug was
                    648:      happening.  We would not be able to draw any conclusion from our
                    649:      observations.
                    650: 
                    651:      If the problem is a diagnostic when compiling GNU CC with some
                    652:      other compiler, say whether it is a warning or an error.
                    653: 
                    654:      Often the observed symptom is incorrect output when your program
                    655:      is run.  Sad to say, this is not enough information unless the
                    656:      program is short and simple.  None of us has time to study a large
                    657:      program to figure out how it would work if compiled correctly,
                    658:      much less which line of it was compiled wrong.  So you will have
                    659:      to do that.  Tell us which source line it is, and what incorrect
                    660:      result happens when that line is executed.  A person who
                    661:      understands the program can find this as easily as finding a bug
                    662:      in the program itself.
                    663: 
                    664:    * If you send examples of assembler code output from GNU CC or GNU
                    665:      C++, please use `-g' when you make them.  The debugging information
                    666:      includes source line numbers which are essential for correlating
                    667:      the output with the input.
                    668: 
                    669:    * If you wish to mention something in the GNU CC source, refer to it
                    670:      by context, not by line number.
                    671: 
                    672:      The line numbers in the development sources don't match those in
                    673:      your sources.  Your line numbers would convey no useful
                    674:      information to the maintainers.
                    675: 
                    676:    * Additional information from a debugger might enable someone to
                    677:      find a problem on a machine which he does not have available.
                    678:      However, you need to think when you collect this information if
                    679:      you want it to have any chance of being useful.
                    680: 
                    681:      For example, many people send just a backtrace, but that is never
                    682:      useful by itself.  A simple backtrace with arguments conveys little
                    683:      about GNU CC because the compiler is largely data-driven; the same
                    684:      functions are called over and over for different RTL insns, doing
                    685:      different things depending on the details of the insn.
                    686: 
                    687:      Most of the arguments listed in the backtrace are useless because
                    688:      they are pointers to RTL list structure.  The numeric values of the
                    689:      pointers, which the debugger prints in the backtrace, have no
                    690:      significance whatever; all that matters is the contents of the
                    691:      objects they point to (and most of the contents are other such
                    692:      pointers).
                    693: 
                    694:      In addition, most compiler passes consist of one or more loops that
                    695:      scan the RTL insn sequence.  The most vital piece of information
                    696:      about such a loop--which insn it has reached--is usually in a
                    697:      local variable, not in an argument.
                    698: 
                    699:      What you need to provide in addition to a backtrace are the values
                    700:      of the local variables for several stack frames up.  When a local
                    701:      variable or an argument is an RTX, first print its value and then
                    702:      use the GDB command `pr' to print the RTL expression that it points
                    703:      to.  (If GDB doesn't run on your machine, use your debugger to call
                    704:      the function `debug_rtx' with the RTX as an argument.)  In
                    705:      general, whenever a variable is a pointer, its value is no use
                    706:      without the data it points to.
                    707: 
                    708:    Here are some things that are not necessary:
                    709: 
                    710:    * A description of the envelope of the bug.
                    711: 
                    712:      Often people who encounter a bug spend a lot of time investigating
                    713:      which changes to the input file will make the bug go away and which
                    714:      changes will not affect it.
                    715: 
                    716:      This is often time consuming and not very useful, because the way
                    717:      we will find the bug is by running a single example under the
                    718:      debugger with breakpoints, not by pure deduction from a series of
                    719:      examples.  You might as well save your time for something else.
                    720: 
                    721:      Of course, if you can find a simpler example to report *instead* of
                    722:      the original one, that is a convenience.  Errors in the output
                    723:      will be easier to spot, running under the debugger will take less
                    724:      time, etc.  Most GNU CC bugs involve just one function, so the
                    725:      most straightforward way to simplify an example is to delete all
                    726:      the function definitions except the one where the bug occurs.
                    727:      Those earlier in the file may be replaced by external declarations
                    728:      if the crucial function depends on them.  (Exception: inline
                    729:      functions may affect compilation of functions defined later in the
                    730:      file.)
                    731: 
                    732:      However, simplification is not vital; if you don't want to do this,
                    733:      report the bug anyway and send the entire test case you used.
                    734: 
                    735:    * In particular, some people insert conditionals `#ifdef BUG' around
                    736:      a statement which, if removed, makes the bug not happen.  These
                    737:      are just clutter; we won't pay any attention to them anyway.
                    738:      Besides, you should send us cpp output, and that can't have
                    739:      conditionals.
                    740: 
                    741:    * A patch for the bug.
                    742: 
                    743:      A patch for the bug is useful if it is a good one.  But don't omit
                    744:      the necessary information, such as the test case, on the
                    745:      assumption that a patch is all we need.  We might see problems
                    746:      with your patch and decide to fix the problem another way, or we
                    747:      might not understand it at all.
                    748: 
                    749:      Sometimes with a program as complicated as GNU CC it is very hard
                    750:      to construct an example that will make the program follow a
                    751:      certain path through the code.  If you don't send the example, we
                    752:      won't be able to construct one, so we won't be able to verify that
                    753:      the bug is fixed.
                    754: 
                    755:      And if we can't understand what bug you are trying to fix, or why
                    756:      your patch should be an improvement, we won't install it.  A test
                    757:      case will help us to understand.
                    758: 
                    759:      *Note Sending Patches::, for guidelines on how to make it easy for
                    760:      us to understand and install your patches.
                    761: 
                    762:    * A guess about what the bug is or what it depends on.
                    763: 
                    764:      Such guesses are usually wrong.  Even I can't guess right about
                    765:      such things without first using the debugger to find the facts.
                    766: 
                    767:    * A core dump file.
                    768: 
                    769:      We have no way of examining a core dump for your type of machine
                    770:      unless we have an identical system--and if we do have one, we
                    771:      should be able to reproduce the crash ourselves.
1.1.1.6   root      772: 
                    773: 
1.1.1.8   root      774: File: gcc.info,  Node: Sending Patches,  Prev: Bug Reporting,  Up: Bugs
1.1.1.6   root      775: 
1.1.1.8   root      776: Sending Patches for GNU CC
1.1.1.7   root      777: ==========================
1.1.1.6   root      778: 
1.1.1.8   root      779:    If you would like to write bug fixes or improvements for the GNU C
                    780: compiler, that is very helpful.  Send suggested fixes to the bug report
                    781: mailing list, `[email protected]'.
                    782: 
                    783:    Please follow these guidelines so we can study your patches
                    784: efficiently.  If you don't follow these guidelines, your information
                    785: might still be useful, but using it will take extra work.  Maintaining
                    786: GNU C is a lot of work in the best of circumstances, and we can't keep
                    787: up unless you do your best to help.
                    788: 
                    789:    * Send an explanation with your changes of what problem they fix or
                    790:      what improvement they bring about.  For a bug fix, just include a
                    791:      copy of the bug report, and explain why the change fixes the bug.
                    792: 
                    793:      (Referring to a bug report is not as good as including it, because
                    794:      then we will have to look it up, and we have probably already
                    795:      deleted it if we've already fixed the bug.)
                    796: 
                    797:    * Always include a proper bug report for the problem you think you
                    798:      have fixed.  We need to convince ourselves that the change is
                    799:      right before installing it.  Even if it is right, we might have
                    800:      trouble judging it if we don't have a way to reproduce the problem.
                    801: 
                    802:    * Include all the comments that are appropriate to help people
                    803:      reading the source in the future understand why this change was
                    804:      needed.
                    805: 
                    806:    * Don't mix together changes made for different reasons.  Send them
                    807:      *individually*.
                    808: 
                    809:      If you make two changes for separate reasons, then we might not
                    810:      want to install them both.  We might want to install just one.  If
                    811:      you send them all jumbled together in a single set of diffs, we
                    812:      have to do extra work to disentangle them--to figure out which
                    813:      parts of the change serve which purpose.  If we don't have time
                    814:      for this, we might have to ignore your changes entirely.
                    815: 
                    816:      If you send each change as soon as you have written it, with its
                    817:      own explanation, then the two changes never get tangled up, and we
                    818:      can consider each one properly without any extra work to
                    819:      disentangle them.
                    820: 
                    821:      Ideally, each change you send should be impossible to subdivide
                    822:      into parts that we might want to consider separately, because each
                    823:      of its parts gets its motivation from the other parts.
                    824: 
                    825:    * Send each change as soon as that change is finished.  Sometimes
                    826:      people think they are helping us by accumulating many changes to
                    827:      send them all together.  As explained above, this is absolutely
                    828:      the worst thing you could do.
                    829: 
                    830:      Since you should send each change separately, you might as well
                    831:      send it right away.  That gives us the option of installing it
                    832:      immediately if it is important.
                    833: 
                    834:    * Use `diff -c' to make your diffs.  Diffs without context are hard
                    835:      for us to install reliably.  More than that, they make it hard for
                    836:      us to study the diffs to decide whether we want to install them.
                    837:      Unidiff format is better than contextless diffs, but not as easy
                    838:      to read as `-c' format.
                    839: 
                    840:      If you have GNU diff, use `diff -cp', which shows the name of the
                    841:      function that each change occurs in.
                    842: 
                    843:    * Write the change log entries for your changes.  We get lots of
                    844:      changes, and we don't have time to do all the change log writing
                    845:      ourselves.
                    846: 
                    847:      Read the `ChangeLog' file to see what sorts of information to put
                    848:      in, and to learn the style that we use.  The purpose of the change
                    849:      log is to show people where to find what was changed.  So you need
                    850:      to be specific about what functions you changed; in large
                    851:      functions, it's often helpful to indicate where within the
                    852:      function the change was.
                    853: 
                    854:      On the other hand, once you have shown people where to find the
                    855:      change, you need not explain its purpose.  Thus, if you add a new
                    856:      function, all you need to say about it is that it is new.  If you
                    857:      feel that the purpose needs explaining, it probably does--but the
                    858:      explanation will be much more useful if you put it in comments in
                    859:      the code.
                    860: 
                    861:      If you would like your name to appear in the header line for who
                    862:      made the change, send us the header line.
                    863: 
                    864:    * When you write the fix, keep in mind that we can't install a
                    865:      change that would break other systems.
                    866: 
                    867:      People often suggest fixing a problem by changing
                    868:      machine-independent files such as `toplev.c' to do something
                    869:      special that a particular system needs.  Sometimes it is totally
                    870:      obvious that such changes would break GNU CC for almost all users.
                    871:      We can't possibly make a change like that.  At best it might tell
                    872:      us how to write another patch that would solve the problem
                    873:      acceptably.
                    874: 
                    875:      Sometimes people send fixes that *might* be an improvement in
                    876:      general--but it is hard to be sure of this.  It's hard to install
                    877:      such changes because we have to study them very carefully.  Of
                    878:      course, a good explanation of the reasoning by which you concluded
                    879:      the change was correct can help convince us.
                    880: 
                    881:      The safest changes are changes to the configuration files for a
                    882:      particular machine.  These are safe because they can't create new
                    883:      bugs on other machines.
                    884: 
                    885:      Please help us keep up with the workload by designing the patch in
                    886:      a form that is good to install.
                    887: 
                    888: 
                    889: File: gcc.info,  Node: Service,  Next: VMS,  Prev: Bugs,  Up: Top
                    890: 
                    891: How To Get Help with GNU CC
                    892: ***************************
                    893: 
                    894:    If you need help installing, using or changing GNU CC, there are two
                    895: ways to find it:
                    896: 
                    897:    * Send a message to a suitable network mailing list.  First try
                    898:      `[email protected]', and if that brings no response, try
                    899:      `[email protected]'.
                    900: 
                    901:    * Look in the service directory for someone who might help you for a
                    902:      fee.  The service directory is found in the file named `SERVICE'
                    903:      in the GNU CC distribution.
1.1.1.6   root      904: 
                    905: 
1.1.1.8   root      906: File: gcc.info,  Node: VMS,  Next: Portability,  Prev: Service,  Up: Top
1.1.1.6   root      907: 
1.1.1.8   root      908: Using GNU CC on VMS
                    909: *******************
1.1.1.6   root      910: 
1.1.1.8   root      911:    Here is how to use GNU CC on VMS.
                    912: 
                    913: * Menu:
                    914: 
                    915: * Include Files and VMS::  Where the preprocessor looks for the include files.
                    916: * Global Declarations::    How to do globaldef, globalref and globalvalue with
                    917:                            GNU CC.
                    918: * VMS Misc::              Misc information.
1.1.1.3   root      919: 
                    920: 
1.1.1.8   root      921: File: gcc.info,  Node: Include Files and VMS,  Next: Global Declarations,  Up: VMS
1.1.1.3   root      922: 
1.1.1.8   root      923: Include Files and VMS
                    924: =====================
1.1.1.3   root      925: 
1.1.1.8   root      926:    Due to the differences between the filesystems of Unix and VMS, GNU
                    927: CC attempts to translate file names in `#include' into names that VMS
                    928: will understand.  The basic strategy is to prepend a prefix to the
                    929: specification of the include file, convert the whole filename to a VMS
                    930: filename, and then try to open the file.  GNU CC tries various prefixes
                    931: one by one until one of them succeeds:
                    932: 
                    933:   1. The first prefix is the `GNU_CC_INCLUDE:' logical name: this is
                    934:      where GNU C header files are traditionally stored.  If you wish to
                    935:      store header files in non-standard locations, then you can assign
                    936:      the logical `GNU_CC_INCLUDE' to be a search list, where each
                    937:      element of the list is suitable for use with a rooted logical.
                    938: 
                    939:   2. The next prefix tried is `SYS$SYSROOT:[SYSLIB.]'.  This is where
                    940:      VAX-C header files are traditionally stored.
                    941: 
                    942:   3. If the include file specification by itself is a valid VMS
                    943:      filename, the preprocessor then uses this name with no prefix in
                    944:      an attempt to open the include file.
                    945: 
                    946:   4. If the file specification is not a valid VMS filename (i.e. does
                    947:      not contain a device or a directory specifier, and contains a `/'
                    948:      character), the preprocessor tries to convert it from Unix syntax
                    949:      to VMS syntax.
                    950: 
                    951:      Conversion works like this: the first directory name becomes a
                    952:      device, and the rest of the directories are converted into
                    953:      VMS-format directory names.  For example, the name `X11/foobar.h'
                    954:      is translated to `X11:[000000]foobar.h' or `X11:foobar.h',
                    955:      whichever one can be opened.  This strategy allows you to assign a
                    956:      logical name to point to the actual location of the header files.
                    957: 
                    958:   5. If none of these strategies succeeds, the `#include' fails.
                    959: 
                    960:    Include directives of the form:
                    961: 
                    962:      #include foobar
                    963: 
                    964: are a common source of incompatibility between VAX-C and GNU CC.  VAX-C
                    965: treats this much like a standard `#include <foobar.h>' directive.  That
                    966: is incompatible with the ANSI C behavior implemented by GNU CC: to
                    967: expand the name `foobar' as a macro.  Macro expansion should eventually
                    968: yield one of the two standard formats for `#include':
                    969: 
                    970:      #include "FILE"
                    971:      #include <FILE>
                    972: 
                    973:    If you have this problem, the best solution is to modify the source
                    974: to convert the `#include' directives to one of the two standard forms.
                    975: That will work with either compiler.  If you want a quick and dirty fix,
                    976: define the file names as macros with the proper expansion, like this:
                    977: 
                    978:      #define stdio <stdio.h>
                    979: 
                    980: This will work, as long as the name doesn't conflict with anything else
                    981: in the program.
                    982: 
                    983:    Another source of incompatibility is that VAX-C assumes that:
                    984: 
                    985:      #include "foobar"
                    986: 
                    987: is actually asking for the file `foobar.h'.  GNU CC does not make this
                    988: assumption, and instead takes what you ask for literally; it tries to
                    989: read the file `foobar'.  The best way to avoid this problem is to
                    990: always specify the desired file extension in your include directives.
                    991: 
                    992:    GNU CC for VMS is distributed with a set of include files that is
                    993: sufficient to compile most general purpose programs.  Even though the
                    994: GNU CC distribution does not contain header files to define constants
                    995: and structures for some VMS system-specific functions, there is no
                    996: reason why you cannot use GNU CC with any of these functions.  You first
                    997: may have to generate or create header files, either by using the public
                    998: domain utility `UNSDL' (which can be found on a DECUS tape), or by
                    999: extracting the relevant modules from one of the system macro libraries,
                   1000: and using an editor to construct a C header file.
                   1001: 
                   1002:    A `#include' file name cannot contain a DECNET node name.  The
                   1003: preprocessor reports an I/O error if you attempt to use a node name,
                   1004: whether explicitly, or implicitly via a logical name.
                   1005: 
                   1006: 
                   1007: File: gcc.info,  Node: Global Declarations,  Next: VMS Misc,  Prev: Include Files and VMS,  Up: VMS
1.1.1.5   root     1008: 
1.1.1.8   root     1009: Global Declarations and VMS
                   1010: ===========================
1.1.1.3   root     1011: 
1.1.1.8   root     1012:    GNU CC does not provide the `globalref', `globaldef' and
                   1013: `globalvalue' keywords of VAX-C.  You can get the same effect with an
                   1014: obscure feature of GAS, the GNU assembler.  (This requires GAS version
                   1015: 1.39 or later.)  The following macros allow you to use this feature in
                   1016: a fairly natural way:
                   1017: 
                   1018:      #ifdef __GNUC__
                   1019:      #define GLOBALREF(TYPE,NAME)                      \
                   1020:        TYPE NAME                                       \
                   1021:        asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME)
                   1022:      #define GLOBALDEF(TYPE,NAME,VALUE)                \
                   1023:        TYPE NAME                                       \
                   1024:        asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) \
                   1025:          = VALUE
                   1026:      #define GLOBALVALUEREF(TYPE,NAME)                 \
                   1027:        const TYPE NAME[1]                              \
                   1028:        asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)
                   1029:      #define GLOBALVALUEDEF(TYPE,NAME,VALUE)           \
                   1030:        const TYPE NAME[1]                              \
                   1031:        asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)  \
                   1032:          = {VALUE}
                   1033:      #else
                   1034:      #define GLOBALREF(TYPE,NAME) \
                   1035:        globalref TYPE NAME
                   1036:      #define GLOBALDEF(TYPE,NAME,VALUE) \
                   1037:        globaldef TYPE NAME = VALUE
                   1038:      #define GLOBALVALUEDEF(TYPE,NAME,VALUE) \
                   1039:        globalvalue TYPE NAME = VALUE
                   1040:      #define GLOBALVALUEREF(TYPE,NAME) \
                   1041:        globalvalue TYPE NAME
                   1042:      #endif
                   1043: 
                   1044: (The `_$$PsectAttributes_GLOBALSYMBOL' prefix at the start of the name
                   1045: is removed by the assembler, after it has modified the attributes of
                   1046: the symbol).  These macros are provided in the VMS binaries
                   1047: distribution in a header file `GNU_HACKS.H'.  An example of the usage
                   1048: is:
                   1049: 
                   1050:      GLOBALREF (int, ijk);
                   1051:      GLOBALDEF (int, jkl, 0);
                   1052: 
                   1053:    The macros `GLOBALREF' and `GLOBALDEF' cannot be used
                   1054: straightforwardly for arrays, since there is no way to insert the array
                   1055: dimension into the declaration at the right place.  However, you can
                   1056: declare an array with these macros if you first define a typedef for the
                   1057: array type, like this:
                   1058: 
                   1059:      typedef int intvector[10];
                   1060:      GLOBALREF (intvector, foo);
                   1061: 
                   1062:    Array and structure initializers will also break the macros; you can
                   1063: define the initializer to be a macro of its own, or you can expand the
                   1064: `GLOBALDEF' macro by hand.  You may find a case where you wish to use
                   1065: the `GLOBALDEF' macro with a large array, but you are not interested in
                   1066: explicitly initializing each element of the array.  In such cases you
                   1067: can use an initializer like: `{0,}', which will initialize the entire
                   1068: array to `0'.
                   1069: 
                   1070:    A shortcoming of this implementation is that a variable declared with
                   1071: `GLOBALVALUEREF' or `GLOBALVALUEDEF' is always an array.  For example,
                   1072: the declaration:
                   1073: 
                   1074:      GLOBALVALUEREF(int, ijk);
                   1075: 
                   1076: declares the variable `ijk' as an array of type `int [1]'.  This is
                   1077: done because a globalvalue is actually a constant; its "value" is what
                   1078: the linker would normally consider an address.  That is not how an
                   1079: integer value works in C, but it is how an array works.  So treating
                   1080: the symbol as an array name gives consistent results--with the
                   1081: exception that the value seems to have the wrong type.  *Don't try to
                   1082: access an element of the array.*  It doesn't have any elements.  The
                   1083: array "address" may not be the address of actual storage.
                   1084: 
                   1085:    The fact that the symbol is an array may lead to warnings where the
                   1086: variable is used.  Insert type casts to avoid the warnings.  Here is an
                   1087: example; it takes advantage of the ANSI C feature allowing macros that
                   1088: expand to use the same name as the macro itself.
                   1089: 
                   1090:      GLOBALVALUEREF (int, ss$_normal);
                   1091:      GLOBALVALUEDEF (int, xyzzy,123);
                   1092:      #ifdef __GNUC__
                   1093:      #define ss$_normal ((int) ss$_normal)
                   1094:      #define xyzzy ((int) xyzzy)
                   1095:      #endif
                   1096: 
                   1097:    Don't use `globaldef' or `globalref' with a variable whose type is
                   1098: an enumeration type; this is not implemented.  Instead, make the
                   1099: variable an integer, and use a `globalvaluedef' for each of the
                   1100: enumeration values.  An example of this would be:
                   1101: 
                   1102:      #ifdef __GNUC__
                   1103:      GLOBALDEF (int, color, 0);
                   1104:      GLOBALVALUEDEF (int, RED, 0);
                   1105:      GLOBALVALUEDEF (int, BLUE, 1);
                   1106:      GLOBALVALUEDEF (int, GREEN, 3);
                   1107:      #else
                   1108:      enum globaldef color {RED, BLUE, GREEN = 3};
                   1109:      #endif
1.1.1.3   root     1110: 

unix.superglobalmegacorp.com

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