GCC, повторяющиеся определения типов и DWARF

В течение последних нескольких лет GCC допускал дублирование определений типов, если они совместимы друг с другом. Проблема, с которой я столкнулся, связана с расширениями отладки DWARF: кажется, что GCC (v4.8) помечает повторяющиеся определения типов как неиспользуемые и не включает их в DWARF.

Пример:

typedef struct yyx yyx_handle;
typedef struct yyx yyx_handle;

yyx_handle *get_yyx(void *p)
{ return (yyx_handle *)p; }

Полученные результаты:

$ gcc -o f1.o -c f1.c -g
$ readelf --debug-dump f1.o | grep yyx_handle | wc -l
0

Если я добавлю -fno-eliminate-unused-debug-types, typedef будет включен, но тогда также появятся все мои неиспользуемые типы, что увеличит размер объектного файла.

Очевидное решение — удалить повторяющееся определение, но это не всегда практично. Любые другие предложения?


person Freezer    schedule 28.03.2016    source источник
comment
В вашем вопросе, по-видимому, опечатка: определения типов идентичны. Ваш вопрос, однако, звучит так, как будто typedefd имена были другими? yyx_handle здесь точно не используется?   -  person tofro    schedule 28.03.2016
comment
yyx_handle используется в примере. Если я удалю одно вхождение typedef, тогда все будет хорошо.   -  person Freezer    schedule 29.03.2016


Ответы (1)


Я думаю, что это просто ошибка gcc. Я бы посоветовал сообщить об этом в GCC Bugzilla.

person Tom Tromey    schedule 30.03.2016
comment
Если вы не уверены, это лучше подойдет в качестве комментария. - person alk; 18.04.2016