Hello, GCC, when compiling C code, seems to always generate out-of-line copy of any [C99] inline function that also happens to be a GCC builtin, resulting in link errors (see a test-case below). According to C99 standard, an out-of-line copy of a function should only be instantiated in those compilation unit(s) where the function is also declared 'extern'. Apparently, all builtin functions implicitly get 'extern' declaration that forces out-of-line copy of inline function in every compilation unit. Is it a bug of feature? If the latter, what is the way for a library to provide generic inline functions that might happen to be GCC builtins? $ cat inl.h inline int abs(int i) { return (i >= 0) ? i : -i; } $ cat a.c #include "inl.h" int main() { return 1; } $ cat b.c #include "inl.h" $ gcc a.c b.c /tmp/ccyZFKSx.o: In function `abs': b.c:(.text+0x0): multiple definition of `abs' /tmp/ccijz638.o:a.c:(.text+0x0): first defined here collect2: error: ld returned 1 exit status $ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i586-linux-gnu/4.9/lto-wrapper Target: i586-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --with-arch-32=i586 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i586-linux-gnu --host=i586-linux-gnu --target=i586-linux-gnu Thread model: posix gcc version 4.9.2 (Debian 4.9.2-10) $ -- Sergey.