我正在开发一个 GCC 插件来处理 SSA 形式的 AST。每次编译 SSA 形式的函数后,我都会创建一个回调运行。
这是我的代码
char* get_name_node(tree node) {
// return string represent node name
}
void execute_plugin_pass() {
printf("%s\n", get_name_node(cfun->decl));
}
struct opt_pass plugin_pass =
{
GIMPLE_PASS,
"plugin_pass",
0,
execute_plugin_pass,
NULL,
NULL,
0,
TV_PLUGIN_RUN,
PROP_gimple_any,
0,
0,
0,
0
};
extern "C" int
plugin_init(plugin_name_args* info, plugin_gcc_version* ver)
{
struct register_pass_info pass_info;
pass_info.reference_pass_name = where;
pass_info.pass = pass;
pass_info.ref_pass_instance_number = 0;
pass_info.pos_op = PASS_POS_INSERT_AFTER;
register_callback("plugin", PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
return 0;
}
但是对于在类声明中声明的类的方法,上面的代码不能运行例如,使用此代码
class A {
void method1();
void method2() {
// run some code here
}
};
void A::method1() {
// run some code here
}
我的插件只为 method1 运行,但不为 method2 运行
一开始,我认为这个问题是因为 method2() 将被视为内联函数,所以我在运行插件时添加了选项 -fno-inline。但它不起作用
谁能帮我?