atomic_load.pass.cpp revision 5fec82dc0db3623546038e4a86baa44f749e554f
16e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner//===----------------------------------------------------------------------===//
26e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner//
36e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner//                     The LLVM Compiler Infrastructure
46e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner//
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is dual licensed under the MIT and the University of Illinois Open
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// Source Licenses. See LICENSE.TXT for details.
76e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner//
86e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner//===----------------------------------------------------------------------===//
96e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
106e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// <memory>
116e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
126e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// shared_ptr
136e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner
146e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// template <class T>
156e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// shared_ptr<T>
166e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner// atomic_load(const shared_ptr<T>* p)
17ac5802bca0285eee49c1c372846552823d819181Benjamin Kramer
18dd9d38d57bbd2161e04af90a9e03011afb039b16Chandler Carruth#include <memory>
19398b40671b13018f88371b74822fa8ee2638577eOwen Anderson#include <cassert>
2081cf4325698b48b02eddab921ac333c7f25005c3Jeffrey Yasskin
2181cf4325698b48b02eddab921ac333c7f25005c3Jeffrey Yasskinint main()
22fb3af88ba75898896714d49c608b8daa4f106636Dan Gohman{
23476b242fe7a61e5f9ac6214b0bc5c680d24f152eNick Lewycky#if __has_feature(cxx_atomic)
24724f6751442e2006856a9365ef3d3bc6f1b31c98Chris Lattner    {
25724f6751442e2006856a9365ef3d3bc6f1b31c98Chris Lattner        std::shared_ptr<int> p(new int(3));
26724f6751442e2006856a9365ef3d3bc6f1b31c98Chris Lattner        std::shared_ptr<int> q = std::atomic_load(&p);
276e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner        assert(*q == *p);
28dd9d38d57bbd2161e04af90a9e03011afb039b16Chandler Carruth    }
29345b378309eabd74a7a43f095dca9a4894bc371eDuncan Sands#endif
30d06c59821a1ca0191ea8a326a18509808a02ed03Torok Edwin}
316e94c00ab29e654125e845f3bce692a3764c1c11Chris Lattner