2009-12-05 71 views
1

我们最近碰到一个在我们构建重复在不同的位置以下编译器错误:什么原因导致“遗漏但未输入”GCC编译器错误?

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 

大量的调查后,我们发现,这个错误在不同的头文件所引起的一些#define语句:

#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 

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

任何人都可以解释上述编译器错误的含义和为什么此修复程序工作?

感谢, 瑞安

回答

6

当你得到一个ICE(内部编译器错误),这意味着GCC的内部都搞砸了。不是因为你的代码,而是因为GCC代码中的一个bug,声称

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

接下来的步骤是:

  • 更新到最新的海湾合作委员会(4.4.2),以检查是否ICE是固定的。
  • 如果不是,请将您的代码降低为生成ICE的最小代码。
  • 为该ICE创建一个Bug Report
+1

有时,内部编译器错误可能是完全随机的,在这种情况下,最可能的解释是内存芯片失效。 – 2009-12-05 23:03:28

相关问题