-mmacosx-version-min влияет на поведение упаковки с битовыми полями? - PullRequest
0 голосов
/ 14 ноября 2018

Я наблюдаю странное поведение, когда мои битовые поля заканчиваются заполнением:

 struct Test {
     unsigned short a : 1;
     unsigned short b : 15;
 };

при компиляции с -mmacosx-version-min=10.11 (или выше) в clang (протестировано 4.0.1 и Apple 10.0).0) я получаю https://github.com/arvidn/struct_layout:

struct ::Test [2 Bytes]
   --- 2 Bytes padding ---

с -mmacosx-version-min=10.10 (или ниже), получаю:

struct ::Test [2 Bytes]
    0: [unsigned short : 2] a                             -- {cache-line 0}
    0: [unsigned short : 2] b

У кого-нибудь есть идеи, какой стандарт или правило я нарушил?

Спасибо!

1 Ответ

0 голосов
/ 14 ноября 2018

Похоже, что инструмент struct_layout, который вы используете, зависит от информации отладки DWARF.Различия, которые вы видите, не отражают разницу в расположении данных, только в доступной отладочной информации.

Использование -mmacosx-version-min=10.10 ограничивает версию DWARF, используемую версией 2, потому что это все, что в MacOS 10.10инструменты поймут.Я ожидаю, что вы получите аналогичные результаты, указав -gdwarf-2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...