Index: libgcc/crtstuff.c =================================================================== --- libgcc/crtstuff.c (revision 241611) +++ libgcc/crtstuff.c (working copy) @@ -273,41 +273,47 @@ STATIC func_ptr __TMC_LIST__[] # ifdef HAVE_GAS_HIDDEN extern func_ptr __TMC_END__[] __attribute__((__visibility__ ("hidden"))); # endif static inline void deregister_tm_clones (void) { void (*fn) (void *); #ifdef HAVE_GAS_HIDDEN - if (__TMC_END__ - __TMC_LIST__ == 0) + func_ptr *end = __TMC_END__; + // Do not optimize the comparison to false. + __asm ("" : "+g" (end)); + if (__TMC_LIST__ == end) return; #else if (__TMC_LIST__[0] == NULL) return; #endif fn = _ITM_deregisterTMCloneTable; __asm ("" : "+r" (fn)); if (fn) fn (__TMC_LIST__); } static inline void register_tm_clones (void) { void (*fn) (void *, size_t); size_t size; #ifdef HAVE_GAS_HIDDEN - size = (__TMC_END__ - __TMC_LIST__) / 2; + func_ptr *end = __TMC_END__; + // Do not optimize the comparison to false. + __asm ("" : "+g" (end)); + size = (end - __TMC_LIST__) / 2; #else for (size = 0; __TMC_LIST__[size * 2] != NULL; size++) continue; #endif if (size == 0) return; fn = _ITM_registerTMCloneTable; __asm ("" : "+r" (fn)); if (fn)