(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
ext/
attr-noinline-3.C
/*  PR c++/84294 - attributes on a function template redeclaration silently
    discarded
    { dg-do compile }
    { dg-options "-O -fdump-tree-optimized" } */

template <void test ()>
void test_func ()
{
  test ();
}

int x;

void __attribute__ ((noinline)) func_noinline_none ();
void func_noinline_none () { x = __LINE__; }

template void test_func<func_noinline_none>();
// { dg-final { scan-tree-dump-times "func_noinline_none *\\(\\);" 1 "optimized" } }


void func_none_noinline ();
void  __attribute__ ((noinline)) func_none_noinline () { x = __LINE__; }

template void test_func<func_none_noinline>();
// { dg-final { scan-tree-dump-times "func_none_noinline *\\(\\);" 1 "optimized" } }


template <class>
void __attribute__ ((noinline)) templ_noinline_none () { x = __LINE__; }

template <class>
void templa_noinline_none ();

template void test_func<templ_noinline_none<int> >();
// { dg-final { scan-tree-dump-times "templ_noinline_none<int> *\\(\\);" 1 "optimized" } }


template <class>
void templ_none_noinline ();

template <class>
void  __attribute__ ((noinline)) templ_none_noinline () { x = __LINE__; }

template void test_func<templ_none_noinline<int> >();
// { dg-final { scan-tree-dump-times "templ_none_noinline<int> *\\(\\);" 1 "optimized" } }