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