【问题标题】:What causes the "left but not entered" GCC compiler error?什么原因导致“左但未进入”GCC 编译器错误?
【发布时间】:2009-12-05 17:20:48
【问题描述】:

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

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 文件中,这是当前使用它们的唯一位置。然后,我们再也看不到编译器错误了。

谁能解释上述编译器错误的含义以及此修复为何有效?

谢谢, 瑞恩

【问题讨论】:

    标签: c gcc compiler-errors


    【解决方案1】:

    当你得到一个 ICE (Internal Compiler Error) 时,这意味着 GCC 的内部被搞砸了。不是因为你的代码,而是因为 GCC 代码中的一个错误,它被 assert 检测到。

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

    接下来的步骤是:

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

    【讨论】:

    • 有时内部编译器错误可能完全是随机的,在这种情况下,最可能的解释是内存芯片出现故障。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多