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

            Bug ID: 70435
           Summary: section attribute of a function template is not
                    honored.
           Product: gcc
           Version: 5.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kukyakya at gmail dot com
  Target Milestone: ---

namespace /* anonymous */
{
  [[gnu::section(".mysection")]]
  void regular_func() { }

  template <class T>
  [[gnu::section(".mysection")]]
  void template_func() { }
} // namespace /* anonymous */

void (*ptr1)() = &regular_func;
void (*ptr2)() = &template_func<int>;


In the code above the section attribute is given to both of the regular
function and the function template, but the templated function is not placed in
.mysection but .text.

$ g++ -std=c++14 a.cpp -c && objdump -t a.o | grep -E "regular|template"
0000000000000000 l     F .mysection     0000000000000007
_ZN12_GLOBAL__N_112regular_funcEv
0000000000000000 l     F .text  0000000000000007
_ZN12_GLOBAL__N_113template_funcIiEEvv
~/temp/c++/function_template_section $ 


I also tried it with clang and clang put the function into .mysection as I
expected.


$ clang++ -std=c++14 a.cpp -c && objdump -t a.o | grep -E "regular|template"
0000000000000000 l     F .mysection     0000000000000006
_ZN12_GLOBAL__N_112regular_funcEv
0000000000000010 l     F .mysection     0000000000000006
_ZN12_GLOBAL__N_113template_funcIiEEvv

Reply via email to