summaryrefslogtreecommitdiff
path: root/boost
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-02-08 09:43:28 +0000
committerCaolán McNamara <caolanm@redhat.com>2011-02-08 09:43:28 +0000
commit7a0dc5b37f36871184c107ec82672cb673e1a0bd (patch)
treeddafc9dd81bd0c1b71e82df2623414863aea6e61 /boost
parent51d55843333d4cd807a90303054178b229237e9b (diff)
still need aliasing fixes
Diffstat (limited to 'boost')
-rw-r--r--boost/aliasing.patch43
-rw-r--r--boost/makefile.mk2
2 files changed, 45 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;
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