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//===----------------------------------------------------------------------===// 94777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant 104777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// <atomic> 114777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant 124777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// template <class T> 134777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// bool 144777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// atomic_is_lock_free(const volatile atomic<T>* obj); 154777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// 164777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// template <class T> 174777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// bool 184777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant// atomic_is_lock_free(const atomic<T>* obj); 194777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant 204777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant#include <atomic> 214777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant 224777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnanttemplate <class T> 234777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnantvoid 244777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnanttest() 254777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant{ 264777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant typedef std::atomic<T> A; 2774f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant A t; 2874f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant bool b1 = std::atomic_is_lock_free(static_cast<const A*>(&t)); 2974f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant volatile A vt; 3074f4da7219100afcff4baab33d12910d29eb127eHoward Hinnant bool b2 = std::atomic_is_lock_free(static_cast<const volatile A*>(&vt)); 314777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant} 324777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant 334777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnantstruct A 344777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant{ 354777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant char _[4]; 364777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant}; 374777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant 384777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnantint main() 394777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant{ 404777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<A>(); 414777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<char>(); 424777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<signed char>(); 434777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<unsigned char>(); 444777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<short>(); 454777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<unsigned short>(); 464777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<int>(); 474777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<unsigned int>(); 484777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<long>(); 494777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<unsigned long>(); 504777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<long long>(); 514777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<unsigned long long>(); 524777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<wchar_t>(); 534777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant#ifndef _LIBCPP_HAS_NO_UNICODE_CHARS 544777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<char16_t>(); 554777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<char32_t>(); 564777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant#endif // _LIBCPP_HAS_NO_UNICODE_CHARS 574777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<int*>(); 584777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant test<const int*>(); 594777bf2799c59a847691094ae2c43df986ab55ceHoward Hinnant} 60