1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2@c 1999, 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. 3@c This is part of the GCC manual. 4@c For copying conditions, see the file gcc.texi. 5 6@node Bugs 7@chapter Reporting Bugs 8@cindex bugs 9@cindex reporting bugs 10 11Your bug reports play an essential role in making GCC reliable. 12 13When you encounter a problem, the first thing to do is to see if it is 14already known. @xref{Trouble}. If it isn't known, then you should 15report the problem. 16 17@menu 18* Criteria: Bug Criteria. Have you really found a bug? 19* Reporting: Bug Reporting. How to report a bug effectively. 20* Known: Trouble. Known problems. 21* Help: Service. Where to ask for help. 22@end menu 23 24@node Bug Criteria,Bug Reporting,,Bugs 25@section Have You Found a Bug? 26@cindex bug criteria 27 28If you are not sure whether you have found a bug, here are some guidelines: 29 30@itemize @bullet 31@cindex fatal signal 32@cindex core dump 33@item 34If the compiler gets a fatal signal, for any input whatever, that is a 35compiler bug. Reliable compilers never crash. 36 37@cindex invalid assembly code 38@cindex assembly code, invalid 39@item 40If the compiler produces invalid assembly code, for any input whatever 41(except an @code{asm} statement), that is a compiler bug, unless the 42compiler reports errors (not just warnings) which would ordinarily 43prevent the assembler from being run. 44 45@cindex undefined behavior 46@cindex undefined function value 47@cindex increment operators 48@item 49If the compiler produces valid assembly code that does not correctly 50execute the input source code, that is a compiler bug. 51 52However, you must double-check to make sure, because you may have a 53program whose behavior is undefined, which happened by chance to give 54the desired results with another C or C++ compiler. 55 56For example, in many nonoptimizing compilers, you can write @samp{x;} 57at the end of a function instead of @samp{return x;}, with the same 58results. But the value of the function is undefined if @code{return} 59is omitted; it is not a bug when GCC produces different results. 60 61Problems often result from expressions with two increment operators, 62as in @code{f (*p++, *p++)}. Your previous compiler might have 63interpreted that expression the way you intended; GCC might 64interpret it another way. Neither compiler is wrong. The bug is 65in your code. 66 67After you have localized the error to a single source line, it should 68be easy to check for these things. If your program is correct and 69well defined, you have found a compiler bug. 70 71@item 72If the compiler produces an error message for valid input, that is a 73compiler bug. 74 75@cindex invalid input 76@item 77If the compiler does not produce an error message for invalid input, 78that is a compiler bug. However, you should note that your idea of 79``invalid input'' might be someone else's idea of ``an extension'' or 80``support for traditional practice''. 81 82@item 83If you are an experienced user of one of the languages GCC supports, your 84suggestions for improvement of GCC are welcome in any case. 85@end itemize 86 87@node Bug Reporting,,Bug Criteria,Bugs 88@section How and where to Report Bugs 89@cindex compiler bugs, reporting 90 91Bugs should be reported to the bug database at @value{BUGURL}. 92