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
2 changed files with 11 additions and 2 deletions
|
@ -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…
Add table
Reference in a new issue