From 5f2c32af37152da7607c25df82b392597d05a3c9 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Fri, 31 Jul 2015 10:05:14 -0400 Subject: [PATCH] Cut-over to inline assembly to tame the optimizer --- smartptr.h | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/smartptr.h b/smartptr.h index 82d361f7..82937333 100644 --- a/smartptr.h +++ b/smartptr.h @@ -45,21 +45,18 @@ private: void operator=(const simple_ptr& rhs); // assignment not allowed }; -#if GCC_OPTIMIZE_AWARE -# pragma GCC push_options -# pragma GCC optimize ("-O0") -#endif - -// set m_p to NULL so double destruction (which might occur in Singleton) will be harmless +// Set m_p to NULL so double destruction (which might occur in Singleton) will be harmless template simple_ptr::~simple_ptr() { delete m_p; m_p = NULL; -} - -#if GCC_OPTIMIZE_AWARE -# pragma GCC pop_options + +#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 {