[Bug c/86360] New: "inline" (and neither static nor extern) function not emitted.
dwmw2 at infradead dot org
gcc-bugzilla@gcc.gnu.org
Fri Jun 29 09:39:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86360
Bug ID: 86360
Summary: "inline" (and neither static nor extern) function not
emitted.
Product: gcc
Version: 8.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: dwmw2 at infradead dot org
Target Milestone: ---
https://gcc.gnu.org/onlinedocs/gcc/Inline.html says:
> When an inline function is not static, then the compiler must assume
> that there may be calls from other source files; since a global symbol
> can be defined only once in any program, the function must not be defined
> in the other source files, so the calls therein cannot be integrated.
> Therefore, a non-static inline function is always compiled on its own
> in the usual fashion.
Either I misunderstand that, or it isn't true:
$ cat foo.c
inline int foo(int a)
{
return a+1;
}
int main(int a)
{
return foo(a);
}
$ gcc -O0 -o- -S foo.c
.file "foo.c"
.text
.globl bar
.type bar, @function
bar:
.LFB1:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl %edi, -4(%rbp)
movl -4(%rbp), %eax
movl %eax, %edi
call foo
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE1:
.size bar, .-bar
.ident "GCC: (GNU) 8.1.1 20180502 (Red Hat 8.1.1-1)"
.section .note.GNU-stack,"",@progbits
Note the 'foo' function doesn't get emitted.
cf. https://github.com/openwrt/packages/pull/6377#issuecomment-401084671
http://lists.osmocom.org/pipermail/osmocom-sdr/2018-June/001791.html
More information about the Gcc-bugs
mailing list