[sisyphus] Странности при переходе объединении двух целых в вещественное на x86_64

Kirill A. Shutemov kirill на shutemov.name
Чт Авг 13 20:04:39 MSD 2009


2009/8/13 Victor Forsyuk <force at altlinux.org>:
>
>
> 2009/8/7 Kirill A. Shutemov <kirill at shutemov.name>
>>
>> 2009/8/7 Serge Ryabchun <sr at osdn.org.ua>:
>> > Это не повод собирать не верный код:
>> >
>> > [sr at sr 6]$ gcc-4.3 -Wall -O2 f2.c
>> > f2.c: In function 'main':
>> > f2.c:10: warning: dereferencing type-punned pointer will break
>> > strict-aliasing rules
>> > [sr at sr 6]$ ./a.out
>> > TEST 00: 0.000000
>> > [sr at sr 6]$
>> > [sr at sr 6]$ gcc-4.4 -Wall -O2 f2.c
>> > f2.c: In function 'main':
>> > f2.c:10: warning: dereferencing type-punned pointer will break
>> > strict-aliasing rules
>> > [sr at sr 6]$ ./a.out
>> > TEST 00: 3.140000
>>
>> Это ничего не значит. Точнее значит лишь то, что работа оптимизатора
>> различается между версиями компилятора.
>>
>> То, что криво написаный код иногда работает -- не аргумент. Если вы
>> желаете отказаться от подбного рода оптимизиций -- используйте
>> -fno-strict-aliasing.
>>
>
> Я вот сижу и думаю (нет, это не по поводу этого кода), если даже с полностью
> выключенной оптимизацией компилятор (gcc 4.4) создает код, отказывающийся
> работать, тогда как скомпилированный gcc 4.3 работает - стоит разбираться с
> кодом или это в любом случае регрессия компилятора?

Зависит от.

> Кому-то интересно будет посмотреть?

Давай. Только не два мегабайта кода. Локализуй до 50-100 строк, не больше.


Подробная информация о списке рассылки Sisyphus