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:
Richard Henderson 2014-02-20 16:11:43 -08:00 committed by Richard Henderson
parent aa637f667f
commit 2fdc29e8c7
2 changed files with 11 additions and 2 deletions

View File

@ -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

View File

@ -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;