http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48759
Summary: Inconsistency in code generation for inline virtual functions depending on position of the "inline" keyword Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: siddhesh.poyare...@gmail.com Description: The c+ parser seems to differentiate between inline virtual functions that have the inline keyword only in the function definition as opposed to when it is present in the declaration. When the inline keyword is only in the definition, the function is flagged such that code is generated for it, which is not correct. How Reproducible: Always: Steps to Reproduce and Results: [siddhesh@localhost ~]$ cat foo.ii class A { public: virtual void f(); }; inline void A::f() { } [siddhesh@localhost ~]$ g++ -c foo.ii [siddhesh@localhost ~]$ objdump -dC foo.o foo.o: file format elf64-x86-64 Disassembly of section .text._ZN1A1fEv: 0000000000000000 <A::f()>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 89 7d f8 mov %rdi,-0x8(%rbp) 8: c9 leaveq 9: c3 retq Expected Result: The correct output, as shown when the inline keyword is present (at least) in the declaration: [siddhesh@localhost ~]$ cat foo.ii class A { public: virtual inline void f(); }; void A::f() { } [siddhesh@localhost ~]$ g++ -c foo.ii [siddhesh@localhost ~]$ objdump -dC foo.o foo.o: file format elf64-x86-64 Additional Information: Chapter 9.3 in the C++ standard says: "an inline member function (whether static or non-static) may also be defined outside of its class definition provided either its declaration in the class definition or its definition outside of the class definition declares the function as inline." I could not find any exceptions to this rule for virtual functions.