首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC插件: passes.c中的“内部编译器错误”

GCC插件: passes.c中的“内部编译器错误”
EN

Stack Overflow用户
提问于 2012-06-05 11:23:37
回答 1查看 405关注 0票数 1

我一直在写一个GCC程序间插件,我必须在程序中的某些点插入GIMPLE语句。在此之后,我对整个程序进行数据流分析。当我的分析完成后,我将删除那些新插入的GIMPLE语句。

我的分析即将完成,但就在退出之前,将生成以下消息:

内部编译器错误:在execute_ipa_pass_list中,at passes.c:1817

这肯定是因为插入了GIMPLE语句,如果不这样做,我就不会得到这个错误消息。

有人能帮我解释一下是什么问题以及如何解决吗?

EN

回答 1

Stack Overflow用户

发布于 2012-06-05 11:40:50

这通常发生在GCC代码包含一个断言时,这个断言最终被证明是false

passes.c中的第1817行(它是GCC源代码的一部分,根树的gcc子目录)有一段代码,如下所示:

gcc_assert (some_condition);

在您的示例中,some_condition是假的,但是编译器希望它始终是true (这就是为什么代码的作者首先编写了断言)。

你在你的插件中做了一些事情,使它成为false,你需要修复它。

你做错什么了?真的要看情况了。打开passes.c,找到这一行,看看它在检查什么。在我的GCC的副本中,有关的功能如下:

代码语言:javascript
复制
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语句。你的插件导致其中一个变成假的。也就是说,您处理了其中一个变量:

代码语言:javascript
复制
current_function_decl
cfun
pass->type

这可能就是问题所在。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10896411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档