-O3 -fno-default-inline

Martin Sebor sebor@roguewave.com
Sat Feb 3 20:30:00 GMT 2001


Hi,

I'm curious whether this combination of flags is not inlining trivial members of
class templates (or member template functions of ordinary classes) by design or
whether it's a bug. Members of ordinary classes imlicitly declared inline are
inlined at -O3 so I would expect templates to be treated the same.

Thanks
Martin

$ cat t.cpp
struct S
{
    void foo () { }

    template <class T>
    void bar () { }
};

int main ()
{
    S().foo ();
    S().bar<int>();
}

$ g++ t.cpp -g -O3 -fno-default-inline && echo "disas main" | gdb -q a.out
(gdb) Dump of assembler code for function main:
0x80487e0 <main>:       pushl  %ebp
0x80487e1 <main+1>:     movl   %esp,%ebp
0x80487e3 <main+3>:     subl   $0x14,%esp
0x80487e6 <main+6>:     leal   0xfffffffe(%ebp),%edx
0x80487e9 <main+9>:     movb   $0x0,0xfffffffe(%ebp)
0x80487ed <main+13>:    movb   $0x0,0xffffffff(%ebp)
0x80487f1 <main+17>:    pushl  %edx
0x80487f2 <main+18>:    call   0x8048860 <_ZN1S3barIiEEvv>
0x80487f7 <main+23>:    addl   $0x10,%esp
0x80487fa <main+26>:    xorl   %eax,%eax
0x80487fc <main+28>:    movl   %ebp,%esp
0x80487fe <main+30>:    popl   %ebp
0x80487ff <main+31>:    ret


More information about the Gcc-bugs mailing list