Last active
November 6, 2015 15:19
-
-
Save xgarrido/4adfadaa8f410637b576 to your computer and use it in GitHub Desktop.
Patch file for boost 1.55 and gcc > 4.5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- boost/atomic/detail/cas128strong.hpp | |
+++ boost/atomic/detail/cas128strong.hpp | |
@@ -196,15 +196,17 @@ class base_atomic<T, void, 16, Sign> | |
public: | |
BOOST_DEFAULTED_FUNCTION(base_atomic(void), {}) | |
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0) | |
+ explicit base_atomic(value_type const& v) BOOST_NOEXCEPT | |
{ | |
+ memset(&v_, 0, sizeof(v_)); | |
memcpy(&v_, &v, sizeof(value_type)); | |
} | |
void | |
store(value_type const& value, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT | |
{ | |
- storage_type value_s = 0; | |
+ storage_type value_s; | |
+ memset(&value_s, 0, sizeof(value_s)); | |
memcpy(&value_s, &value, sizeof(value_type)); | |
platform_fence_before_store(order); | |
platform_store128(value_s, &v_); | |
@@ -247,7 +249,9 @@ class base_atomic<T, void, 16, Sign> | |
memory_order success_order, | |
memory_order failure_order) volatile BOOST_NOEXCEPT | |
{ | |
- storage_type expected_s = 0, desired_s = 0; | |
+ storage_type expected_s, desired_s; | |
+ memset(&expected_s, 0, sizeof(expected_s)); | |
+ memset(&desired_s, 0, sizeof(desired_s)); | |
memcpy(&expected_s, &expected, sizeof(value_type)); | |
memcpy(&desired_s, &desired, sizeof(value_type)); | |
--- boost/atomic/detail/gcc-atomic.hpp | |
+++ boost/atomic/detail/gcc-atomic.hpp | |
@@ -958,14 +958,16 @@ class base_atomic<T, void, 16, Sign> | |
public: | |
BOOST_DEFAULTED_FUNCTION(base_atomic(void), {}) | |
- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0) | |
+ explicit base_atomic(value_type const& v) BOOST_NOEXCEPT | |
{ | |
+ memset(&v_, 0, sizeof(v_)); | |
memcpy(&v_, &v, sizeof(value_type)); | |
} | |
void store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT | |
{ | |
- storage_type tmp = 0; | |
+ storage_type tmp; | |
+ memset(&tmp, 0, sizeof(tmp)); | |
memcpy(&tmp, &v, sizeof(value_type)); | |
__atomic_store_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order)); | |
} | |
@@ -980,7 +982,8 @@ class base_atomic<T, void, 16, Sign> | |
value_type exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT | |
{ | |
- storage_type tmp = 0; | |
+ storage_type tmp; | |
+ memset(&tmp, 0, sizeof(tmp)); | |
memcpy(&tmp, &v, sizeof(value_type)); | |
tmp = __atomic_exchange_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order)); | |
value_type res; | |
@@ -994,7 +997,9 @@ class base_atomic<T, void, 16, Sign> | |
memory_order success_order, | |
memory_order failure_order) volatile BOOST_NOEXCEPT | |
{ | |
- storage_type expected_s = 0, desired_s = 0; | |
+ storage_type expected_s, desired_s; | |
+ memset(&expected_s, 0, sizeof(expected_s)); | |
+ memset(&desired_s, 0, sizeof(desired_s)); | |
memcpy(&expected_s, &expected, sizeof(value_type)); | |
memcpy(&desired_s, &desired, sizeof(value_type)); | |
const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, false, | |
@@ -1010,7 +1015,9 @@ class base_atomic<T, void, 16, Sign> | |
memory_order success_order, | |
memory_order failure_order) volatile BOOST_NOEXCEPT | |
{ | |
- storage_type expected_s = 0, desired_s = 0; | |
+ storage_type expected_s, desired_s; | |
+ memset(&expected_s, 0, sizeof(expected_s)); | |
+ memset(&desired_s, 0, sizeof(desired_s)); | |
memcpy(&expected_s, &expected, sizeof(value_type)); | |
memcpy(&desired_s, &desired, sizeof(value_type)); | |
const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, true, | |
- | |
--- boost/thread/pthread/once.hpp | |
+++ boost/thread/pthread/once.hpp | |
@@ -42,7 +42,7 @@ namespace boost | |
} | |
#ifdef BOOST_THREAD_PROVIDES_ONCE_CXX11 | |
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) | |
template<typename Function, class ...ArgTypes> | |
inline void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args); | |
#else | |
@@ -65,7 +65,7 @@ namespace boost | |
private: | |
volatile thread_detail::uintmax_atomic_t epoch; | |
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) | |
template<typename Function, class ...ArgTypes> | |
friend void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args); | |
#else | |
@@ -118,7 +118,7 @@ namespace boost | |
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html | |
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) | |
template<typename Function, class ...ArgTypes> | |
--- boost/thread/pthread/once_atomic.hpp | |
+++ boost/thread/pthread/once_atomic.hpp | |
@@ -115,7 +115,7 @@ namespace boost | |
#endif | |
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
+#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) | |
template<typename Function, class ...ArgTypes> | |
inline void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args) | |
--- boost/thread/win32/once.hpp | |
+++ boost/thread/win32/once.hpp | |
@@ -227,7 +227,7 @@ namespace boost | |
} | |
} | |
-#ifndef BOOST_NO_CXX11_VARIADIC_TEMPLATES | |
+#if !defined BOOST_NO_CXX11_VARIADIC_TEMPLATES && !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) | |
//#if defined(BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR) | |
inline void call_once(once_flag& flag, void (*f)()) | |
{ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment