Эквивалентно -fplan9-расширениям в Clang?

Как мне активировать анонимное поведение 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 ответ

Вот как можно получить -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 уже поддерживает.

Другие вопросы по тегам