http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48525
Summary: -O0 produces incorrect results for inlined functions sharing the same name. Product: gcc Version: 4.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: jroel...@gmail.com When compiling multiple files with inline functions which share the same signature and name -O0 produces results inconsistent with -O1, -O2, and -O3 (which produce the expected result). %> g++ -v Using built-in specs. Target: i686-apple-darwin10 Configured with: /var/tmp/gcc/gcc-5666.3~123/src/configure --disable-checking --enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1 Thread model: posix gcc version 4.2.1 (Apple Inc. build 5666) (dot 3) %> cat double.cpp inline int sharedname(int a) { return a + a; } int doub(int a) { return sharedname(a); } %> cat square.cpp inline int sharedname(int a) { return a * a; } int square(int a) { return sharedname(a); } %> cat main.cpp #include "stdio.h" int square(int a); int doub(int a); int main(int argc, char*argv[]) { printf("square(3): %d\n", square(3)); printf("doub(3): %d\n", doub(3)); } %> g++ main.cpp double.cpp square.cpp -Wall -O3 && ./a.out square(3): 9 doub(3): 6 %> g++ main.cpp double.cpp square.cpp -Wall -O2 && ./a.out square(3): 9 doub(3): 6 %> g++ main.cpp double.cpp square.cpp -Wall -O1 && ./a.out square(3): 9 doub(3): 6 %> g++ main.cpp double.cpp square.cpp -Wall -O0 && ./a.out square(3): 6 doub(3): 6 Notice that the last version with -O0 enabled produces 6 instead of 9 for square(3).