diff options
author | Jeffrey Walton <noloader@gmail.com> | 2015-08-01 19:00:31 -0400 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2015-08-01 19:00:31 -0400 |
commit | b44546be11c235c108a97c798fd6602c7cdaa400 (patch) | |
tree | 639ee6546a1e04d6ac2ac425aae0725d2e7e5b36 /smartptr.h | |
parent | 390d27b6cddcc82145352034354e5c0fa39ab821 (diff) | |
download | cryptopp-git-b44546be11c235c108a97c798fd6602c7cdaa400.tar.gz |
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.
Diffstat (limited to 'smartptr.h')
-rw-r--r-- | smartptr.h | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -3,7 +3,6 @@ #include "config.h" #include "stdcpp.h" -#include "misc.h" #include "trap.h" NAMESPACE_BEGIN(CryptoPP) @@ -52,8 +51,11 @@ template <class T> simple_ptr<T>::~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 T> class member_ptr |