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