こんにちは、gcc 4.8 および 4.9 用の gcc プラグインを使用していますが、gcc 5.1.0 で問題が発生しています。問題は、この新しい gcc バージョンで GIMPLE パスを登録できないことです。
プラグイン コードの例を次に示します。
int plugin_is_GPL_compatible;
static bool gateCheck(void)
{
printf("BBBBB\n");
return true;
}
static unsigned int executeCheck(void)
{
printf("CCCCC\n");
return 0;
}
const pass_data gimplePass =
{
GIMPLE_PASS, // opt type name
"exampleChecker", // name
OPTGROUP_NONE, // optinfo_flags
TV_NONE, // tv_id
PROP_ssa, // properties_required
0, // properties_provided
0, // properties_destroyed
0, // todo_flags_start
0, // todo_flags_finish
};
class passAttrChecker : public gimple_opt_pass
{
public:
passAttrChecker(gcc::context* ctxt)
: gimple_opt_pass(gimplePass, ctxt)
{}
bool gate (){return gateCheck();}
unsigned int execute(){return executeCheck();}
};
extern int plugin_init(struct plugin_name_args* plugin_info,
struct plugin_gcc_version* version)
{
const char * name = "exampleChecker";
struct register_pass_info pass_info;
pass_info.pass = new passAttrChecker(g);
pass_info.reference_pass_name = "ssa";
pass_info.ref_pass_instance_number = 1;
pass_info.pos_op = PASS_POS_INSERT_AFTER;
register_callback(name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
return 0;
}
このプラグインを使用してファイルをコンパイルすると、いくつかの B と C が出力されるはずですが、何も出力されません。
gcc 4.9 との違いは、型「pass_data」のフィールドが以前よりも 2 つ少ないことです (has_gate と has_execute)。それ以外は以前と同じようです。誰かが私が間違っていることや欠けていることを知っていれば、助けていただければ幸いです。