Здравствуйте, dmitry_npi, Вы писали:
_>Конечно, это абсурд. Но VC++ 2008 SP1 после выдачи предупреждения падает.
_>Вот, такой вот глюк. Падает также при всех значениях, отличных от [1,2,4,8,16] _>А как в других версиях?
Здравствуйте, Guard_h4s, Вы писали:
G_>А как вы себе представляете выравнивание не по границам степени двойки?
Примерно так:
t.cpp(3) : warning C4086: expected pragma parameter to be '1', '2', '4', '8', or '16'
с последующим игнорированием этой прагмы.
Но никак не
t.cpp(3) : warning C4086: expected pragma parameter to be '1', '2', '4', '8', or '16'
t.cpp(6) : fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'msc1.cpp', line 1393)
Воспроизводится и на VC2005, и 2010 тоже.
Причём gcc3.4.4 поступил вот так
t.cpp:3: warning: alignment must be a small power of two, not 3
t.cpp:10: warning: #pragma pack (pop) encountered without matching #pragma pack (push, <n>)
То есть, целиком проигнорировал первую прагму и, как следствие, выругался на якобы непарную вторую.
После чего выравнял всё по дефолту на 4.
ну ведь там же сказано: valud values are ...
Зачем же пихать не валидные значения, а потом ещё жаловаться что что-то не так.
Конечно подход gcc интеллигентней, тут спорить не буду.
Здравствуйте, korzhik, Вы писали:
K>ну ведь там же сказано: valud values are ... K>Зачем же пихать не валидные значения, а потом ещё жаловаться что что-то не так. K>Конечно подход gcc интеллигентней, тут спорить не буду.
А зачем защищать баги компилятора? ICE — это баг, при какой бы ситуации он не возникал.
Здравствуйте, Кодт, Вы писали:
К>То есть, целиком проигнорировал первую прагму и, как следствие, выругался на якобы непарную вторую. К>После чего выравнял всё по дефолту на 4.
Это, типа, лучше?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
т.е. у вас компилятор только для проверки математической модели? Всегда считал что он затачивается именно на "физической/хардверной".
Отсюда и вопрос — зачем?
Здравствуйте, Guard_h4s, Вы писали:
G_>А как вы себе представляете выравнивание не по границам степени двойки?
Структура КБ-103 выглядела следующим образом:
"руководитель" В. Балашов, майор госбезопасности, его зам. Крючков, тоже
майор, оба достаточно серые личности. Маленький штрих рисует их техническую
эрудицию. К Устинову, "руководившему" КБ-102 В. М. Мясищева, обратились два
зэка с предложением создать двухтактный бензиновый двигатель для бортового
агрегата. "А какие употребляются сейчас?" -- поинтересовался тот.
"Четырехтактные" -- ответили ему. "Переходить сразу на двухтактные
рискованно, -- заметил Устинов, -- не лучше ли вам заняться трехтактными?"
Иначе, как "трехтактный" его с тех пор не называли.
Здравствуйте, dmitry_npi, Вы писали:
_>Конечно, это абсурд. Но VC++ 2008 SP1 после выдачи предупреждения падает.
_>Вот, такой вот глюк. Падает также при всех значениях, отличных от [1,2,4,8,16] _>А как в других версиях?
Минимальный код и флаги можно увидеть? На VC++ 2008 SP1 воспроизвести не удалось.
Здравствуйте, dmitry_npi, Вы писали:
_>Конечно, это абсурд. Но VC++ 2008 SP1 после выдачи предупреждения падает.
_>Вот, такой вот глюк. Падает также при всех значениях, отличных от [1,2,4,8,16] _>А как в других версиях?
У мну всё нормально.
Version 9.0.30729.1 SP
warning C4086: expected pragma parameter to be '1', '2', '4', '8', or '16'
_>>Я никак.
D>а почему никак-то? D>выравнивание на 4 -- это выравнивание на адрес кратный 4. D>выравнивание на 3 -- это выравнивание на адрес кратный 3.
D>Это бессмысленно с "физической/хардверной" точки зрения, но с математической точки зрения (с которой и смотрит компилятор) не вижу разницы.
Здравствуйте, korzhik, Вы писали:
K>>>#pragma pack: Valid values are 1, 2, 4, 8, and 16. К>>Если б там ещё ICE было задокументировано как фича... K>ну ведь там же сказано: valud values are ... K>Зачем же пихать не валидные значения,
такое пихать должны QA-щики в принципе
K>а потом ещё жаловаться что что-то не так.
главное, чтобы "что-то не так" не привело к появлению сорсовых вирусов, при компиляции которых компилятор выполняет rm -rf
хотя может уже и есть такие, просто я не знаю
K>Конечно подход gcc интеллигентней, тут спорить не буду.
из-за такого подхода приходится делать -Werror