trouble.texi revision 132718
1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2@c 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. 3@c This is part of the GCC manual. 4@c For copying conditions, see the file gcc.texi. 5 6@node Trouble 7@chapter Known Causes of Trouble with GCC 8@cindex bugs, known 9@cindex installation trouble 10@cindex known causes of trouble 11 12This section describes known problems that affect users of GCC@. Most 13of these are not GCC bugs per se---if they were, we would fix them. 14But the result for a user may be like the result of a bug. 15 16Some of these problems are due to bugs in other software, some are 17missing features that are too much work to add, and some are places 18where people's opinions differ as to what is best. 19 20@menu 21* Actual Bugs:: Bugs we will fix later. 22* Cross-Compiler Problems:: Common problems of cross compiling with GCC. 23* Interoperation:: Problems using GCC with other compilers, 24 and with certain linkers, assemblers and debuggers. 25* External Bugs:: Problems compiling certain programs. 26* Incompatibilities:: GCC is incompatible with traditional C. 27* Fixed Headers:: GCC uses corrected versions of system header files. 28 This is necessary, but doesn't always work smoothly. 29* Standard Libraries:: GCC uses the system C library, which might not be 30 compliant with the ISO C standard. 31* Disappointments:: Regrettable things we can't change, but not quite bugs. 32* C++ Misunderstandings:: Common misunderstandings with GNU C++. 33* Protoize Caveats:: Things to watch out for when using @code{protoize}. 34* Non-bugs:: Things we think are right, but some others disagree. 35* Warnings and Errors:: Which problems in your code get warnings, 36 and which get errors. 37@end menu 38 39@node Actual Bugs 40@section Actual Bugs We Haven't Fixed Yet 41 42@itemize @bullet 43@item 44The @code{fixincludes} script interacts badly with automounters; if the 45directory of system header files is automounted, it tends to be 46unmounted while @code{fixincludes} is running. This would seem to be a 47bug in the automounter. We don't know any good way to work around it. 48 49@item 50The @code{fixproto} script will sometimes add prototypes for the 51@code{sigsetjmp} and @code{siglongjmp} functions that reference the 52@code{jmp_buf} type before that type is defined. To work around this, 53edit the offending file and place the typedef in front of the 54prototypes. 55 56@item 57@opindex pedantic-errors 58When @option{-pedantic-errors} is specified, GCC will incorrectly give 59an error message when a function name is specified in an expression 60involving the comma operator. 61@end itemize 62 63@node Cross-Compiler Problems 64@section Cross-Compiler Problems 65 66You may run into problems with cross compilation on certain machines, 67for several reasons. 68 69@itemize @bullet 70@item 71Cross compilation can run into trouble for certain machines because 72some target machines' assemblers require floating point numbers to be 73written as @emph{integer} constants in certain contexts. 74 75The compiler writes these integer constants by examining the floating 76point value as an integer and printing that integer, because this is 77simple to write and independent of the details of the floating point 78representation. But this does not work if the compiler is running on 79a different machine with an incompatible floating point format, or 80even a different byte-ordering. 81 82In addition, correct constant folding of floating point values 83requires representing them in the target machine's format. 84(The C standard does not quite require this, but in practice 85it is the only way to win.) 86 87It is now possible to overcome these problems by defining macros such 88as @code{REAL_VALUE_TYPE}. But doing so is a substantial amount of 89work for each target machine. 90@xref{Cross-compilation,,Cross Compilation and Floating Point, 91gccint, GNU Compiler Collection (GCC) Internals}. 92 93@item 94At present, the program @file{mips-tfile} which adds debug 95support to object files on MIPS systems does not work in a cross 96compile environment. 97@end itemize 98 99@node Interoperation 100@section Interoperation 101 102This section lists various difficulties encountered in using GCC 103together with other compilers or with the assemblers, linkers, 104libraries and debuggers on certain systems. 105 106@itemize @bullet 107@item 108On many platforms, GCC supports a different ABI for C++ than do other 109compilers, so the object files compiled by GCC cannot be used with object 110files generated by another C++ compiler. 111 112An area where the difference is most apparent is name mangling. The use 113of different name mangling is intentional, to protect you from more subtle 114problems. 115Compilers differ as to many internal details of C++ implementation, 116including: how class instances are laid out, how multiple inheritance is 117implemented, and how virtual function calls are handled. If the name 118encoding were made the same, your programs would link against libraries 119provided from other compilers---but the programs would then crash when 120run. Incompatible libraries are then detected at link time, rather than 121at run time. 122 123@item 124Older GDB versions sometimes fail to read the output of GCC version 1252. If you have trouble, get GDB version 4.4 or later. 126 127@item 128@cindex DBX 129DBX rejects some files produced by GCC, though it accepts similar 130constructs in output from PCC@. Until someone can supply a coherent 131description of what is valid DBX input and what is not, there is 132nothing that can be done about these problems. 133 134@item 135The GNU assembler (GAS) does not support PIC@. To generate PIC code, you 136must use some other assembler, such as @file{/bin/as}. 137 138@item 139On some BSD systems, including some versions of Ultrix, use of profiling 140causes static variable destructors (currently used only in C++) not to 141be run. 142 143@ignore 144@cindex @code{vfork}, for the Sun-4 145@item 146There is a bug in @code{vfork} on the Sun-4 which causes the registers 147of the child process to clobber those of the parent. Because of this, 148programs that call @code{vfork} are likely to lose when compiled 149optimized with GCC when the child code alters registers which contain 150C variables in the parent. This affects variables which are live in the 151parent across the call to @code{vfork}. 152 153If you encounter this, you can work around the problem by declaring 154variables @code{volatile} in the function that calls @code{vfork}, until 155the problem goes away, or by not declaring them @code{register} and not 156using @option{-O} for those source files. 157@end ignore 158 159@item 160On some SGI systems, when you use @option{-lgl_s} as an option, 161it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}. 162Naturally, this does not happen when you use GCC@. 163You must specify all three options explicitly. 164 165@item 166On a SPARC, GCC aligns all values of type @code{double} on an 8-byte 167boundary, and it expects every @code{double} to be so aligned. The Sun 168compiler usually gives @code{double} values 8-byte alignment, with one 169exception: function arguments of type @code{double} may not be aligned. 170 171As a result, if a function compiled with Sun CC takes the address of an 172argument of type @code{double} and passes this pointer of type 173@code{double *} to a function compiled with GCC, dereferencing the 174pointer may cause a fatal signal. 175 176One way to solve this problem is to compile your entire program with GCC@. 177Another solution is to modify the function that is compiled with 178Sun CC to copy the argument into a local variable; local variables 179are always properly aligned. A third solution is to modify the function 180that uses the pointer to dereference it via the following function 181@code{access_double} instead of directly with @samp{*}: 182 183@smallexample 184inline double 185access_double (double *unaligned_ptr) 186@{ 187 union d2i @{ double d; int i[2]; @}; 188 189 union d2i *p = (union d2i *) unaligned_ptr; 190 union d2i u; 191 192 u.i[0] = p->i[0]; 193 u.i[1] = p->i[1]; 194 195 return u.d; 196@} 197@end smallexample 198 199@noindent 200Storing into the pointer can be done likewise with the same union. 201 202@item 203On Solaris, the @code{malloc} function in the @file{libmalloc.a} library 204may allocate memory that is only 4 byte aligned. Since GCC on the 205SPARC assumes that doubles are 8 byte aligned, this may result in a 206fatal signal if doubles are stored in memory allocated by the 207@file{libmalloc.a} library. 208 209The solution is to not use the @file{libmalloc.a} library. Use instead 210@code{malloc} and related functions from @file{libc.a}; they do not have 211this problem. 212 213@item 214Sun forgot to include a static version of @file{libdl.a} with some 215versions of SunOS (mainly 4.1). This results in undefined symbols when 216linking static binaries (that is, if you use @option{-static}). If you 217see undefined symbols @code{_dlclose}, @code{_dlsym} or @code{_dlopen} 218when linking, compile and link against the file 219@file{mit/util/misc/dlsym.c} from the MIT version of X windows. 220 221@item 222The 128-bit long double format that the SPARC port supports currently 223works by using the architecturally defined quad-word floating point 224instructions. Since there is no hardware that supports these 225instructions they must be emulated by the operating system. Long 226doubles do not work in Sun OS versions 4.0.3 and earlier, because the 227kernel emulator uses an obsolete and incompatible format. Long doubles 228do not work in Sun OS version 4.1.1 due to a problem in a Sun library. 229Long doubles do work on Sun OS versions 4.1.2 and higher, but GCC 230does not enable them by default. Long doubles appear to work in Sun OS 2315.x (Solaris 2.x). 232 233@item 234On HP-UX version 9.01 on the HP PA, the HP compiler @code{cc} does not 235compile GCC correctly. We do not yet know why. However, GCC 236compiled on earlier HP-UX versions works properly on HP-UX 9.01 and can 237compile itself properly on 9.01. 238 239@item 240On the HP PA machine, ADB sometimes fails to work on functions compiled 241with GCC@. Specifically, it fails to work on functions that use 242@code{alloca} or variable-size arrays. This is because GCC doesn't 243generate HP-UX unwind descriptors for such functions. It may even be 244impossible to generate them. 245 246@item 247Debugging (@option{-g}) is not supported on the HP PA machine, unless you use 248the preliminary GNU tools. 249 250@item 251Taking the address of a label may generate errors from the HP-UX 252PA assembler. GAS for the PA does not have this problem. 253 254@item 255Using floating point parameters for indirect calls to static functions 256will not work when using the HP assembler. There simply is no way for GCC 257to specify what registers hold arguments for static functions when using 258the HP assembler. GAS for the PA does not have this problem. 259 260@item 261In extremely rare cases involving some very large functions you may 262receive errors from the HP linker complaining about an out of bounds 263unconditional branch offset. This used to occur more often in previous 264versions of GCC, but is now exceptionally rare. If you should run 265into it, you can work around by making your function smaller. 266 267@item 268GCC compiled code sometimes emits warnings from the HP-UX assembler of 269the form: 270 271@smallexample 272(warning) Use of GR3 when 273 frame >= 8192 may cause conflict. 274@end smallexample 275 276These warnings are harmless and can be safely ignored. 277 278@item 279On the IBM RS/6000, compiling code of the form 280 281@smallexample 282extern int foo; 283 284@dots{} foo @dots{} 285 286static int foo; 287@end smallexample 288 289@noindent 290will cause the linker to report an undefined symbol @code{foo}. 291Although this behavior differs from most other systems, it is not a 292bug because redefining an @code{extern} variable as @code{static} 293is undefined in ISO C@. 294 295@item 296In extremely rare cases involving some very large functions you may 297receive errors from the AIX Assembler complaining about a displacement 298that is too large. If you should run into it, you can work around by 299making your function smaller. 300 301@item 302The @file{libstdc++.a} library in GCC relies on the SVR4 dynamic 303linker semantics which merges global symbols between libraries and 304applications, especially necessary for C++ streams functionality. 305This is not the default behavior of AIX shared libraries and dynamic 306linking. @file{libstdc++.a} is built on AIX with ``runtime-linking'' 307enabled so that symbol merging can occur. To utilize this feature, 308the application linked with @file{libstdc++.a} must include the 309@option{-Wl,-brtl} flag on the link line. G++ cannot impose this 310because this option may interfere with the semantics of the user 311program and users may not always use @samp{g++} to link his or her 312application. Applications are not required to use the 313@option{-Wl,-brtl} flag on the link line---the rest of the 314@file{libstdc++.a} library which is not dependent on the symbol 315merging semantics will continue to function correctly. 316 317@item 318An application can interpose its own definition of functions for 319functions invoked by @file{libstdc++.a} with ``runtime-linking'' 320enabled on AIX. To accomplish this the application must be linked 321with ``runtime-linking'' option and the functions explicitly must be 322exported by the application (@option{-Wl,-brtl,-bE:exportfile}). 323 324@item 325AIX on the RS/6000 provides support (NLS) for environments outside of 326the United States. Compilers and assemblers use NLS to support 327locale-specific representations of various objects including 328floating-point numbers (@samp{.} vs @samp{,} for separating decimal 329fractions). There have been problems reported where the library linked 330with GCC does not produce the same floating-point formats that the 331assembler accepts. If you have this problem, set the @env{LANG} 332environment variable to @samp{C} or @samp{En_US}. 333 334@item 335@opindex fdollars-in-identifiers 336Even if you specify @option{-fdollars-in-identifiers}, 337you cannot successfully use @samp{$} in identifiers on the RS/6000 due 338to a restriction in the IBM assembler. GAS supports these 339identifiers. 340 341@cindex VAX calling convention 342@cindex Ultrix calling convention 343@item 344@opindex fcall-saved 345On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved 346by function calls. However, the C compiler uses conventions compatible 347with BSD Unix: registers 2 through 5 may be clobbered by function calls. 348 349GCC uses the same convention as the Ultrix C compiler. You can use 350these options to produce code compatible with the Fortran compiler: 351 352@smallexample 353-fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 354@end smallexample 355 356@item 357On the Alpha, you may get assembler errors about invalid syntax as a 358result of floating point constants. This is due to a bug in the C 359library functions @code{ecvt}, @code{fcvt} and @code{gcvt}. Given valid 360floating point numbers, they sometimes print @samp{NaN}. 361@end itemize 362 363@node External Bugs 364@section Problems Compiling Certain Programs 365 366@c prevent bad page break with this line 367Certain programs have problems compiling. 368 369@itemize @bullet 370@item 371Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2 372because of problems in DEC's versions of the X11 header files 373@file{X11/Xlib.h} and @file{X11/Xutil.h}. People recommend adding 374@option{-I/usr/include/mit} to use the MIT versions of the header files, 375or fixing the header files by adding this: 376 377@smallexample 378#ifdef __STDC__ 379#define NeedFunctionPrototypes 0 380#endif 381@end smallexample 382 383@item 384On various 386 Unix systems derived from System V, including SCO, ISC, 385and ESIX, you may get error messages about running out of virtual memory 386while compiling certain programs. 387 388You can prevent this problem by linking GCC with the GNU malloc 389(which thus replaces the malloc that comes with the system). GNU malloc 390is available as a separate package, and also in the file 391@file{src/gmalloc.c} in the GNU Emacs 19 distribution. 392 393If you have installed GNU malloc as a separate library package, use this 394option when you relink GCC: 395 396@smallexample 397MALLOC=/usr/local/lib/libgmalloc.a 398@end smallexample 399 400Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy 401the object file to @file{gmalloc.o} and use this option when you relink 402GCC: 403 404@smallexample 405MALLOC=gmalloc.o 406@end smallexample 407@end itemize 408 409@node Incompatibilities 410@section Incompatibilities of GCC 411@cindex incompatibilities of GCC 412@opindex traditional 413 414There are several noteworthy incompatibilities between GNU C and K&R 415(non-ISO) versions of C@. 416 417@itemize @bullet 418@cindex string constants 419@cindex read-only strings 420@cindex shared strings 421@item 422GCC normally makes string constants read-only. If several 423identical-looking string constants are used, GCC stores only one 424copy of the string. 425 426@cindex @code{mktemp}, and constant strings 427One consequence is that you cannot call @code{mktemp} with a string 428constant argument. The function @code{mktemp} always alters the 429string its argument points to. 430 431@cindex @code{sscanf}, and constant strings 432@cindex @code{fscanf}, and constant strings 433@cindex @code{scanf}, and constant strings 434Another consequence is that @code{sscanf} does not work on some systems 435when passed a string constant as its format control string or input. 436This is because @code{sscanf} incorrectly tries to write into the string 437constant. Likewise @code{fscanf} and @code{scanf}. 438 439@opindex fwritable-strings 440The best solution to these problems is to change the program to use 441@code{char}-array variables with initialization strings for these 442purposes instead of string constants. But if this is not possible, 443you can use the @option{-fwritable-strings} flag, which directs GCC 444to handle string constants the same way most C compilers do. 445 446@item 447@code{-2147483648} is positive. 448 449This is because 2147483648 cannot fit in the type @code{int}, so 450(following the ISO C rules) its data type is @code{unsigned long int}. 451Negating this value yields 2147483648 again. 452 453@item 454GCC does not substitute macro arguments when they appear inside of 455string constants. For example, the following macro in GCC 456 457@smallexample 458#define foo(a) "a" 459@end smallexample 460 461@noindent 462will produce output @code{"a"} regardless of what the argument @var{a} is. 463 464@cindex @code{setjmp} incompatibilities 465@cindex @code{longjmp} incompatibilities 466@item 467When you use @code{setjmp} and @code{longjmp}, the only automatic 468variables guaranteed to remain valid are those declared 469@code{volatile}. This is a consequence of automatic register 470allocation. Consider this function: 471 472@smallexample 473jmp_buf j; 474 475foo () 476@{ 477 int a, b; 478 479 a = fun1 (); 480 if (setjmp (j)) 481 return a; 482 483 a = fun2 (); 484 /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */ 485 return a + fun3 (); 486@} 487@end smallexample 488 489Here @code{a} may or may not be restored to its first value when the 490@code{longjmp} occurs. If @code{a} is allocated in a register, then 491its first value is restored; otherwise, it keeps the last value stored 492in it. 493 494@opindex W 495If you use the @option{-W} option with the @option{-O} option, you will 496get a warning when GCC thinks such a problem might be possible. 497 498@item 499Programs that use preprocessing directives in the middle of macro 500arguments do not work with GCC@. For example, a program like this 501will not work: 502 503@smallexample 504@group 505foobar ( 506#define luser 507 hack) 508@end group 509@end smallexample 510 511ISO C does not permit such a construct. 512 513@item 514K&R compilers allow comments to cross over an inclusion boundary 515(i.e.@: started in an include file and ended in the including file). 516 517@cindex external declaration scope 518@cindex scope of external declarations 519@cindex declaration scope 520@item 521Declarations of external variables and functions within a block apply 522only to the block containing the declaration. In other words, they 523have the same scope as any other declaration in the same place. 524 525In some other C compilers, a @code{extern} declaration affects all the 526rest of the file even if it happens within a block. 527 528@item 529In traditional C, you can combine @code{long}, etc., with a typedef name, 530as shown here: 531 532@smallexample 533typedef int foo; 534typedef long foo bar; 535@end smallexample 536 537In ISO C, this is not allowed: @code{long} and other type modifiers 538require an explicit @code{int}. 539 540@cindex typedef names as function parameters 541@item 542PCC allows typedef names to be used as function parameters. 543 544@item 545Traditional C allows the following erroneous pair of declarations to 546appear together in a given scope: 547 548@smallexample 549typedef int foo; 550typedef foo foo; 551@end smallexample 552 553@item 554GCC treats all characters of identifiers as significant. According to 555K&R-1 (2.2), ``No more than the first eight characters are significant, 556although more may be used.''. Also according to K&R-1 (2.2), ``An 557identifier is a sequence of letters and digits; the first character must 558be a letter. The underscore _ counts as a letter.'', but GCC also 559allows dollar signs in identifiers. 560 561@cindex whitespace 562@item 563PCC allows whitespace in the middle of compound assignment operators 564such as @samp{+=}. GCC, following the ISO standard, does not 565allow this. 566 567@cindex apostrophes 568@cindex ' 569@item 570GCC complains about unterminated character constants inside of 571preprocessing conditionals that fail. Some programs have English 572comments enclosed in conditionals that are guaranteed to fail; if these 573comments contain apostrophes, GCC will probably report an error. For 574example, this code would produce an error: 575 576@smallexample 577#if 0 578You can't expect this to work. 579#endif 580@end smallexample 581 582The best solution to such a problem is to put the text into an actual 583C comment delimited by @samp{/*@dots{}*/}. 584 585@item 586Many user programs contain the declaration @samp{long time ();}. In the 587past, the system header files on many systems did not actually declare 588@code{time}, so it did not matter what type your program declared it to 589return. But in systems with ISO C headers, @code{time} is declared to 590return @code{time_t}, and if that is not the same as @code{long}, then 591@samp{long time ();} is erroneous. 592 593The solution is to change your program to use appropriate system headers 594(@code{<time.h>} on systems with ISO C headers) and not to declare 595@code{time} if the system header files declare it, or failing that to 596use @code{time_t} as the return type of @code{time}. 597 598@cindex @code{float} as function value type 599@item 600When compiling functions that return @code{float}, PCC converts it to 601a double. GCC actually returns a @code{float}. If you are concerned 602with PCC compatibility, you should declare your functions to return 603@code{double}; you might as well say what you mean. 604 605@cindex structures 606@cindex unions 607@item 608When compiling functions that return structures or unions, GCC 609output code normally uses a method different from that used on most 610versions of Unix. As a result, code compiled with GCC cannot call 611a structure-returning function compiled with PCC, and vice versa. 612 613The method used by GCC is as follows: a structure or union which is 6141, 2, 4 or 8 bytes long is returned like a scalar. A structure or union 615with any other size is stored into an address supplied by the caller 616(usually in a special, fixed register, but on some machines it is passed 617on the stack). The target hook @code{TARGET_STRUCT_VALUE_RTX} 618tells GCC where to pass this address. 619 620By contrast, PCC on most target machines returns structures and unions 621of any size by copying the data into an area of static storage, and then 622returning the address of that storage as if it were a pointer value. 623The caller must copy the data from that memory area to the place where 624the value is wanted. GCC does not use this method because it is 625slower and nonreentrant. 626 627On some newer machines, PCC uses a reentrant convention for all 628structure and union returning. GCC on most of these machines uses a 629compatible convention when returning structures and unions in memory, 630but still returns small structures and unions in registers. 631 632@opindex fpcc-struct-return 633You can tell GCC to use a compatible convention for all structure and 634union returning with the option @option{-fpcc-struct-return}. 635 636@cindex preprocessing tokens 637@cindex preprocessing numbers 638@item 639GCC complains about program fragments such as @samp{0x74ae-0x4000} 640which appear to be two hexadecimal constants separated by the minus 641operator. Actually, this string is a single @dfn{preprocessing token}. 642Each such token must correspond to one token in C@. Since this does not, 643GCC prints an error message. Although it may appear obvious that what 644is meant is an operator and two values, the ISO C standard specifically 645requires that this be treated as erroneous. 646 647A @dfn{preprocessing token} is a @dfn{preprocessing number} if it 648begins with a digit and is followed by letters, underscores, digits, 649periods and @samp{e+}, @samp{e-}, @samp{E+}, @samp{E-}, @samp{p+}, 650@samp{p-}, @samp{P+}, or @samp{P-} character sequences. (In strict C89 651mode, the sequences @samp{p+}, @samp{p-}, @samp{P+} and @samp{P-} cannot 652appear in preprocessing numbers.) 653 654To make the above program fragment valid, place whitespace in front of 655the minus sign. This whitespace will end the preprocessing number. 656@end itemize 657 658@node Fixed Headers 659@section Fixed Header Files 660 661GCC needs to install corrected versions of some system header files. 662This is because most target systems have some header files that won't 663work with GCC unless they are changed. Some have bugs, some are 664incompatible with ISO C, and some depend on special features of other 665compilers. 666 667Installing GCC automatically creates and installs the fixed header 668files, by running a program called @code{fixincludes} (or for certain 669targets an alternative such as @code{fixinc.svr4}). Normally, you 670don't need to pay attention to this. But there are cases where it 671doesn't do the right thing automatically. 672 673@itemize @bullet 674@item 675If you update the system's header files, such as by installing a new 676system version, the fixed header files of GCC are not automatically 677updated. The easiest way to update them is to reinstall GCC@. (If 678you want to be clever, look in the makefile and you can find a 679shortcut.) 680 681@item 682On some systems, in particular SunOS 4, header file directories contain 683machine-specific symbolic links in certain places. This makes it 684possible to share most of the header files among hosts running the 685same version of SunOS 4 on different machine models. 686 687The programs that fix the header files do not understand this special 688way of using symbolic links; therefore, the directory of fixed header 689files is good only for the machine model used to build it. 690 691In SunOS 4, only programs that look inside the kernel will notice the 692difference between machine models. Therefore, for most purposes, you 693need not be concerned about this. 694 695It is possible to make separate sets of fixed header files for the 696different machine models, and arrange a structure of symbolic links so 697as to use the proper set, but you'll have to do this by hand. 698 699@item 700On Lynxos, GCC by default does not fix the header files. This is 701because bugs in the shell cause the @code{fixincludes} script to fail. 702 703This means you will encounter problems due to bugs in the system header 704files. It may be no comfort that they aren't GCC's fault, but it 705does mean that there's nothing for us to do about them. 706@end itemize 707 708@node Standard Libraries 709@section Standard Libraries 710 711@opindex Wall 712GCC by itself attempts to be a conforming freestanding implementation. 713@xref{Standards,,Language Standards Supported by GCC}, for details of 714what this means. Beyond the library facilities required of such an 715implementation, the rest of the C library is supplied by the vendor of 716the operating system. If that C library doesn't conform to the C 717standards, then your programs might get warnings (especially when using 718@option{-Wall}) that you don't expect. 719 720For example, the @code{sprintf} function on SunOS 4.1.3 returns 721@code{char *} while the C standard says that @code{sprintf} returns an 722@code{int}. The @code{fixincludes} program could make the prototype for 723this function match the Standard, but that would be wrong, since the 724function will still return @code{char *}. 725 726If you need a Standard compliant library, then you need to find one, as 727GCC does not provide one. The GNU C library (called @code{glibc}) 728provides ISO C, POSIX, BSD, SystemV and X/Open compatibility for 729GNU/Linux and HURD-based GNU systems; no recent version of it supports 730other systems, though some very old versions did. Version 2.2 of the 731GNU C library includes nearly complete C99 support. You could also ask 732your operating system vendor if newer libraries are available. 733 734@node Disappointments 735@section Disappointments and Misunderstandings 736 737These problems are perhaps regrettable, but we don't know any practical 738way around them. 739 740@itemize @bullet 741@item 742Certain local variables aren't recognized by debuggers when you compile 743with optimization. 744 745This occurs because sometimes GCC optimizes the variable out of 746existence. There is no way to tell the debugger how to compute the 747value such a variable ``would have had'', and it is not clear that would 748be desirable anyway. So GCC simply does not mention the eliminated 749variable when it writes debugging information. 750 751You have to expect a certain amount of disagreement between the 752executable and your source code, when you use optimization. 753 754@cindex conflicting types 755@cindex scope of declaration 756@item 757Users often think it is a bug when GCC reports an error for code 758like this: 759 760@smallexample 761int foo (struct mumble *); 762 763struct mumble @{ @dots{} @}; 764 765int foo (struct mumble *x) 766@{ @dots{} @} 767@end smallexample 768 769This code really is erroneous, because the scope of @code{struct 770mumble} in the prototype is limited to the argument list containing it. 771It does not refer to the @code{struct mumble} defined with file scope 772immediately below---they are two unrelated types with similar names in 773different scopes. 774 775But in the definition of @code{foo}, the file-scope type is used 776because that is available to be inherited. Thus, the definition and 777the prototype do not match, and you get an error. 778 779This behavior may seem silly, but it's what the ISO standard specifies. 780It is easy enough for you to make your code work by moving the 781definition of @code{struct mumble} above the prototype. It's not worth 782being incompatible with ISO C just to avoid an error for the example 783shown above. 784 785@item 786Accesses to bit-fields even in volatile objects works by accessing larger 787objects, such as a byte or a word. You cannot rely on what size of 788object is accessed in order to read or write the bit-field; it may even 789vary for a given bit-field according to the precise usage. 790 791If you care about controlling the amount of memory that is accessed, use 792volatile but do not use bit-fields. 793 794@item 795GCC comes with shell scripts to fix certain known problems in system 796header files. They install corrected copies of various header files in 797a special directory where only GCC will normally look for them. The 798scripts adapt to various systems by searching all the system header 799files for the problem cases that we know about. 800 801If new system header files are installed, nothing automatically arranges 802to update the corrected header files. You will have to reinstall GCC 803to fix the new header files. More specifically, go to the build 804directory and delete the files @file{stmp-fixinc} and 805@file{stmp-headers}, and the subdirectory @code{include}; then do 806@samp{make install} again. 807 808@item 809@cindex floating point precision 810On 68000 and x86 systems, for instance, you can get paradoxical results 811if you test the precise values of floating point numbers. For example, 812you can find that a floating point value which is not a NaN is not equal 813to itself. This results from the fact that the floating point registers 814hold a few more bits of precision than fit in a @code{double} in memory. 815Compiled code moves values between memory and floating point registers 816at its convenience, and moving them into memory truncates them. 817 818@opindex ffloat-store 819You can partially avoid this problem by using the @option{-ffloat-store} 820option (@pxref{Optimize Options}). 821 822@item 823On AIX and other platforms without weak symbol support, templates 824need to be instantiated explicitly and symbols for static members 825of templates will not be generated. 826 827@item 828On AIX, GCC scans object files and library archives for static 829constructors and destructors when linking an application before the 830linker prunes unreferenced symbols. This is necessary to prevent the 831AIX linker from mistakenly assuming that static constructor or 832destructor are unused and removing them before the scanning can occur. 833All static constructors and destructors found will be referenced even 834though the modules in which they occur may not be used by the program. 835This may lead to both increased executable size and unexpected symbol 836references. 837@end itemize 838 839@node C++ Misunderstandings 840@section Common Misunderstandings with GNU C++ 841 842@cindex misunderstandings in C++ 843@cindex surprises in C++ 844@cindex C++ misunderstandings 845C++ is a complex language and an evolving one, and its standard 846definition (the ISO C++ standard) was only recently completed. As a 847result, your C++ compiler may occasionally surprise you, even when its 848behavior is correct. This section discusses some areas that frequently 849give rise to questions of this sort. 850 851@menu 852* Static Definitions:: Static member declarations are not definitions 853* Name lookup:: Name lookup, templates, and accessing members of base classes 854* Temporaries:: Temporaries may vanish before you expect 855* Copy Assignment:: Copy Assignment operators copy virtual bases twice 856@end menu 857 858@node Static Definitions 859@subsection Declare @emph{and} Define Static Members 860 861@cindex C++ static data, declaring and defining 862@cindex static data in C++, declaring and defining 863@cindex declaring static data in C++ 864@cindex defining static data in C++ 865When a class has static data members, it is not enough to @emph{declare} 866the static member; you must also @emph{define} it. For example: 867 868@smallexample 869class Foo 870@{ 871 @dots{} 872 void method(); 873 static int bar; 874@}; 875@end smallexample 876 877This declaration only establishes that the class @code{Foo} has an 878@code{int} named @code{Foo::bar}, and a member function named 879@code{Foo::method}. But you still need to define @emph{both} 880@code{method} and @code{bar} elsewhere. According to the ISO 881standard, you must supply an initializer in one (and only one) source 882file, such as: 883 884@smallexample 885int Foo::bar = 0; 886@end smallexample 887 888Other C++ compilers may not correctly implement the standard behavior. 889As a result, when you switch to @command{g++} from one of these compilers, 890you may discover that a program that appeared to work correctly in fact 891does not conform to the standard: @command{g++} reports as undefined 892symbols any static data members that lack definitions. 893 894 895@node Name lookup 896@subsection Name lookup, templates, and accessing members of base classes 897 898@cindex base class members 899@cindex two-stage name lookup 900@cindex dependent name lookup 901 902The C++ standard prescribes that all names that are not dependent on 903template parameters are bound to their present definitions when parsing 904a template function or class.@footnote{The C++ standard just uses the 905term ``dependent'' for names that depend on the type or value of 906template parameters. This shorter term will also be used in the rest of 907this section.} Only names that are dependent are looked up at the point 908of instantiation. For example, consider 909 910@smallexample 911 void foo(double); 912 913 struct A @{ 914 template <typename T> 915 void f () @{ 916 foo (1); // 1 917 int i = N; // 2 918 T t; 919 t.bar(); // 3 920 foo (t); // 4 921 @} 922 923 static const int N; 924 @}; 925@end smallexample 926 927Here, the names @code{foo} and @code{N} appear in a context that does 928not depend on the type of @code{T}. The compiler will thus require that 929they are defined in the context of use in the template, not only before 930the point of instantiation, and will here use @code{::foo(double)} and 931@code{A::N}, respectively. In particular, it will convert the integer 932value to a @code{double} when passing it to @code{::foo(double)}. 933 934Conversely, @code{bar} and the call to @code{foo} in the fourth marked 935line are used in contexts that do depend on the type of @code{T}, so 936they are only looked up at the point of instantiation, and you can 937provide declarations for them after declaring the template, but before 938instantiating it. In particular, if you instantiate @code{A::f<int>}, 939the last line will call an overloaded @code{::foo(int)} if one was 940provided, even if after the declaration of @code{struct A}. 941 942This distinction between lookup of dependent and non-dependent names is 943called two-stage (or dependent) name lookup. G++ implements it 944since version 3.4. 945 946Two-stage name lookup sometimes leads to situations with behavior 947different from non-template codes. The most common is probably this: 948 949@smallexample 950 template <typename T> struct Base @{ 951 int i; 952 @}; 953 954 template <typename T> struct Derived : public Base<T> @{ 955 int get_i() @{ return i; @} 956 @}; 957@end smallexample 958 959In @code{get_i()}, @code{i} is not used in a dependent context, so the 960compiler will look for a name declared at the enclosing namespace scope 961(which is the global scope here). It will not look into the base class, 962since that is dependent and you may declare specializations of 963@code{Base} even after declaring @code{Derived}, so the compiler can't 964really know what @code{i} would refer to. If there is no global 965variable @code{i}, then you will get an error message. 966 967In order to make it clear that you want the member of the base class, 968you need to defer lookup until instantiation time, at which the base 969class is known. For this, you need to access @code{i} in a dependent 970context, by either using @code{this->i} (remember that @code{this} is of 971type @code{Derived<T>*}, so is obviously dependent), or using 972@code{Base<T>::i}. Alternatively, @code{Base<T>::i} might be brought 973into scope by a @code{using}-declaration. 974 975Another, similar example involves calling member functions of a base 976class: 977 978@smallexample 979 template <typename T> struct Base @{ 980 int f(); 981 @}; 982 983 template <typename T> struct Derived : Base<T> @{ 984 int g() @{ return f(); @}; 985 @}; 986@end smallexample 987 988Again, the call to @code{f()} is not dependent on template arguments 989(there are no arguments that depend on the type @code{T}, and it is also 990not otherwise specified that the call should be in a dependent context). 991Thus a global declaration of such a function must be available, since 992the one in the base class is not visible until instantiation time. The 993compiler will consequently produce the following error message: 994 995@smallexample 996 x.cc: In member function `int Derived<T>::g()': 997 x.cc:6: error: there are no arguments to `f' that depend on a template 998 parameter, so a declaration of `f' must be available 999 x.cc:6: error: (if you use `-fpermissive', G++ will accept your code, but 1000 allowing the use of an undeclared name is deprecated) 1001@end smallexample 1002 1003To make the code valid either use @code{this->f()}, or 1004@code{Base<T>::f()}. Using the @code{-fpermissive} flag will also let 1005the compiler accept the code, by marking all function calls for which no 1006declaration is visible at the time of definition of the template for 1007later lookup at instantiation time, as if it were a dependent call. 1008We do not recommend using @code{-fpermissive} to work around invalid 1009code, and it will also only catch cases where functions in base classes 1010are called, not where variables in base classes are used (as in the 1011example above). 1012 1013Note that some compilers (including G++ versions prior to 3.4) get these 1014examples wrong and accept above code without an error. Those compilers 1015do not implement two-stage name lookup correctly. 1016 1017 1018@node Temporaries 1019@subsection Temporaries May Vanish Before You Expect 1020 1021@cindex temporaries, lifetime of 1022@cindex portions of temporary objects, pointers to 1023It is dangerous to use pointers or references to @emph{portions} of a 1024temporary object. The compiler may very well delete the object before 1025you expect it to, leaving a pointer to garbage. The most common place 1026where this problem crops up is in classes like string classes, 1027especially ones that define a conversion function to type @code{char *} 1028or @code{const char *}---which is one reason why the standard 1029@code{string} class requires you to call the @code{c_str} member 1030function. However, any class that returns a pointer to some internal 1031structure is potentially subject to this problem. 1032 1033For example, a program may use a function @code{strfunc} that returns 1034@code{string} objects, and another function @code{charfunc} that 1035operates on pointers to @code{char}: 1036 1037@smallexample 1038string strfunc (); 1039void charfunc (const char *); 1040 1041void 1042f () 1043@{ 1044 const char *p = strfunc().c_str(); 1045 @dots{} 1046 charfunc (p); 1047 @dots{} 1048 charfunc (p); 1049@} 1050@end smallexample 1051 1052@noindent 1053In this situation, it may seem reasonable to save a pointer to the C 1054string returned by the @code{c_str} member function and use that rather 1055than call @code{c_str} repeatedly. However, the temporary string 1056created by the call to @code{strfunc} is destroyed after @code{p} is 1057initialized, at which point @code{p} is left pointing to freed memory. 1058 1059Code like this may run successfully under some other compilers, 1060particularly obsolete cfront-based compilers that delete temporaries 1061along with normal local variables. However, the GNU C++ behavior is 1062standard-conforming, so if your program depends on late destruction of 1063temporaries it is not portable. 1064 1065The safe way to write such code is to give the temporary a name, which 1066forces it to remain until the end of the scope of the name. For 1067example: 1068 1069@smallexample 1070string& tmp = strfunc (); 1071charfunc (tmp.c_str ()); 1072@end smallexample 1073 1074@node Copy Assignment 1075@subsection Implicit Copy-Assignment for Virtual Bases 1076 1077When a base class is virtual, only one subobject of the base class 1078belongs to each full object. Also, the constructors and destructors are 1079invoked only once, and called from the most-derived class. However, such 1080objects behave unspecified when being assigned. For example: 1081 1082@smallexample 1083struct Base@{ 1084 char *name; 1085 Base(char *n) : name(strdup(n))@{@} 1086 Base& operator= (const Base& other)@{ 1087 free (name); 1088 name = strdup (other.name); 1089 @} 1090@}; 1091 1092struct A:virtual Base@{ 1093 int val; 1094 A():Base("A")@{@} 1095@}; 1096 1097struct B:virtual Base@{ 1098 int bval; 1099 B():Base("B")@{@} 1100@}; 1101 1102struct Derived:public A, public B@{ 1103 Derived():Base("Derived")@{@} 1104@}; 1105 1106void func(Derived &d1, Derived &d2) 1107@{ 1108 d1 = d2; 1109@} 1110@end smallexample 1111 1112The C++ standard specifies that @samp{Base::Base} is only called once 1113when constructing or copy-constructing a Derived object. It is 1114unspecified whether @samp{Base::operator=} is called more than once when 1115the implicit copy-assignment for Derived objects is invoked (as it is 1116inside @samp{func} in the example). 1117 1118G++ implements the ``intuitive'' algorithm for copy-assignment: assign all 1119direct bases, then assign all members. In that algorithm, the virtual 1120base subobject can be encountered more than once. In the example, copying 1121proceeds in the following order: @samp{val}, @samp{name} (via 1122@code{strdup}), @samp{bval}, and @samp{name} again. 1123 1124If application code relies on copy-assignment, a user-defined 1125copy-assignment operator removes any uncertainties. With such an 1126operator, the application can define whether and how the virtual base 1127subobject is assigned. 1128 1129@node Protoize Caveats 1130@section Caveats of using @command{protoize} 1131 1132The conversion programs @command{protoize} and @command{unprotoize} can 1133sometimes change a source file in a way that won't work unless you 1134rearrange it. 1135 1136@itemize @bullet 1137@item 1138@command{protoize} can insert references to a type name or type tag before 1139the definition, or in a file where they are not defined. 1140 1141If this happens, compiler error messages should show you where the new 1142references are, so fixing the file by hand is straightforward. 1143 1144@item 1145There are some C constructs which @command{protoize} cannot figure out. 1146For example, it can't determine argument types for declaring a 1147pointer-to-function variable; this you must do by hand. @command{protoize} 1148inserts a comment containing @samp{???} each time it finds such a 1149variable; so you can find all such variables by searching for this 1150string. ISO C does not require declaring the argument types of 1151pointer-to-function types. 1152 1153@item 1154Using @command{unprotoize} can easily introduce bugs. If the program 1155relied on prototypes to bring about conversion of arguments, these 1156conversions will not take place in the program without prototypes. 1157One case in which you can be sure @command{unprotoize} is safe is when 1158you are removing prototypes that were made with @command{protoize}; if 1159the program worked before without any prototypes, it will work again 1160without them. 1161 1162@opindex Wconversion 1163You can find all the places where this problem might occur by compiling 1164the program with the @option{-Wconversion} option. It prints a warning 1165whenever an argument is converted. 1166 1167@item 1168Both conversion programs can be confused if there are macro calls in and 1169around the text to be converted. In other words, the standard syntax 1170for a declaration or definition must not result from expanding a macro. 1171This problem is inherent in the design of C and cannot be fixed. If 1172only a few functions have confusing macro calls, you can easily convert 1173them manually. 1174 1175@item 1176@command{protoize} cannot get the argument types for a function whose 1177definition was not actually compiled due to preprocessing conditionals. 1178When this happens, @command{protoize} changes nothing in regard to such 1179a function. @command{protoize} tries to detect such instances and warn 1180about them. 1181 1182You can generally work around this problem by using @command{protoize} step 1183by step, each time specifying a different set of @option{-D} options for 1184compilation, until all of the functions have been converted. There is 1185no automatic way to verify that you have got them all, however. 1186 1187@item 1188Confusion may result if there is an occasion to convert a function 1189declaration or definition in a region of source code where there is more 1190than one formal parameter list present. Thus, attempts to convert code 1191containing multiple (conditionally compiled) versions of a single 1192function header (in the same vicinity) may not produce the desired (or 1193expected) results. 1194 1195If you plan on converting source files which contain such code, it is 1196recommended that you first make sure that each conditionally compiled 1197region of source code which contains an alternative function header also 1198contains at least one additional follower token (past the final right 1199parenthesis of the function header). This should circumvent the 1200problem. 1201 1202@item 1203@command{unprotoize} can become confused when trying to convert a function 1204definition or declaration which contains a declaration for a 1205pointer-to-function formal argument which has the same name as the 1206function being defined or declared. We recommend you avoid such choices 1207of formal parameter names. 1208 1209@item 1210You might also want to correct some of the indentation by hand and break 1211long lines. (The conversion programs don't write lines longer than 1212eighty characters in any case.) 1213@end itemize 1214 1215@node Non-bugs 1216@section Certain Changes We Don't Want to Make 1217 1218This section lists changes that people frequently request, but which 1219we do not make because we think GCC is better without them. 1220 1221@itemize @bullet 1222@item 1223Checking the number and type of arguments to a function which has an 1224old-fashioned definition and no prototype. 1225 1226Such a feature would work only occasionally---only for calls that appear 1227in the same file as the called function, following the definition. The 1228only way to check all calls reliably is to add a prototype for the 1229function. But adding a prototype eliminates the motivation for this 1230feature. So the feature is not worthwhile. 1231 1232@item 1233Warning about using an expression whose type is signed as a shift count. 1234 1235Shift count operands are probably signed more often than unsigned. 1236Warning about this would cause far more annoyance than good. 1237 1238@item 1239Warning about assigning a signed value to an unsigned variable. 1240 1241Such assignments must be very common; warning about them would cause 1242more annoyance than good. 1243 1244@item 1245Warning when a non-void function value is ignored. 1246 1247C contains many standard functions that return a value that most 1248programs choose to ignore. One obvious example is @code{printf}. 1249Warning about this practice only leads the defensive programmer to 1250clutter programs with dozens of casts to @code{void}. Such casts are 1251required so frequently that they become visual noise. Writing those 1252casts becomes so automatic that they no longer convey useful 1253information about the intentions of the programmer. For functions 1254where the return value should never be ignored, use the 1255@code{warn_unused_result} function attribute (@pxref{Function 1256Attributes}). 1257 1258@item 1259@opindex fshort-enums 1260Making @option{-fshort-enums} the default. 1261 1262This would cause storage layout to be incompatible with most other C 1263compilers. And it doesn't seem very important, given that you can get 1264the same result in other ways. The case where it matters most is when 1265the enumeration-valued object is inside a structure, and in that case 1266you can specify a field width explicitly. 1267 1268@item 1269Making bit-fields unsigned by default on particular machines where ``the 1270ABI standard'' says to do so. 1271 1272The ISO C standard leaves it up to the implementation whether a bit-field 1273declared plain @code{int} is signed or not. This in effect creates two 1274alternative dialects of C@. 1275 1276@opindex fsigned-bitfields 1277@opindex funsigned-bitfields 1278The GNU C compiler supports both dialects; you can specify the signed 1279dialect with @option{-fsigned-bitfields} and the unsigned dialect with 1280@option{-funsigned-bitfields}. However, this leaves open the question of 1281which dialect to use by default. 1282 1283Currently, the preferred dialect makes plain bit-fields signed, because 1284this is simplest. Since @code{int} is the same as @code{signed int} in 1285every other context, it is cleanest for them to be the same in bit-fields 1286as well. 1287 1288Some computer manufacturers have published Application Binary Interface 1289standards which specify that plain bit-fields should be unsigned. It is 1290a mistake, however, to say anything about this issue in an ABI@. This is 1291because the handling of plain bit-fields distinguishes two dialects of C@. 1292Both dialects are meaningful on every type of machine. Whether a 1293particular object file was compiled using signed bit-fields or unsigned 1294is of no concern to other object files, even if they access the same 1295bit-fields in the same data structures. 1296 1297A given program is written in one or the other of these two dialects. 1298The program stands a chance to work on most any machine if it is 1299compiled with the proper dialect. It is unlikely to work at all if 1300compiled with the wrong dialect. 1301 1302Many users appreciate the GNU C compiler because it provides an 1303environment that is uniform across machines. These users would be 1304inconvenienced if the compiler treated plain bit-fields differently on 1305certain machines. 1306 1307Occasionally users write programs intended only for a particular machine 1308type. On these occasions, the users would benefit if the GNU C compiler 1309were to support by default the same dialect as the other compilers on 1310that machine. But such applications are rare. And users writing a 1311program to run on more than one type of machine cannot possibly benefit 1312from this kind of compatibility. 1313 1314This is why GCC does and will treat plain bit-fields in the same 1315fashion on all types of machines (by default). 1316 1317There are some arguments for making bit-fields unsigned by default on all 1318machines. If, for example, this becomes a universal de facto standard, 1319it would make sense for GCC to go along with it. This is something 1320to be considered in the future. 1321 1322(Of course, users strongly concerned about portability should indicate 1323explicitly in each bit-field whether it is signed or not. In this way, 1324they write programs which have the same meaning in both C dialects.) 1325 1326@item 1327@opindex ansi 1328@opindex std 1329Undefining @code{__STDC__} when @option{-ansi} is not used. 1330 1331Currently, GCC defines @code{__STDC__} unconditionally. This provides 1332good results in practice. 1333 1334Programmers normally use conditionals on @code{__STDC__} to ask whether 1335it is safe to use certain features of ISO C, such as function 1336prototypes or ISO token concatenation. Since plain @command{gcc} supports 1337all the features of ISO C, the correct answer to these questions is 1338``yes''. 1339 1340Some users try to use @code{__STDC__} to check for the availability of 1341certain library facilities. This is actually incorrect usage in an ISO 1342C program, because the ISO C standard says that a conforming 1343freestanding implementation should define @code{__STDC__} even though it 1344does not have the library facilities. @samp{gcc -ansi -pedantic} is a 1345conforming freestanding implementation, and it is therefore required to 1346define @code{__STDC__}, even though it does not come with an ISO C 1347library. 1348 1349Sometimes people say that defining @code{__STDC__} in a compiler that 1350does not completely conform to the ISO C standard somehow violates the 1351standard. This is illogical. The standard is a standard for compilers 1352that claim to support ISO C, such as @samp{gcc -ansi}---not for other 1353compilers such as plain @command{gcc}. Whatever the ISO C standard says 1354is relevant to the design of plain @command{gcc} without @option{-ansi} only 1355for pragmatic reasons, not as a requirement. 1356 1357GCC normally defines @code{__STDC__} to be 1, and in addition 1358defines @code{__STRICT_ANSI__} if you specify the @option{-ansi} option, 1359or a @option{-std} option for strict conformance to some version of ISO C@. 1360On some hosts, system include files use a different convention, where 1361@code{__STDC__} is normally 0, but is 1 if the user specifies strict 1362conformance to the C Standard. GCC follows the host convention when 1363processing system include files, but when processing user files it follows 1364the usual GNU C convention. 1365 1366@item 1367Undefining @code{__STDC__} in C++. 1368 1369Programs written to compile with C++-to-C translators get the 1370value of @code{__STDC__} that goes with the C compiler that is 1371subsequently used. These programs must test @code{__STDC__} 1372to determine what kind of C preprocessor that compiler uses: 1373whether they should concatenate tokens in the ISO C fashion 1374or in the traditional fashion. 1375 1376These programs work properly with GNU C++ if @code{__STDC__} is defined. 1377They would not work otherwise. 1378 1379In addition, many header files are written to provide prototypes in ISO 1380C but not in traditional C@. Many of these header files can work without 1381change in C++ provided @code{__STDC__} is defined. If @code{__STDC__} 1382is not defined, they will all fail, and will all need to be changed to 1383test explicitly for C++ as well. 1384 1385@item 1386Deleting ``empty'' loops. 1387 1388Historically, GCC has not deleted ``empty'' loops under the 1389assumption that the most likely reason you would put one in a program is 1390to have a delay, so deleting them will not make real programs run any 1391faster. 1392 1393However, the rationale here is that optimization of a nonempty loop 1394cannot produce an empty one, which holds for C but is not always the 1395case for C++. 1396 1397@opindex funroll-loops 1398Moreover, with @option{-funroll-loops} small ``empty'' loops are already 1399removed, so the current behavior is both sub-optimal and inconsistent 1400and will change in the future. 1401 1402@item 1403Making side effects happen in the same order as in some other compiler. 1404 1405@cindex side effects, order of evaluation 1406@cindex order of evaluation, side effects 1407It is never safe to depend on the order of evaluation of side effects. 1408For example, a function call like this may very well behave differently 1409from one compiler to another: 1410 1411@smallexample 1412void func (int, int); 1413 1414int i = 2; 1415func (i++, i++); 1416@end smallexample 1417 1418There is no guarantee (in either the C or the C++ standard language 1419definitions) that the increments will be evaluated in any particular 1420order. Either increment might happen first. @code{func} might get the 1421arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}. 1422 1423@item 1424Not allowing structures with volatile fields in registers. 1425 1426Strictly speaking, there is no prohibition in the ISO C standard 1427against allowing structures with volatile fields in registers, but 1428it does not seem to make any sense and is probably not what you wanted 1429to do. So the compiler will give an error message in this case. 1430 1431@item 1432Making certain warnings into errors by default. 1433 1434Some ISO C testsuites report failure when the compiler does not produce 1435an error message for a certain program. 1436 1437@opindex pedantic-errors 1438ISO C requires a ``diagnostic'' message for certain kinds of invalid 1439programs, but a warning is defined by GCC to count as a diagnostic. If 1440GCC produces a warning but not an error, that is correct ISO C support. 1441If testsuites call this ``failure'', they should be run with the GCC 1442option @option{-pedantic-errors}, which will turn these warnings into 1443errors. 1444 1445@end itemize 1446 1447@node Warnings and Errors 1448@section Warning Messages and Error Messages 1449 1450@cindex error messages 1451@cindex warnings vs errors 1452@cindex messages, warning and error 1453The GNU compiler can produce two kinds of diagnostics: errors and 1454warnings. Each kind has a different purpose: 1455 1456@itemize @w{} 1457@item 1458@dfn{Errors} report problems that make it impossible to compile your 1459program. GCC reports errors with the source file name and line 1460number where the problem is apparent. 1461 1462@item 1463@dfn{Warnings} report other unusual conditions in your code that 1464@emph{may} indicate a problem, although compilation can (and does) 1465proceed. Warning messages also report the source file name and line 1466number, but include the text @samp{warning:} to distinguish them 1467from error messages. 1468@end itemize 1469 1470Warnings may indicate danger points where you should check to make sure 1471that your program really does what you intend; or the use of obsolete 1472features; or the use of nonstandard features of GNU C or C++. Many 1473warnings are issued only if you ask for them, with one of the @option{-W} 1474options (for instance, @option{-Wall} requests a variety of useful 1475warnings). 1476 1477@opindex pedantic 1478@opindex pedantic-errors 1479GCC always tries to compile your program if possible; it never 1480gratuitously rejects a program whose meaning is clear merely because 1481(for instance) it fails to conform to a standard. In some cases, 1482however, the C and C++ standards specify that certain extensions are 1483forbidden, and a diagnostic @emph{must} be issued by a conforming 1484compiler. The @option{-pedantic} option tells GCC to issue warnings in 1485such cases; @option{-pedantic-errors} says to make them errors instead. 1486This does not mean that @emph{all} non-ISO constructs get warnings 1487or errors. 1488 1489@xref{Warning Options,,Options to Request or Suppress Warnings}, for 1490more detail on these and related command-line options. 1491