mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:50:50 +08:00
re PR c++/60272 (atomic<>::compare_exchange_weak has spurious store and can cause race conditions)
PR c++/60272 * builtins.c (expand_builtin_atomic_compare_exchange): Always make a new pseudo for OLDVAL. From-SVN: r207972
This commit is contained in:
parent
aa637f667f
commit
2fdc29e8c7
@ -1,3 +1,9 @@
|
||||
2014-02-20 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR c++/60272
|
||||
* builtins.c (expand_builtin_atomic_compare_exchange): Always make
|
||||
a new pseudo for OLDVAL.
|
||||
|
||||
2014-02-20 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/57896
|
||||
|
@ -5332,9 +5332,12 @@ expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp,
|
||||
|
||||
if (target == const0_rtx)
|
||||
target = NULL;
|
||||
oldval = expect;
|
||||
|
||||
if (!expand_atomic_compare_and_swap (&target, &oldval, mem, oldval, desired,
|
||||
/* Lest the rtl backend create a race condition with an imporoper store
|
||||
to memory, always create a new pseudo for OLDVAL. */
|
||||
oldval = NULL;
|
||||
|
||||
if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
|
||||
is_weak, success, failure))
|
||||
return NULL_RTX;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user