GCC compiles and links a program with a function that should return a value, yet doesn't. This violates the definition of a value-returning function. See pp. 148 in "The C++ Programming Language: 3rd ed.".
GCC information: Using built-in specs. Target: i686-pc-linux-gnu Configured with: /var/tmp/portage/sys-devel/gcc-4.2.0/work/gcc-4.2.0/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.2.0 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.2.0/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.0 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.0/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.2.0/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.2.0/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libunwind-exceptions --disable-multilib --enable-libmudflap --disable-libssp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu Thread model: posix gcc version 4.2.0 (Gentoo 4.2.0 p1.4) GCC command invocation: g++ -o functionReturnMayham -Wall main.cpp Compiler Output: main.cpp: In function 'bool Func1(int)': main.cpp:41: warning: unused variable 'var1' main.cpp:43: warning: control reaches end of non-void function Example program: ====================START OF PROGRAM==================== /** ** \author Robert Miesen ** \date 09/04/2007 -- Time-stamp: \<09/13/2007\> ** \version 1.0 ** \file main.cpp ** \brief Contains code to demonstrate a bug in GCC: that it doesn't flag as an error cases where a function that should return a value doesn't. ** ** \remarks Input: ** - N/A. ** \remarks Output: ** - TBD. ** \remarks Exit Codes: ** - 0: Normal Execution ** ** Lessons Learned: ** - When compiling code, unless there is a complelling reason to do otherwise, compile with the -Wall option. This will catch a bunch of shady (and probably buggy) code automatically. **/ // // Function Prototypes: // bool Func1(int param1); int main( int argc, char *argv[] ) { return 0; } bool Func1(int param1) { int var1 = param1*param1; // Hay, I didn't specify a return value...this should not compile (but it does!) } ====================END OF PROGRAM==================== And wait, it gets worse! Just compile this sucker with -O2 optimizations and you get RANDOM RETURN VALUES from the call of Func1 (this is because Func1 "returns" whatever is in eax at call-time)! -- Summary: GCC Compiles C++ program containing value-returning functions that don't return a value Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bobby_miesen at yahoo dot com GCC build triplet: Linux 2.6.22-gentoo-r5 i686 Genuine Intel(R) CPU T2050 @ 1.60GHz GCC host triplet: Linux 2.6.22-gentoo-r5 i686 Genuine Intel(R) CPU T2050 @ 1.60GHz GCC target triplet: Linux 2.6.22-gentoo-r5 i686 Genuine Intel(R) CPU T2050 @ 1.60GHz http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33425