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

Kirill A. Shutemov kirill на shutemov.name
Пт Авг 7 19:43:24 MSD 2009


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.

>
> 2009/8/7 Alexey Rusakov <ktirf at altlinux.org>:
>> В Птн, 07/08/2009 в 12:02 +0300, Roman Savochenko пишет:
>>> Kirill A. Shutemov wrote:
>>> > 2009/8/7 Roman Savochenko <rom_as at diyaorg.dp.ua>:
>>> >
>>> >> Kirill A. Shutemov wrote:
>>> >>
>>> >>>>> И во всех трёх вариантах нарушили strict aliasing. Используйте union.
>>> >>>>>
>>> >>>>  ним работает, но это не решение, поскольку приведенные мною обороты
>>> >>>> распространены и я не уверен что подобных проблем нет в других частях
>>> >>>> моей,
>>> >>>> в общем-то не маленькой, программы.
>>> >>>>
>>> >>>>
>>> >>> Есть повод исправить код.
>>> >>>
>>> >>>
>>> >> Я не считаю его ошибочным.
>>> >>
>>> > Strict aliasing rule -- часть стандарта C99. Если вы хотите писать
>>> > быстрый переносимый
>>> > код, то вам стоит следовать этому правилу.
>>> >
>>> Ничего про стандартность тут
>>> http://en.wikipedia.org/wiki/Aliasing_(computing) не увидил. А про то
>>> что существуют конфликты с оптимизаторами там есть.
>> Смотрите внимательнее:
>> "...the ISO standard for the C programming language (including its newer
>> C99 edition) specifies that it is illegal (with some exceptions) for
>> pointers of different types to reference the same memory location."
>>
>> --
>>  Alexey "Ktirf" Rusakov
>>  GNOME Project
>>  ALT Linux Team
>>
>> _______________________________________________
>> Sisyphus mailing list
>> Sisyphus at lists.altlinux.org
>> https://lists.altlinux.org/mailman/listinfo/sisyphus
>>
>
>
>
> --
> Рябчун Сергей <serge.ryabchun at gmail.com>
> _______________________________________________
> Sisyphus mailing list
> Sisyphus at lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/sisyphus


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