You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC 9/10/11使用覆盖率编译时出现ICE,GCC 6.3.0版本可正常编译

during IPA pass: profile
<file_name>.m4: In function 'void <function_name>(int)':
<file_name>.m4:4232:1: internal compiler error: in coverage_begin_function, at coverage.c:656
0x59a1fa coverage_begin_function(unsigned int, unsigned int)
                /tmp/gcc-v9.3.0p3/gcc.source/gcc/coverage.c:458
0xad549a branch_prob(bool)
    /tmp/gcc-v9.3.0p3/gcc.source/gcc/profile.c:1233
0xc10212 tree_profiling
    /tmp/gcc-v9.3.0p3/gcc.source/gcc/tree-profile.c:793
0xc10212 execute
/tmp/gcc-v9.3.0p3/gcc.source/gcc/tree-profile.c:898
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

解决思路

  • 最小复现确认:先抽离EDG生成的对应源文件,剥离无关依赖,确认仅添加-fprofile-arcs -ftest-coverage(覆盖率编译参数)即可触发崩溃,排除其他编译选项、链接选项的干扰。
  • 临时功能规避:对触发崩溃的源文件单独关闭覆盖率编译,在构建规则中为该文件添加排除规则,移除覆盖率相关编译标记,其余文件保持覆盖率开启,不影响整体业务的覆盖率收集需求。
  • 代码逻辑适配:该问题通常是EDG生成的代码存在GCC 9+覆盖率插桩逻辑不兼容的特征,常见为超大函数、过深的分支嵌套、特殊的异常处理块结构。可以调整EDG的代码生成规则,拆分长度过大的函数、简化异常块嵌套、提前清理无可达路径的无效代码,适配高版本GCC的插桩逻辑。
  • 编译参数规避:添加编译参数-fno-tree-profile关闭触发崩溃的tree profile阶段插桩,或者升级到对应大版本的最新小版本(GCC 9.5、10.4、11.3及以上),这类内部编译器错误通常会在后续小版本迭代中得到修复。
  • 工具链混用方案:如果必须收集该文件的覆盖率数据,可以保留GCC 6.3.0版本单独编译该目标文件,和其余用高版本GCC编译的目标文件做链接,只要保证ABI兼容即可正常运行和收集覆盖率。
  • 官方修复提交:可以导出预处理后的完整源文件,附带复现步骤、编译参数、崩溃栈提交给GCC开发团队做官方修复。

内容的提问来源于stack exchange,提问作者Rogerio Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:57:03