Subject: [Boost-bugs] [Boost C++ Libraries] #7219: boost::optional<int> gives strict alias warning on GCC 4.4.6, breaks at runtime
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2012-08-09 19:26:20
#7219: boost::optional<int> gives strict alias warning on GCC 4.4.6, breaks at
runtime
----------------------------------------+-----------------------------------
Reporter: Tony.Astolfi@⦠| Owner: fcacciola
Type: Bugs | Status: new
Milestone: To Be Determined | Component: optional
Version: Boost 1.51.0 | Severity: Showstopper
Keywords: |
----------------------------------------+-----------------------------------
Here is my test code:
#include <boost/optional.hpp>
struct my_type
{
#if 1 // change to 0 to see the problem disappear
typedef boost::optional<int> value_type;
#else
typedef boost::optional<int __attribute((__may_alias__))> value_type;
#endif
value_type value_;
void set (int value)
{
value_ = value;
}
value_type get ()
{
return value_;
}
}; // class event
void testCase ()
{
my_type a;
a.set(4);
bool const b = 4 == ( *a.get() );
if( !b ) abort(); // will abort unless 'may_alias' attribute is added
to 'int'
}
Here is my compile line:
g++ -c src/thread/unittest/test_gcc_bug.cpp -o
../../../derived/glnxa64/obj/deployment_server/foundation/util/src/thread/unittest/test_gcc_bug.o
-MD -MF
../../../derived/glnxa64/obj/deployment_server/foundation/util/src/thread/unittest/test_gcc_bug.d
-MP -MT
../../../derived/glnxa64/obj/deployment_server/foundation/util/src/thread/unittest/test_gcc_bug.o
-I../../../src/include -I../../../derived/glnxa64/src/include -I../include
-I../../include
-I//mathworks/hub/3rdparty/R2013a/356881/glnxa64/boost/include
-I//mathworks/hub/3rdparty/R2013a/356141/glnxa64/cpp11compat/include
-I//mathworks/hub/3rdparty/R2013a/356141/glnxa64/cpp11compat/include
-I//mathworks/hub/3rdparty/R2013a/350182/glnxa64/protobuf/include
-I//mathworks/hub/3rdparty/R2013a/350182/glnxa64/tbb/include
-DBOOST_FILESYSTEM_VERSION=2 -DBOOST_ASIO_DISABLE_EVENTFD
-DBOOST_ASIO_DISABLE_EPOLL -DTBB_AVAILABLE -O2 -pipe -pthread -fPIC
-std=c++98 -fvisibility=hidden -g -D_POSIX_C_SOURCE=199506L -fno-omit-
frame-pointer -DNDEBUG -W -Wcast-align -Wall -Wwrite-strings -Wpointer-
arith -Wcast-qual -Wno-unused -Woverloaded-virtual -Wnon-virtual-dtor
-Wno-ignored-qualifiers
I was also able to work around it by changing the return type of certain
optional_base<T> methods (i.e. get_impl()) to 'T
__attribute__((__may_alias__))&' (or whatever the analogous pointer or
reference type is).
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/7219> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:10 UTC