Commit 67bf2939 by Laurent Alfonsi Committed by Jeff Law

re PR c++/49718 (please allow no_instrument_function attribute in class member…

re PR c++/49718 (please allow no_instrument_function attribute in class member definition/declaration)

	PR c++/49718
	* c-common.c (handle_no_instrument_function_attribute): Allow
	no_instrument_function attribute in class member
	definition/declaration.

	PR c++/49718
	* g++.dg/pr49718.C: New test.

From-SVN: r206643
parent 352e9ecd
2014-01-15 Laurent Alfonsi <laurent.alfonsi@st.com>
PR c++/49718
* c-common.c (handle_no_instrument_function_attribute): Allow
no_instrument_function attribute in class member
definition/declaration.
2014-01-15 Jakub Jelinek <jakub@redhat.com> 2014-01-15 Jakub Jelinek <jakub@redhat.com>
PR c/58943 PR c/58943
......
...@@ -7985,12 +7985,6 @@ handle_no_instrument_function_attribute (tree *node, tree name, ...@@ -7985,12 +7985,6 @@ handle_no_instrument_function_attribute (tree *node, tree name,
"%qE attribute applies only to functions", name); "%qE attribute applies only to functions", name);
*no_add_attrs = true; *no_add_attrs = true;
} }
else if (DECL_INITIAL (decl))
{
error_at (DECL_SOURCE_LOCATION (decl),
"can%'t set %qE attribute after definition", name);
*no_add_attrs = true;
}
else else
DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1; DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (decl) = 1;
......
2014-01-15 Laurent Alfonsi <laurent.alfonsi@st.com>
PR c++/49718
* g++.dg/pr49718.C: New test.
2014-01-15 Richard Sandiford <rdsandiford@googlemail.com> 2014-01-15 Richard Sandiford <rdsandiford@googlemail.com>
* gcc.target/mips/umips-branch-4.c: Add addressing=absolute. * gcc.target/mips/umips-branch-4.c: Add addressing=absolute.
......
/* { dg-do compile } */
/* { dg-options "-O2 -finstrument-functions" } */
/* { dg-final { scan-assembler-times "__cyg_profile_func_enter" 1} } */
#define NOINSTR __attribute__((no_instrument_function))
struct t
{
public:
/* Function code should be instrumented */
__attribute__((noinline)) t() {}
/* Function t::a() should not be instrumented */
NOINSTR void a(){
}
/* Function t::b() should not be instrumented */
void NOINSTR b(){
}
/* Function t::c() should not be instrumented */
void c() NOINSTR {
}
/* Function t::d() should not be instrumented */
void d() NOINSTR;
};
void t::d()
{
}
/* Function call_all_functions() should not be instrumented */
struct t call_all_functions() __attribute__((no_instrument_function));
struct t call_all_functions()
{
struct t a; /* Constructor not inlined */
a.a(); /* Inlined t::a() should not be instrumented */
a.b(); /* Inlined t::b() should not be instrumented */
a.c(); /* Inlined t::c() should not be instrumented */
a.d(); /* Inlined t::d() should not be instrumented */
return a;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment