2016-03-28 8 views
1

В течение последних нескольких лет GCC допускал дублирование typedefs, если они совместимы друг с другом. Проблема, с которой я сталкиваюсь, связана с расширениями отладки DWARF: кажется, что GCC (v4.8) отмечает дубликаты typedef как неиспользуемые и не включает их в DWARF.GCC, дубликаты typedefs и 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 ЬурейеЕ включен, но тогда все мои неиспользованные типы появляются, а также, взорвав размер файла объекта.

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

+0

Ваш вопрос, очевидно, имеет опечатку - typedefs * идентичны *. Ваш вопрос, однако, звучит так, как будто имена 'typedef'd * были разными? 'yyx_handle' определенно не используется здесь? – tofro

+0

'yyx_handle' используется в примере. Если я удалю одно вхождение typedef, тогда он работает хорошо. – Freezer

ответ

0

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

+0

Если вы не уверены, это лучше подходит для комментариев. – alk