]> git.saurik.com Git - bison.git/commit
variants: avoid type punning issue
authorTheophile Ranquet <ranquet@lrde.epita.fr>
Tue, 29 Jan 2013 21:35:04 +0000 (22:35 +0100)
committerTheophile Ranquet <ranquet@lrde.epita.fr>
Fri, 1 Feb 2013 14:06:20 +0000 (15:06 +0100)
commitbe6fa942acae21a4a025bac5e339451be6ad136d
tree1710e06975e3bca48f607d070dc077d62cbeeb2e
parentf29f8af3edf5b678f812e36ea4416983467e9189
variants: avoid type punning issue

This is based on what is recommended by both Scott Meyers, in 'Effective
C++', and Andrei Alexandrescu and Herb Sutter in 'C++ Coding Standards'.

Use a static_cast on void* rather than directly use a reinterpret_cast,
which can have nefarious effects on objects.  However, even though following
this guideline is good practice in general, I am not quite sure how relevant
it is when applied to conversions from POD to objects.  Actually, it might
very well be the opposite: isn't this exactly what reinterpret_cast is for?
What we really want *is* to transmit the memory map as a series of bytes,
which, if I am correct, falls into the kind of "low level" hack for which
this cast is meant.

In any case, this silences the warning, which will be greatly appreciated by
anyone using variants with a compiler supporting -fstrict-aliasing.

* data/variant.hh (as): Here.
* tests/c++.at (Exception safety, C++ Variant-based Symbols, Variants):
Don't use NO_STRICT_ALIAS_CXXFLAGS (revert commit ddb9db15), as type punning
is no longer an issue.
* tests/atlocal.in, configure.ac (NO_STRICT_ALIAS_CXXFLAGS): Remove
definition.
* examples/local.mk (NO_STRICT_ALIAS_CXXFLAGS): Remove from AM_CXXFLAGS.
* doc/bison.texi: Don't mention type punning issues.
configure.ac
data/variant.hh
doc/bison.texi
examples/local.mk
tests/atlocal.in
tests/c++.at