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