15fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant//===----------------------------------------------------------------------===// 25fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// 35fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// The LLVM Compiler Infrastructure 45fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// 55fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 65fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 75fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// 85fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant//===----------------------------------------------------------------------===// 9cedb7fcc10556aaf4302917913c672b1bc6a1db0Daniel Dunbar// 10cedb7fcc10556aaf4302917913c672b1bc6a1db0Daniel Dunbar// This test uses new symbols that were not defined in the libc++ shipped on 11cedb7fcc10556aaf4302917913c672b1bc6a1db0Daniel Dunbar// darwin11 and darwin12: 12cedb7fcc10556aaf4302917913c672b1bc6a1db0Daniel Dunbar// XFAIL: with_system_lib=x86_64-apple-darwin11 13cedb7fcc10556aaf4302917913c672b1bc6a1db0Daniel Dunbar// XFAIL: with_system_lib=x86_64-apple-darwin12 145fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant 155fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// <memory> 165fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant 175fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// shared_ptr 185fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant 195fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// template <class T> 205fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// shared_ptr<T> 215fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant// atomic_exchange_explicit(shared_ptr<T>* p, shared_ptr<T> r) 225fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant 235fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant#include <memory> 245fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant#include <cassert> 255fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant 265fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnantint main() 275fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant{ 285fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant#if __has_feature(cxx_atomic) 295fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant { 305fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant std::shared_ptr<int> p(new int(4)); 315fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant std::shared_ptr<int> r(new int(3)); 325fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant r = std::atomic_exchange_explicit(&p, r, std::memory_order_seq_cst); 335fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant assert(*p == 3); 345fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant assert(*r == 4); 355fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant } 365fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant#endif 375fec82dc0db3623546038e4a86baa44f749e554fHoward Hinnant} 38