https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90816

            Bug ID: 90816
           Summary: -finstrument-functions-exclude-function-list
                    improperly handles namespace/class definitions
           Product: gcc
           Version: 6.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: oliverbrowne627 at gmail dot com
  Target Milestone: ---

Tested with following GCC version:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/tools/batonroot/rodin/devkits/lnx64/gcc-6.2.0/libexec/gcc/x86_64-pc-linux-gnu/6.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../../src/lnx64/configure
--prefix=/tools/batonroot/rodin/devkits/lnx64/gcc-6.2.0
--enable-languages=c,c++
--with-ppl=/tools/batonroot/rodin/devkits/lnx64/ppl-0.11
--with-cloog=/tools/batonroot/rodin/devkits/lnx64/cloog-ppl-0.15.11
LDFLAGS=-L/tools/batonroot/rodin/devkits/lnx64/cloog-ppl-0.15.11/lib
Thread model: posix
gcc version 6.2.0 (GCC)

GCC Command:
gcc -finstrument-functions
-finstrument-functions-exclude-function-list='TestClass::test' main.cpp -o
a.out -O0

Description of issue:
__cyg_profile_func_enter and __cyg_profile_func_exit present in TestClass::test
implementation in output file despite symbol passed to
-finstrument-functions-exclude-function-list. 

Suspected to be due to:
-> lang_hooks.decl_printable_name (fndecl, 0);
-> from gcc/gimplify.c, flag_instrument_functions_exclude_p, line 13992
only returning the local name of the function.

Main.cpp:

class TestClass{
public:
    int test(){
        int res = 0;
        for(int i = 0; i < 1000; i++){
            res += i;
        }
        return(res);
    }
};

int main(int argc, char** argv){
    TestClass t = TestClass();
    t.test();
    return(0);
}

Implementation of TestClass.test():
0000000000400592 <TestClass::test()>:
  400592:       55                      push   %rbp
  400593:       48 89 e5                mov    %rsp,%rbp
  400596:       53                      push   %rbx
  400597:       48 83 ec 28             sub    $0x28,%rsp
  40059b:       48 89 7d d8             mov    %rdi,-0x28(%rbp)
  40059f:       48 8b 45 08             mov    0x8(%rbp),%rax
  4005a3:       48 89 c6                mov    %rax,%rsi
  4005a6:       bf 92 05 40 00          mov    $0x400592,%edi
  4005ab:       e8 80 fe ff ff          callq  400430
<__cyg_profile_func_enter@plt>
  4005b0:       c7 45 e8 00 00 00 00    movl   $0x0,-0x18(%rbp)
  4005b7:       c7 45 ec 00 00 00 00    movl   $0x0,-0x14(%rbp)
  4005be:       81 7d ec e7 03 00 00    cmpl   $0x3e7,-0x14(%rbp)
  4005c5:       7f 11                   jg     4005d8 <TestClass::test()+0x46>
  4005c7:       8b 55 e8                mov    -0x18(%rbp),%edx
  4005ca:       8b 45 ec                mov    -0x14(%rbp),%eax
  4005cd:       01 d0                   add    %edx,%eax
  4005cf:       89 45 e8                mov    %eax,-0x18(%rbp)
  4005d2:       83 45 ec 01             addl   $0x1,-0x14(%rbp)
  4005d6:       eb e6                   jmp    4005be <TestClass::test()+0x2c>
  4005d8:       8b 5d e8                mov    -0x18(%rbp),%ebx
  4005db:       48 8b 45 08             mov    0x8(%rbp),%rax
  4005df:       48 89 c6                mov    %rax,%rsi
  4005e2:       bf 92 05 40 00          mov    $0x400592,%edi
  4005e7:       e8 34 fe ff ff          callq  400420
<__cyg_profile_func_exit@plt>
  4005ec:       89 d8                   mov    %ebx,%eax
  4005ee:       48 83 c4 28             add    $0x28,%rsp
  4005f2:       5b                      pop    %rbx
  4005f3:       5d                      pop    %rbp
  4005f4:       c3                      retq   
  4005f5:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  4005fc:       00 00 00 
  4005ff:       90                      nop

Reply via email to