Bug#672411: gcc-4.7: Inlining error in combination with FORTIFY_SOURCE
Package: gcc-4.7
Version: 4.7.0-8
Severity: normal
Hello,
this bug reports originates from #667406 in v4l-utils.
I've attached a minimal testcase for the bug. Maybe it's related to
upstream bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33763
Problem description:
libv4l provides a preloadable library that intercepts calls like
open, open64, etc.
The library provides the open and open64 symbols. The replacement
open64 function tries to call the replacement open function with
somewhat changed arguments. But this code fails to compile with:
inlining failed in call to always_inline ‘open’: function not inlinable
this is due to the declaration of the libc open() in fcntl2.h which has a
always inline attibute.
Full source can be found here:
http://git.linuxtv.org/v4l-utils.git/blob/HEAD:/lib/libv4l2/v4l2convert.c
Is this a compilier bug? Without the FORTIFY_SOURCE define the error is
gone.
Thanks,
Gregor
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.0-2-amd64 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages gcc-4.7 depends on:
ii binutils 2.22-6
ii cpp-4.7 4.7.0-8
ii gcc-4.7-base 4.7.0-8
ii libc6 2.13-27
ii libgcc1 1:4.7.0-8
ii libgmp10 2:5.0.4+dfsg-1
ii libgomp1 4.7.0-8
ii libitm1 4.7.0-8
ii libmpc2 0.9-4
ii libmpfr4 3.1.0-4
ii libquadmath0 4.7.0-8
ii zlib1g 1:1.2.6.dfsg-2
Versions of packages gcc-4.7 recommends:
ii libc6-dev 2.13-27
Versions of packages gcc-4.7 suggests:
pn binutils-gold <none>
pn gcc-4.7-doc <none>
pn gcc-4.7-locales <none>
pn gcc-4.7-multilib <none>
pn libgcc1-dbg <none>
pn libgomp1-dbg <none>
pn libitm1-dbg <none>
pn libmudflap0-4.7-dev <none>
pn libmudflap0-dbg <none>
pn libquadmath0-dbg <none>
-- no debconf information
/*
gcc-4.7 -c testcase.c -O2 -D_FORTIFY_SOURCE=2
*/
#include <fcntl.h>
int open(const char *file, int oflag, ...)
{
return -1;
}
#ifdef linux
int open64(const char *file, int oflag, ...)
{
return open(file, oflag);
}
#endif
Reply to: