#pragma pack(3)
От: dmitry_npi Россия  
Дата: 07.06.10 06:48
Оценка: 32 (1) :)
Конечно, это абсурд. Но VC++ 2008 SP1 после выдачи предупреждения падает.

Вот, такой вот глюк. Падает также при всех значениях, отличных от [1,2,4,8,16]
А как в других версиях?

07.06.10 13:29: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Атмосферная музыка — www.aventuel.net
Re: #pragma pack(3)
От: Guard_h4s Россия  
Дата: 07.06.10 09:27
Оценка:
А как вы себе представляете выравнивание не по границам степени двойки?
Re[2]: #pragma pack(3)
От: blackhearted Украина  
Дата: 07.06.10 09:31
Оценка: +1
Здравствуйте, Guard_h4s, Вы писали:

G_>А как вы себе представляете выравнивание не по границам степени двойки?


А падать зачем?
Re: #pragma pack(3)
От: korzhik Россия  
Дата: 07.06.10 09:32
Оценка:
Здравствуйте, dmitry_npi, Вы писали:

_>Конечно, это абсурд. Но VC++ 2008 SP1 после выдачи предупреждения падает.


_>Вот, такой вот глюк. Падает также при всех значениях, отличных от [1,2,4,8,16]

_>А как в других версиях?

#pragma pack: Valid values are 1, 2, 4, 8, and 16.
Re[2]: #pragma pack(3)
От: Кодт Россия  
Дата: 07.06.10 09:41
Оценка:
Здравствуйте, 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.
Перекуём баги на фичи!
Re[2]: #pragma pack(3)
От: Кодт Россия  
Дата: 07.06.10 09:42
Оценка:
Здравствуйте, korzhik, Вы писали:

K>#pragma pack: Valid values are 1, 2, 4, 8, and 16.

Если б там ещё ICE было задокументировано как фича...
Перекуём баги на фичи!
Re[2]: #pragma pack(3)
От: dilmah США  
Дата: 07.06.10 09:42
Оценка: 1 (1) +1 :))) :))) :)
G_>А как вы себе представляете выравнивание не по границам степени двойки?

а в чем проблема это себе представить?
Re[3]: #pragma pack(3)
От: korzhik Россия  
Дата: 07.06.10 09:46
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, korzhik, Вы писали:


K>>#pragma pack: Valid values are 1, 2, 4, 8, and 16.

К>Если б там ещё ICE было задокументировано как фича...

ну ведь там же сказано: valud values are ...
Зачем же пихать не валидные значения, а потом ещё жаловаться что что-то не так.
Конечно подход gcc интеллигентней, тут спорить не буду.
Re[2]: #pragma pack(3)
От: dmitry_npi Россия  
Дата: 07.06.10 10:54
Оценка: :)
Здравствуйте, Guard_h4s, Вы писали:

G_>А как вы себе представляете выравнивание не по границам степени двойки?


Я никак. Хотелось посмотреть, как это может представить компилятор.
Атмосферная музыка — www.aventuel.net
Re[3]: #pragma pack(3)
От: dilmah США  
Дата: 07.06.10 11:07
Оценка:
_>Я никак.

а почему никак-то?
выравнивание на 4 -- это выравнивание на адрес кратный 4.
выравнивание на 3 -- это выравнивание на адрес кратный 3.

Это бессмысленно с "физической/хардверной" точки зрения, но с математической точки зрения (с которой и смотрит компилятор) не вижу разницы.
Re[3]: #pragma pack(3)
От: Alexander G Украина  
Дата: 07.06.10 11:14
Оценка: :))
Здравствуйте, dilmah, Вы писали:

D>а в чем проблема это себе представить?

— Профессор, я не могу представить семимерную сферу!
— Это же элементарно! Представьте n-мерную, а n положите равным семи!

Русский военный корабль идёт ко дну!
Re[4]: #pragma pack(3)
От: Воронков Василий Россия  
Дата: 07.06.10 11:48
Оценка: 1 (1) +4
Здравствуйте, korzhik, Вы писали:

K>ну ведь там же сказано: valud values are ...

K>Зачем же пихать не валидные значения, а потом ещё жаловаться что что-то не так.
K>Конечно подход gcc интеллигентней, тут спорить не буду.

А зачем защищать баги компилятора? ICE — это баг, при какой бы ситуации он не возникал.
Re[3]: #pragma pack(3)
От: Erop Россия  
Дата: 07.06.10 12:15
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>То есть, целиком проигнорировал первую прагму и, как следствие, выругался на якобы непарную вторую.

К>После чего выравнял всё по дефолту на 4.
Это, типа, лучше?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: #pragma pack(3)
От: Guard_h4s Россия  
Дата: 07.06.10 12:36
Оценка:
т.е. у вас компилятор только для проверки математической модели? Всегда считал что он затачивается именно на "физической/хардверной".
Отсюда и вопрос — зачем?
Re[3]: #pragma pack(3)
От: Guard_h4s Россия  
Дата: 07.06.10 12:38
Оценка:
B>А падать зачем?
Незачем. Но и использовать такое незачем. Возможно потому и не фиксят.
Re[2]: #pragma pack(3)
От: lxa http://aliakseis.livejournal.com
Дата: 07.06.10 12:53
Оценка: :))
Здравствуйте, Guard_h4s, Вы писали:

G_>А как вы себе представляете выравнивание не по границам степени двойки?



Структура КБ-103 выглядела следующим образом:
"руководитель" В. Балашов, майор госбезопасности, его зам. Крючков, тоже
майор, оба достаточно серые личности. Маленький штрих рисует их техническую
эрудицию. К Устинову, "руководившему" КБ-102 В. М. Мясищева, обратились два
зэка с предложением создать двухтактный бензиновый двигатель для бортового
агрегата. "А какие употребляются сейчас?" -- поинтересовался тот.
"Четырехтактные" -- ответили ему. "Переходить сразу на двухтактные
рискованно, -- заметил Устинов, -- не лучше ли вам заняться трехтактными?"
Иначе, как "трехтактный" его с тех пор не называли.

http://lib.ru/MEMUARY/KERBER/tupolewskaya_sharaga.txt

Re: #pragma pack(3)
От: Юрий Жмеренецкий ICQ 380412032
Дата: 07.06.10 13:03
Оценка: +1
Здравствуйте, dmitry_npi, Вы писали:

_>Конечно, это абсурд. Но VC++ 2008 SP1 после выдачи предупреждения падает.


_>Вот, такой вот глюк. Падает также при всех значениях, отличных от [1,2,4,8,16]

_>А как в других версиях?

Минимальный код и флаги можно увидеть? На VC++ 2008 SP1 воспроизвести не удалось.
Re: #pragma pack(3)
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 07.06.10 13:48
Оценка: +1
Здравствуйте, 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'
Re[4]: #pragma pack(3)
От: R.O. Prokopiev Россия http://127.0.0.1/
Дата: 07.06.10 13:54
Оценка:
Здравствуйте, dilmah, Вы писали:


_>>Я никак.


D>а почему никак-то?

D>выравнивание на 4 -- это выравнивание на адрес кратный 4.
D>выравнивание на 3 -- это выравнивание на адрес кратный 3.

D>Это бессмысленно с "физической/хардверной" точки зрения, но с математической точки зрения (с которой и смотрит компилятор) не вижу разницы.


Почему же бессмысленно:
http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%BE%D0%B8%D1%87%D0%BD%D0%B0%D1%8F_%D0%AD%D0%92%D0%9C
Re[4]: #pragma pack(3)
От: Antikrot  
Дата: 07.06.10 15:05
Оценка: +1
Здравствуйте, 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
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.