]> git.ipfire.org Git - people/ms/gcc.git/blame - gcc/doc/trouble.texi
**/*.texi: Reorder index entries
[people/ms/gcc.git] / gcc / doc / trouble.texi
CommitLineData
83ffe9cd 1@c Copyright (C) 1988-2023 Free Software Foundation, Inc.
d77de738
ML
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
d77de738 201@opindex fdollars-in-identifiers
f33d7a88 202@item
d77de738
ML
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
d77de738 591@cindex floating point precision
f33d7a88 592@item
d77de738
ML
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
d77de738 956@opindex fshort-enums
f33d7a88 957@item
d77de738
ML
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
d77de738
ML
1024@opindex ansi
1025@opindex std
f33d7a88 1026@item
d77de738
ML
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.