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

Victor Forsyuk force на altlinux.org
Чт Авг 13 18:44:15 MSD 2009


2009/8/7 Kirill A. Shutemov <kirill на shutemov.name>

> 2009/8/7 Serge Ryabchun <sr на osdn.org.ua>:
> > Это не повод собирать не верный код:
> >
> > [sr на 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 на sr 6]$ ./a.out
> > TEST 00: 0.000000
> > [sr на sr 6]$
> > [sr на 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 на sr 6]$ ./a.out
> > TEST 00: 3.140000
>
> Это ничего не значит. Точнее значит лишь то, что работа оптимизатора
> различается между версиями компилятора.
>
> То, что криво написаный код иногда работает -- не аргумент. Если вы
> желаете отказаться от подбного рода оптимизиций -- используйте
> -fno-strict-aliasing.
>
>
Я вот сижу и думаю (нет, это не по поводу этого кода), если даже с полностью
выключенной оптимизацией компилятор (gcc 4.4) создает код, отказывающийся
работать, тогда как скомпилированный gcc 4.3 работает - стоит разбираться с
кодом или это в любом случае регрессия компилятора?

Кому-то интересно будет посмотреть?
----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.altlinux.org/pipermail/sisyphus/attachments/20090813/fdedcc70/attachment.html>


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