导致“左但未输入”GCC编译错误的原因是什么?

时间:2009-12-05 17:20:48

标签: c gcc compiler-errors

我们最近遇到了以下编译器错误,这些错误在整个构建过程中的不同位置重复:

line-map.c: file "<a source_file name>" left but not entered

源文件在构建中的不同点处有所不同。一段时间后,编译器最终抛出了以下错误:

<header file>: In function `<function name that is not present within the given header file>':
<same header file>:-117020: internal compiler error: in final_scan_insn, at final.c:1790

经过大量调查后,我们发现此错误是由不同头文件中的某些#defines引起的:

#define GEOGRAPHIC_LOC_TYPE_CGI            0
#define GEOGRAPHIC_LOC_TYPE_SAI            1
#define GEOGRAPHIC_LOC_TYPE_RAI            2
#define GEOGRAPHIC_LOC_TYPE_TAI          128
#define GEOGRAPHIC_LOC_TYPE_ECGI         129
#define GEOGRAPHIC_LOC_TYPE_TAI_AND_ECGI 130

我们将这些#defines从它们当前存在的头文件中移动到.c文件中,该文件是当前使用它们的唯一位置。然后,我们再也看不到编译器错误了。

有人能解释一下上面的编译器错误是什么意思以及为什么这个修复工作有效?

谢谢, 莱恩

1 个答案:

答案 0 :(得分:6)

当你得到ICE(内部编译器错误)时,这意味着GCC的内部结构搞砸了。不是因为您的代码,而是因为GCC代码中的错误,这是由断言检测到的。

避免错误的代码更改可能没有意义。

接下来的步骤是:

  • 更新到最新的GCC(4.4.2),检查ICE是否已修复。
  • 如果不是,请减少代码产生ICE的最小代码
  • 为该ICE创建Bug Report