gcc -finline-functions behaviour?

Posted by user176168 on Stack Overflow See other posts from Stack Overflow or by user176168
Published on 2010-03-16T00:01:02Z Indexed on 2010/04/01 15:43 UTC
Read the original article Hit count: 225

Filed under:
|
|

I'm using gcc with the -finline-functions optimization for release builds. In order to combat code bloat because I work on an embedded system I want to say don't inline particular functions. The obvious way to do this would be through function attributes ie attribute(noinline). The problem is this doesn't seem to work when I switch on the global -finline-functions optimisation which is part of the -O3 switch.

It also has something to do with it being templated as a non templated version of the same function doesn't get inlined which is as expected.

Has anybody any idea of how to control inlining when this global switch is on?

Here's the code:

#include <cstdlib>
#include <iostream>

using namespace std;

class Base
{
public:

    template<typename _Type_>
    static _Type_ fooT( _Type_ x, _Type_ y ) __attribute__ (( noinline ));
};

template<typename _Type_>
_Type_ Base::fooT( _Type_ x, _Type_ y )
{
    asm("");
    return x + y;
}


int main(int argc, char *argv[])
{
    int test = Base::fooT( 1, 2 );
    printf( "test = %d\n", test );

    system("PAUSE");
    return EXIT_SUCCESS;
}

© Stack Overflow or respective owner

Related posts about gcc

Related posts about c++