From c3b8ffdcab64f99a1a58da14673226e3c466b715 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Thu, 30 Aug 2007 11:48:57 +0200 Subject: [PATCH] Added a work-around for nasty GCC bug. --- lib/sorter/s-multiway.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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) -- 2.39.2