diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-02-08 09:43:28 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-02-08 09:43:28 +0000 |
commit | 7a0dc5b37f36871184c107ec82672cb673e1a0bd (patch) | |
tree | ddafc9dd81bd0c1b71e82df2623414863aea6e61 /boost/aliasing.patch | |
parent | 51d55843333d4cd807a90303054178b229237e9b (diff) |
still need aliasing fixes
Diffstat (limited to 'boost/aliasing.patch')
-rw-r--r-- | boost/aliasing.patch | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/boost/aliasing.patch b/boost/aliasing.patch new file mode 100644 index 000000000000..5ca5ed07ba65 --- /dev/null +++ b/boost/aliasing.patch @@ -0,0 +1,43 @@ +--- misc/boost_1_44_0/boost/function/function_base.hpp ++++ misc/build/boost_1_44_0/boost/function/function_base.hpp +@@ -2,6 +2,7 @@ + + // Copyright Douglas Gregor 2001-2006 + // Copyright Emil Dotchevski 2007 ++// Copyright Dean Michael Berris 2009 + // Use, modification and distribution is subject to the Boost Software License, Version 1.0. + // (See accompanying file LICENSE_1_0.txt or copy at + // http://www.boost.org/LICENSE_1_0.txt) +@@ -44,6 +45,13 @@ + # pragma warning( disable : 4127 ) // "conditional expression is constant" + #endif + ++#if defined(__GNUC__) ++// Because GCC complains of strict aliasing problems, we make it ++// treat the header as a system header, becoming more forgiving with ++// treating implementation details that may be potentially harmful. ++# pragma GCC system_header ++#endif ++ + // Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info. + #ifdef BOOST_NO_STD_TYPEINFO + // Embedded VC++ does not have type_info in namespace std +@@ -314,15 +322,15 @@ + { + if (op == clone_functor_tag || op == move_functor_tag) { + const functor_type* in_functor = +- reinterpret_cast<const functor_type*>(&in_buffer.data); ++ static_cast<const functor_type*>(static_cast<void*>(&in_buffer.data)); + new ((void*)&out_buffer.data) functor_type(*in_functor); + + if (op == move_functor_tag) { +- reinterpret_cast<functor_type*>(&in_buffer.data)->~Functor(); ++ static_cast<functor_type*>(static_cast<void*>(&in_buffer.data))->~Functor(); + } + } else if (op == destroy_functor_tag) { + // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type. +- reinterpret_cast<functor_type*>(&out_buffer.data)->~Functor(); ++ static_cast<functor_type*>(static_cast<void*>(&out_buffer.data))->~Functor(); + } else if (op == check_functor_type_tag) { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; |