From: Martin Mares Date: Thu, 30 Aug 2007 09:48:57 +0000 (+0200) Subject: Added a work-around for nasty GCC bug. X-Git-Tag: holmes-import~506^2~13^2~69 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=c3b8ffdcab64f99a1a58da14673226e3c466b715;p=libucw.git Added a work-around for nasty GCC bug. --- diff --git a/lib/sorter/s-multiway.h b/lib/sorter/s-multiway.h index fef2a3f8..c22af45e 100644 --- a/lib/sorter/s-multiway.h +++ b/lib/sorter/s-multiway.h @@ -37,7 +37,15 @@ static inline void P(update_tree)(P(key) *keys, P(mwt_node) *tree, uns i) * the tree is the same, the actual key value can differ. */ } - ASSERT(tree[1].i < 16); +#if defined(__GNUC__) && (__GNUC__ * 1000 + __GNUC_MINOR__ < 4002) + /* + * This function sometimes triggers optimizer bugs in GCC 4.1.1 and + * possibly also earlier versions, leading to an assumption that tree[1] + * does not change during this function. We add an explicit memory barrier + * as a work-around. Ugh. + */ + asm volatile ("" : : : "memory"); +#endif } static inline void P(set_tree)(P(key) *keys, P(mwt_node) *tree, uns i, int val)