Что вызывает ошибку компиляции GCC "оставлено, но не введено"? - PullRequest
2 голосов
/ 05 декабря 2009

Недавно мы столкнулись со следующей ошибкой компилятора, которая повторялась в разных местах нашей сборки:

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 Ответ

6 голосов
/ 05 декабря 2009

Когда вы получаете ICE (Внутренняя ошибка компилятора), это означает, что внутренняя часть GCC испорчена. Не из-за вашего кода, а из-за ошибки в коде GCC, которая обнаруживается assert .

Изменения в вашем коде, позволяющие избежать ошибки, вероятно, не имеют смысла.

Следующие шаги:

  • Обновление до последней GCC (4.4.2), чтобы проверить, был ли установлен ICE.
  • Если это не так, уменьшите ваш код до минимального кода, создающего ICE
  • Создайте Отчет об ошибке для этого ДВС.
...