atomic_exchange_explicit.pass.cpp revision cedb7fcc10556aaf4302917913c672b1bc6a1db0
1fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com//===----------------------------------------------------------------------===// 2fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// 3fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// The LLVM Compiler Infrastructure 4fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// 5fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// This file is dual licensed under the MIT and the University of Illinois Open 6fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// Source Licenses. See LICENSE.TXT for details. 7b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com// 8fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com//===----------------------------------------------------------------------===// 9fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// 10fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// This test uses new symbols that were not defined in the libc++ shipped on 11fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com// darwin11 and darwin12: 1215fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com// XFAIL: with_system_lib=x86_64-apple-darwin11 1315fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com// XFAIL: with_system_lib=x86_64-apple-darwin12 1415fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com 15b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com// <memory> 16b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 1715fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com// shared_ptr 1815fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com 1915fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com// template <class T> 2047580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com// shared_ptr<T> 2115fa138f2276a77679530fb608463ff5b4133f7bcaryclark@google.com// atomic_exchange_explicit(shared_ptr<T>* p, shared_ptr<T> r) 22fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com 2347580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com#include <memory> 2447580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com#include <cassert> 2547580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com 2647580694fbe974a065caf7c39c3d2075708c2018caryclark@google.comint main() 2747580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com{ 28f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com#if __has_feature(cxx_atomic) 290b7da433fe0eaa2833d1b2900715b013b36d93dacaryclark@google.com { 308f9f468b0555e95b8fc3cf4e6ee1f1fbf5492a1bcaryclark@google.com std::shared_ptr<int> p(new int(4)); 3173ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com std::shared_ptr<int> r(new int(3)); 32a461ff0866526bc51dbd4c4f9f066a727ec21510caryclark@google.com r = std::atomic_exchange_explicit(&p, r, std::memory_order_seq_cst); 3347580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com assert(*p == 3); 3445a8fc6a8b00451f807783f2a6ec640e9bcc7256caryclark@google.com assert(*r == 4); 35beda389e646d6be3cfef853584a78ca8ba39d0fccaryclark@google.com } 3647580694fbe974a065caf7c39c3d2075708c2018caryclark@google.com#endif 3731143cf37fa38dc98f71c71e518ecc21c83b5e27caryclark@google.com} 38fa0588ff672564af1c235a63589573829035a60bcaryclark@google.com