summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2012-03-07 07:41:23 +0400
committerIvan Maidanski <ivmai@mail.ru>2012-03-07 19:36:59 +0400
commit07bc4d0ab7cdaa1ce73a32437bc6bc6e41c57dcb (patch)
treeb44f351d28a5b935c3facc3b45509f5ffd3256df
parent97b97ed51d7cd5aba51164f8691c4840e7506a15 (diff)
downloadlibatomic_ops-07bc4d0ab7cdaa1ce73a32437bc6bc6e41c57dcb.tar.gz
Fix AO_stack_push_release to workaround bug in clang-1.1/x86
* src/atomic_ops_stack.c (AO_stack_push_release): Make "cptr" local variable volatile to workaround a bug in clang-1.1/x86 compiler; add comment.
-rw-r--r--src/atomic_ops_stack.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/atomic_ops_stack.c b/src/atomic_ops_stack.c
index 2f03145..dd29848 100644
--- a/src/atomic_ops_stack.c
+++ b/src/atomic_ops_stack.c
@@ -242,7 +242,13 @@ void AO_stack_push_release(AO_stack_t *list, AO_t *element)
AO_t *AO_stack_pop_acquire(AO_stack_t *list)
{
- AO_t *cptr;
+# ifdef __clang__
+ AO_t *volatile cptr;
+ /* Use volatile to workaround a bug in */
+ /* clang-1.1/x86 causing test_stack failure. */
+# else
+ AO_t *cptr;
+# endif
AO_t next;
AO_t cversion;