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