Зарегистрируйте пропуск GIMPLE в gcc 5.1.0

Привет, я делаю плагины gcc для gcc 4.8 и 4.9, но у меня проблема в gcc 5.1.0. Проблема в том, что я не могу зарегистрировать GIMPLE в этой новой версии GCC.

Вот пример кода плагина:

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» имеет на два поля меньше, чем раньше (has_gate и has_execute). Все остальное вроде как раньше.
Если кто-то знает, что я делаю неправильно или чего мне не хватает, буду признателен за помощь.

2

Решение

Я уже решил это. Это была довольно глупая ошибка.
Теперь в gcc 5.1.0 методы execute и gate из otp_pass получают один аргумент вместо void.

Вот как работает пример:

class passAttrChecker : public gimple_opt_pass
{
public:
passAttrChecker(gcc::context* ctxt)
: gimple_opt_pass(gimplePass, ctxt)
{}

bool gate (function *)
{
std::cout << "GATE\n";
return true;
}
unsigned int execute(function *)
{
std::cout << "EXECUTE\n";
return 1;
}
};
2

Другие решения


По вопросам рекламы [email protected]