re PR libstdc++/46914 (std::atomic<int*>::exchange(...) doesn't store correct value.)
2011-02-01 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/46914 * include/bits/atomic_0.h (_ATOMIC_STORE_, _ATOMIC_MODIFY_, _ATOMIC_CMPEXCHNG_): Rename __v -> __w, and __m -> __n, to avoid name conflicts. From-SVN: r169494
This commit is contained in:
parent
04f089357e
commit
72660097ec
@ -1,3 +1,10 @@
|
||||
2011-02-01 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR libstdc++/46914
|
||||
* include/bits/atomic_0.h (_ATOMIC_STORE_, _ATOMIC_MODIFY_,
|
||||
_ATOMIC_CMPEXCHNG_): Rename __v -> __w, and __m -> __n, to
|
||||
avoid name conflicts.
|
||||
|
||||
2011-02-01 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
PR libstdc++/47560
|
||||
|
@ -1,6 +1,6 @@
|
||||
// -*- C++ -*- header.
|
||||
|
||||
// Copyright (C) 2008, 2009, 2010
|
||||
// Copyright (C) 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
@ -68,39 +68,39 @@ namespace __atomic0
|
||||
atomic_flag_clear_explicit(__g, __x); \
|
||||
__r; })
|
||||
|
||||
#define _ATOMIC_STORE_(__a, __m, __x) \
|
||||
#define _ATOMIC_STORE_(__a, __n, __x) \
|
||||
({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
|
||||
__i_type* __p = &_ATOMIC_MEMBER_; \
|
||||
__typeof__(__m) __v = (__m); \
|
||||
__typeof__(__n) __w = (__n); \
|
||||
__atomic_flag_base* __g = __atomic_flag_for_address(__p); \
|
||||
__atomic_flag_wait_explicit(__g, __x); \
|
||||
*__p = __v; \
|
||||
*__p = __w; \
|
||||
atomic_flag_clear_explicit(__g, __x); \
|
||||
__v; })
|
||||
__w; })
|
||||
|
||||
#define _ATOMIC_MODIFY_(__a, __o, __m, __x) \
|
||||
#define _ATOMIC_MODIFY_(__a, __o, __n, __x) \
|
||||
({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
|
||||
__i_type* __p = &_ATOMIC_MEMBER_; \
|
||||
__typeof__(__m) __v = (__m); \
|
||||
__typeof__(__n) __w = (__n); \
|
||||
__atomic_flag_base* __g = __atomic_flag_for_address(__p); \
|
||||
__atomic_flag_wait_explicit(__g, __x); \
|
||||
__i_type __r = *__p; \
|
||||
*__p __o __v; \
|
||||
*__p __o __w; \
|
||||
atomic_flag_clear_explicit(__g, __x); \
|
||||
__r; })
|
||||
|
||||
#define _ATOMIC_CMPEXCHNG_(__a, __e, __m, __x) \
|
||||
#define _ATOMIC_CMPEXCHNG_(__a, __e, __n, __x) \
|
||||
({typedef __typeof__(_ATOMIC_MEMBER_) __i_type; \
|
||||
__i_type* __p = &_ATOMIC_MEMBER_; \
|
||||
__typeof__(__e) __q = (__e); \
|
||||
__typeof__(__m) __v = (__m); \
|
||||
__typeof__(__n) __w = (__n); \
|
||||
bool __r; \
|
||||
__atomic_flag_base* __g = __atomic_flag_for_address(__p); \
|
||||
__atomic_flag_wait_explicit(__g, __x); \
|
||||
__i_type __t = *__p; \
|
||||
if (*__q == __t) \
|
||||
{ \
|
||||
*__p = (__i_type)__v; \
|
||||
*__p = (__i_type)__w; \
|
||||
__r = true; \
|
||||
} \
|
||||
else { *__q = __t; __r = false; } \
|
||||
|
Loading…
Reference in New Issue
Block a user