Dimitry Andric added the comment:

Note that gcc has documented accessing union members in this way as an 
"implementation defined" feature:
https://gcc.gnu.org/onlinedocs/gcc/Structures-unions-enumerations-and-bit-fields-implementation.html#Structures-unions-enumerations-and-bit-fields-implementation

They specifically mention an example that is very similar to the dtoa pattern 
as being allowed under *their* implementation, here:
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Type-punning

However, whether that means that it is generally allowed by all standards is 
unfortunately still rather vague.  I have seen more than one complaint that the 
standards committees should make this very explicit, instead of weaseling it 
into post-release footnotes.

That said, I'd like to reply to some other posters here.

Eric V. Smith writes:
> At most, I think Mark's idea to use -fno-strict-aliasing only on dtoa.c and 
> nowhere else would be the better approach.

Indeed, this is exactly the solution I chose for FreeBSD.  Just the one file 
that needs it is compiled with -fno-strict-aliasing.  The caveat is that this 
might not work when link-time optimization is in effect.

Serhiy Storchaka writes:
> Could we use Clang specific pragma in dtoa.c rather than a compiler option?

Unfortunately, as far as I know, clang still does not support function-level 
optimization pragmas.  Maybe it was implemented recently, but then you would 
still have to have a workaround for older versions.

STINNER Victor writes:
> If we decide to go for the -fno-strict-aliasing only for dtoa.c, I suggest to 
> use it also for GCC. GCC might decide to also optimize dtoa.c further in the 
> future.

Theoretically they could, but as I pointed out above, they explicitly document 
this as a feature of their union implementation.  I estimate the probability of 
them dropping this in the future to be near zero.

> I don't think that the flag has a major impact on performance if it's 
> restricted to dtoa.c, and it would simplify the build system to only have 
> "per compiler" flags. (Ex: Does ICC also "miscompile" dtoa?)

Disabling strict aliasing for just that file, or even just the one function it 
applies to (by splitting it off to a separate file, for instance) should not 
result in different assembly output, unless the compiler is very old and/or 
dumb.

> FreeBSD uses the following syntax to only add the flag on a specific C file. 
> Does it work with GNU and BSD make? (is it a "portable" syntax?)
> 
>    CFLAGS.gdtoa_${src}+=-fno-strict-aliasing

No, this is specifically a feature of BSD's bsd.sys.mk infrastructure.  It's 
most likely not compatible with GNU make.

----------
nosy: +dim

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30124>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to