此时GCC代码包含原来是false
断言通常发生。
线1817在passes.c
(这是的GCC来源的一部分,在GCC源树的gcc
子目录)具有一段代码看起来像:
gcc_assert (some_condition);
在你情况下,some_condition
是假的,但是编译器期望它总是true
(这就是为什么代码的作者在首位写的断言)。
你在你的插件中做了一些事情,使它成为false
,你需要修复它。
你做了什么错?这真的取决于。打开passes.c
和找到那一行,看看它在检查什么。在我的GCC复印件,相关的功能如下:
void
execute_ipa_pass_list (struct opt_pass *pass)
{
do
{
/* An assertion. */
gcc_assert (!current_function_decl);
/* Another assertion. */
gcc_assert (!cfun);
/* Another assertion. */
gcc_assert (pass->type == SIMPLE_IPA_PASS || pass->type == IPA_PASS);
if (execute_one_pass (pass) && pass->sub)
{
if (pass->sub->type == GIMPLE_PASS)
{
invoke_plugin_callbacks (PLUGIN_EARLY_GIMPLE_PASSES_START, NULL);
do_per_function_toporder ((void (*)(void *))execute_pass_list,
pass->sub);
invoke_plugin_callbacks (PLUGIN_EARLY_GIMPLE_PASSES_END, NULL);
}
else if (pass->sub->type == SIMPLE_IPA_PASS
|| pass->sub->type == IPA_PASS)
execute_ipa_pass_list (pass->sub);
else
gcc_unreachable();
}
/* Another assertion. */
gcc_assert (!current_function_decl);
cgraph_process_new_functions();
pass = pass->next;
}
while (pass);
}
有四个gcc_assert
语句。你的插件导致其中一个变成错误。即你混淆了其中一个变量:
current_function_decl
cfun
pass->type
这可能是什么错误。