From b44546be11c235c108a97c798fd6602c7cdaa400 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 1 Aug 2015 19:00:31 -0400 Subject: Revert "Hid inline assembly behind a macro". The MEMORY_BARRIER code is OK, and the use of inline assembly code is OK to tame the optimizer is OK; but its confusing because the interactions are not readily apparent. --- smartptr.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'smartptr.h') diff --git a/smartptr.h b/smartptr.h index db5441fe..057f5213 100644 --- a/smartptr.h +++ b/smartptr.h @@ -3,7 +3,6 @@ #include "config.h" #include "stdcpp.h" -#include "misc.h" #include "trap.h" NAMESPACE_BEGIN(CryptoPP) @@ -52,8 +51,11 @@ template simple_ptr::~simple_ptr() delete m_p; m_p = NULL; - // https://github.com/weidai11/cryptopp/issues/6 - MEMORY_BARRIER(); +#ifdef __GNUC__ + // From Andrew Haley (GCC Dev), to tame the optimizer so the assignment is always performed. + // See "Disable optimizations in one function" on the GCC mailing list. + asm volatile ("" : : : "memory"); +#endif } template class member_ptr -- cgit v1.2.1