1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: libcpp-has-no-threads
10 // ... assertion fails line 34
16 // atomic_compare_exchange_weak(volatile atomic<T>* obj, T* expc, T desr);
20 // atomic_compare_exchange_weak(atomic<T>* obj, T* expc, T desr);
23 #include <type_traits>
26 #include <cmpxchg_loop.h>
27 #include "test_macros.h"
28 #include "atomic_helpers.h"
32 void operator()() const {
34 typedef std::atomic<T> A;
37 std::atomic_init(&a, t);
38 assert(c_cmpxchg_weak_loop(&a, &t, T(2)) == true);
41 assert(std::atomic_compare_exchange_weak(&a, &t, T(3)) == false);
46 typedef std::atomic<T> A;
49 std::atomic_init(&a, t);
50 assert(c_cmpxchg_weak_loop(&a, &t, T(2)) == true);
53 assert(std::atomic_compare_exchange_weak(&a, &t, T(3)) == false);
62 TestEachAtomicType<TestFn>()();