14777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//===----------------------------------------------------------------------===//
24777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//
34777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//                     The LLVM Compiler Infrastructure
44777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//
54777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
64777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
74777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//
84777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//===----------------------------------------------------------------------===//
97112dae6acac544a0271a85d95342c583441e2d1Dan Albert//
107112dae6acac544a0271a85d95342c583441e2d1Dan Albert// UNSUPPORTED: libcpp-has-no-threads
114777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant
124777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// <atomic>
134777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant
144777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// template <class T>
154777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//     bool
164777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//     atomic_is_lock_free(const volatile atomic<T>* obj);
174777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//
184777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// template <class T>
194777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//     bool
204777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant//     atomic_is_lock_free(const atomic<T>* obj);
214777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant
224777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant#include <atomic>
234777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant
244777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnanttemplate <class T>
254777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnantvoid
264777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnanttest()
274777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant{
284777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    typedef std::atomic<T> A;
2974f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant    A t;
3074f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant    bool b1 = std::atomic_is_lock_free(static_cast<const A*>(&t));
3174f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant    volatile A vt;
3274f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant    bool b2 = std::atomic_is_lock_free(static_cast<const volatile A*>(&vt));
334777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant}
344777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant
354777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnantstruct A
364777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant{
374777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    char _[4];
384777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant};
394777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant
404777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnantint main()
414777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant{
424777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<A>();
434777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<char>();
444777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<signed char>();
454777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<unsigned char>();
464777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<short>();
474777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<unsigned short>();
484777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<int>();
494777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<unsigned int>();
504777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<long>();
514777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<unsigned long>();
524777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<long long>();
534777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<unsigned long long>();
544777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<wchar_t>();
554777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
564777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<char16_t>();
574777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<char32_t>();
584777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant#endif  // _LIBCPP_HAS_NO_UNICODE_CHARS
594777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<int*>();
604777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant    test<const int*>();
614777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant}
62