atomic_store.pass.cpp revision cedb7fcc10556aaf4302917913c672b1bc6a1db0
1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//===----------------------------------------------------------------------===//
2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//
3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//
5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//
8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//===----------------------------------------------------------------------===//
9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)//
10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// This test uses new symbols that were not defined in the libc++ shipped on
11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// darwin11 and darwin12:
12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// XFAIL: with_system_lib=x86_64-apple-darwin11
13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// XFAIL: with_system_lib=x86_64-apple-darwin12
14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// <memory>
16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// shared_ptr
18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// template <class T>
20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// void
21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// atomic_store(shared_ptr<T>* p, shared_ptr<T> r)
22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include <memory>
24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include <cassert>
25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)int main()
27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){
28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#if __has_feature(cxx_atomic)
29591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    {
30591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        std::shared_ptr<int> p;
31591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        std::shared_ptr<int> r(new int(3));
32591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        std::atomic_store(&p, r);
33591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        assert(*p == *r);
34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif
36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}
37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)