diff options
| author | Marshall Clow <mclow.lists@gmail.com> | 2016-06-30 15:28:38 +0000 | 
|---|---|---|
| committer | Marshall Clow <mclow.lists@gmail.com> | 2016-06-30 15:28:38 +0000 | 
| commit | e766a87b0170fe9a1ecc1a776fef43bf27aa1294 (patch) | |
| tree | ba67442659006b12a6bd69e6fb322af44c8b0a01 /libcxx | |
| parent | 497677449be6f4a19b6b692dccab3b23e7cfd872 (diff) | |
| download | bcm5719-llvm-e766a87b0170fe9a1ecc1a776fef43bf27aa1294.tar.gz bcm5719-llvm-e766a87b0170fe9a1ecc1a776fef43bf27aa1294.zip | |
Implement LWG#2441: 'Exact-width atomic typedefs should be provided'
llvm-svn: 274236
Diffstat (limited to 'libcxx')
5 files changed, 70 insertions, 1 deletions
| diff --git a/libcxx/include/atomic b/libcxx/include/atomic index a0245eb6ac4..11f2152e5bc 100644 --- a/libcxx/include/atomic +++ b/libcxx/include/atomic @@ -515,6 +515,15 @@ typedef atomic<uint_fast32_t> atomic_uint_fast32_t;  typedef atomic<int_fast64_t>  atomic_int_fast64_t;  typedef atomic<uint_fast64_t> atomic_uint_fast64_t; +typedef atomic<int8_t>   atomic_int8_t; +typedef atomic<uint8_t>  atomic_uint8_t; +typedef atomic<int16_t>  atomic_int16_t; +typedef atomic<uint16_t> atomic_uint16_t; +typedef atomic<int32_t>  atomic_int32_t; +typedef atomic<uint32_t> atomic_uint32_t; +typedef atomic<int64_t>  atomic_int64_t; +typedef atomic<uint64_t> atomic_uint64_t; +  typedef atomic<intptr_t>  atomic_intptr_t;  typedef atomic<uintptr_t> atomic_uintptr_t;  typedef atomic<size_t>    atomic_size_t; @@ -1811,6 +1820,15 @@ typedef atomic<uint_fast32_t> atomic_uint_fast32_t;  typedef atomic<int_fast64_t>  atomic_int_fast64_t;  typedef atomic<uint_fast64_t> atomic_uint_fast64_t; +typedef atomic< int8_t>  atomic_int8_t; +typedef atomic<uint8_t>  atomic_uint8_t; +typedef atomic< int16_t> atomic_int16_t; +typedef atomic<uint16_t> atomic_uint16_t; +typedef atomic< int32_t> atomic_int32_t; +typedef atomic<uint32_t> atomic_uint32_t; +typedef atomic< int64_t> atomic_int64_t; +typedef atomic<uint64_t> atomic_uint64_t; +  typedef atomic<intptr_t>  atomic_intptr_t;  typedef atomic<uintptr_t> atomic_uintptr_t;  typedef atomic<size_t>    atomic_size_t; diff --git a/libcxx/test/std/atomics/atomics.types.generic/integral.pass.cpp b/libcxx/test/std/atomics/atomics.types.generic/integral.pass.cpp index c14c60a9c33..a449dc6d5f5 100644 --- a/libcxx/test/std/atomics/atomics.types.generic/integral.pass.cpp +++ b/libcxx/test/std/atomics/atomics.types.generic/integral.pass.cpp @@ -185,6 +185,15 @@ int main()  #endif  // _LIBCPP_HAS_NO_UNICODE_CHARS      test<std::atomic_wchar_t, wchar_t>(); +	test<std::atomic_int8_t,    int8_t>(); +	test<std::atomic_uint8_t,  uint8_t>(); +	test<std::atomic_int16_t,   int16_t>(); +	test<std::atomic_uint16_t, uint16_t>(); +	test<std::atomic_int32_t,   int32_t>(); +	test<std::atomic_uint32_t, uint32_t>(); +	test<std::atomic_int64_t,   int64_t>(); +	test<std::atomic_uint64_t, uint64_t>(); +	      test<volatile std::atomic_char, char>();      test<volatile std::atomic_schar, signed char>();      test<volatile std::atomic_uchar, unsigned char>(); @@ -201,4 +210,13 @@ int main()      test<volatile std::atomic_char32_t, char32_t>();  #endif  // _LIBCPP_HAS_NO_UNICODE_CHARS      test<volatile std::atomic_wchar_t, wchar_t>(); + +	test<volatile std::atomic_int8_t,    int8_t>(); +	test<volatile std::atomic_uint8_t,  uint8_t>(); +	test<volatile std::atomic_int16_t,   int16_t>(); +	test<volatile std::atomic_uint16_t, uint16_t>(); +	test<volatile std::atomic_int32_t,   int32_t>(); +	test<volatile std::atomic_uint32_t, uint32_t>(); +	test<volatile std::atomic_int64_t,   int64_t>(); +	test<volatile std::atomic_uint64_t, uint64_t>();  } diff --git a/libcxx/test/std/atomics/atomics.types.generic/integral_typedefs.pass.cpp b/libcxx/test/std/atomics/atomics.types.generic/integral_typedefs.pass.cpp index e8fae85fb4b..e4deae1bf0d 100644 --- a/libcxx/test/std/atomics/atomics.types.generic/integral_typedefs.pass.cpp +++ b/libcxx/test/std/atomics/atomics.types.generic/integral_typedefs.pass.cpp @@ -25,6 +25,18 @@  // typedef atomic<char16_t>           atomic_char16_t;  // typedef atomic<char32_t>           atomic_char32_t;  // typedef atomic<wchar_t>            atomic_wchar_t; +// +// typedef atomic<intptr_t>           atomic_intptr_t; +// typedef atomic<uintptr_t>          atomic_uintptr_t; +// +// typedef atomic<int8_t>             atomic_int8_t; +// typedef atomic<uint8_t>            atomic_uint8_t; +// typedef atomic<int16_t>            atomic_int16_t; +// typedef atomic<uint16_t>           atomic_uint16_t; +// typedef atomic<int32_t>            atomic_int32_t; +// typedef atomic<uint32_t>           atomic_uint32_t; +// typedef atomic<int64_t>            atomic_int64_t; +// typedef atomic<uint64_t>           atomic_uint64_t;  #include <atomic>  #include <type_traits> @@ -47,4 +59,17 @@ int main()      static_assert((std::is_same<std::atomic<char16_t>, std::atomic_char16_t>::value), "");      static_assert((std::is_same<std::atomic<char32_t>, std::atomic_char32_t>::value), "");  #endif  // _LIBCPP_HAS_NO_UNICODE_CHARS + +//  Added by LWG 2441 +    static_assert((std::is_same<std::atomic<intptr_t>,  std::atomic_intptr_t>::value), ""); +    static_assert((std::is_same<std::atomic<uintptr_t>, std::atomic_uintptr_t>::value), ""); + +    static_assert((std::is_same<std::atomic<int8_t>,    std::atomic_int8_t>::value), ""); +    static_assert((std::is_same<std::atomic<uint8_t>,   std::atomic_uint8_t>::value), ""); +    static_assert((std::is_same<std::atomic<int16_t>,   std::atomic_int16_t>::value), ""); +    static_assert((std::is_same<std::atomic<uint16_t>,  std::atomic_uint16_t>::value), ""); +    static_assert((std::is_same<std::atomic<int32_t>,   std::atomic_int32_t>::value), ""); +    static_assert((std::is_same<std::atomic<uint32_t>,  std::atomic_uint32_t>::value), ""); +    static_assert((std::is_same<std::atomic<int64_t>,   std::atomic_int64_t>::value), ""); +    static_assert((std::is_same<std::atomic<uint64_t>,  std::atomic_uint64_t>::value), "");  } diff --git a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_helpers.h b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_helpers.h index 2fb71c2a5fe..482b7319dab 100644 --- a/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_helpers.h +++ b/libcxx/test/std/atomics/atomics.types.operations/atomics.types.operations.req/atomic_helpers.h @@ -43,6 +43,14 @@ struct TestEachIntegralType {          TestFunctor<char16_t>()();          TestFunctor<char32_t>()();  #endif +		TestFunctor<  int8_t>()(); +		TestFunctor< uint8_t>()(); +		TestFunctor< int16_t>()(); +		TestFunctor<uint16_t>()(); +		TestFunctor< int32_t>()(); +		TestFunctor<uint32_t>()(); +		TestFunctor< int64_t>()(); +		TestFunctor<uint64_t>()();      }  }; diff --git a/libcxx/www/cxx1z_status.html b/libcxx/www/cxx1z_status.html index 5918a2136fc..c121e146587 100644 --- a/libcxx/www/cxx1z_status.html +++ b/libcxx/www/cxx1z_status.html @@ -269,7 +269,7 @@  	<tr><td><a href="http://wg21.link/LWG2422">2422</a></td><td>std::numeric_limits<T>::is_modulo description: "most machines" errata</td><td>Oulu</td><td></td></tr>  	<tr><td><a href="http://wg21.link/LWG2426">2426</a></td><td>Issue about compare_exchange</td><td>Oulu</td><td></td></tr>  	<tr><td><a href="http://wg21.link/LWG2436">2436</a></td><td>Comparators for associative containers should always be CopyConstructible</td><td>Oulu</td><td>Complete</td></tr> -	<tr><td><a href="http://wg21.link/LWG2441">2441</a></td><td>Exact-width atomic typedefs should be provided</td><td>Oulu</td><td></td></tr> +	<tr><td><a href="http://wg21.link/LWG2441">2441</a></td><td>Exact-width atomic typedefs should be provided</td><td>Oulu</td><td>Complete</td></tr>  	<tr><td><a href="http://wg21.link/LWG2451">2451</a></td><td>[fund.ts.v2] optional should 'forward' T's implicit conversions</td><td>Oulu</td><td></td></tr>  	<tr><td><a href="http://wg21.link/LWG2509">2509</a></td><td>[fund.ts.v2] any_cast doesn't work with rvalue reference targets and cannot move with a value target</td><td>Oulu</td><td></td></tr>  	<tr><td><a href="http://wg21.link/LWG2516">2516</a></td><td>[fund.ts.v2] Public "exposition only" members in observer_ptr</td><td>Oulu</td><td></td></tr> | 

