Эквивалентно -fplan9-расширениям в Clang? - PullRequest
8 голосов
/ 15 августа 2011

Как мне заставить анонимное поведение struct / union активироваться -fplan9-extensions в GCC для работы в Clang?

Я получаю ошибки при назначении членов анонимного использования назначенных инициализаторов, и я не получаю бесплатное приведение к типу анонимного члена. Обе они работают в GCC с активированным вышеупомянутым расширением.

typedef struct {int hi;} Embedded;
typedef struct {Embedded;} Encapsulating;

Encapsulating poo = {.hi = 3;};
error: field designator 'hi' does not refer to any field in type 'Encapsulating'

void takes_embedded(Embedded *m);
takes_embedded(&poo);
warning: incompatible pointer types passing 'Encapsuating *' to parameter of type 'Embedded *'

1 Ответ

8 голосов
/ 30 апреля 2012

Вот как получить функциональность -fplan9-extensions в Clang:

  • Убедитесь, что функциональность соответствует семи критериям для расширений Clang .
  • Отправьте по почте список рассылки cfe-dev и спросите, примет ли сообщество Clang патч, реализующий это расширение.
  • Ознакомьтесь со стандартами кодирования LLVM .
  • Проверьте и соберите LLVM и лязг из SVN.
  • Создайте патч, реализующий эту функциональность, и отправьте его в список рассылки cfe-commits .
  • Ответить на комментарии в этом списке рассылки. Что касается первого патча для Clang, вам следует ожидать его пересмотра несколько раз, прежде чем он будет принят сообществом. Будьте терпеливы и настойчивы.
  • Если все пойдет хорошо, ваш патч будет проверен на Clang.

Некоторые функции -fplan9-extensions (часть struct { Embedded; }) уже доступны под аргументом -fms-extensions, но назначенные инициализаторы для таких анонимных членов не поддерживаются. Другая часть по духу аналогична функциональности GCC __attribute__((transparent_union)), которую Clang уже поддерживает.

...