From 7a0dc5b37f36871184c107ec82672cb673e1a0bd Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Tue, 8 Feb 2011 09:43:28 +0000 Subject: still need aliasing fixes --- boost/aliasing.patch | 43 +++++++++++++++++++++++++++++++++++++++++++ boost/makefile.mk | 2 ++ 2 files changed, 45 insertions(+) create mode 100644 boost/aliasing.patch 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(&in_buffer.data); ++ static_cast(static_cast(&in_buffer.data)); + new ((void*)&out_buffer.data) functor_type(*in_functor); + + if (op == move_functor_tag) { +- reinterpret_cast(&in_buffer.data)->~Functor(); ++ static_cast(static_cast(&in_buffer.data))->~Functor(); + } + } else if (op == destroy_functor_tag) { + // Some compilers (Borland, vc6, ...) are unhappy with ~functor_type. +- reinterpret_cast(&out_buffer.data)->~Functor(); ++ static_cast(static_cast(&out_buffer.data))->~Functor(); + } else if (op == check_functor_type_tag) { + const detail::sp_typeinfo& check_type + = *out_buffer.type.type; diff --git a/boost/makefile.mk b/boost/makefile.mk index fb7c1c222dd5..c7cb3d91efa6 100644 --- a/boost/makefile.mk +++ b/boost/makefile.mk @@ -51,6 +51,8 @@ all: TARFILE_NAME=boost_1_44_0 TARFILE_MD5=f02578f5218f217a9f20e9c30e119c6a PATCH_FILES=$(TARFILE_NAME).patch +# See https://svn.boost.org/trac/boost/ticket/3780 +PATCH_FILES+=aliasing.patch #https://svn.boost.org/trac/boost/ticket/4713 PATCH_FILES+=boost.4713.warnings.patch #https://svn.boost.org/trac/boost/ticket/5119 -- cgit