| // RUN: %clang_cc1 %s -cl-std=clc++ -fdeclare-opencl-builtins -finclude-default-header |
| |
| template<typename T, typename U> |
| struct is_same { |
| static const bool value = false; |
| }; |
| |
| template<typename T> |
| struct is_same<T, T> { |
| static const bool value = true; |
| }; |
| |
| void test_is_same() { |
| static_assert(is_same<int, int>::value); |
| static_assert(!is_same<int, float>::value); |
| static_assert(!is_same<__private int, int>::value); |
| } |
| |
| void test_remove_address_space() { |
| static_assert(is_same<__remove_address_space<int>::type, int>::value, |
| "type without an address space unexpectedly modified by __remove_address_space"); |
| static_assert(is_same<__remove_address_space<__generic int>::type, int>::value, |
| "__generic address space not removed by __remove_address_space"); |
| static_assert(is_same<__remove_address_space<__global char>::type, char>::value, |
| "__global address space not removed by __remove_address_space"); |
| static_assert(is_same<__remove_address_space<__private ulong>::type, ulong>::value, |
| "__private address space not removed by __remove_address_space"); |
| static_assert(is_same<__remove_address_space<__local short>::type, short>::value, |
| "__local address space not removed by __remove_address_space"); |
| static_assert(is_same<__remove_address_space<__constant int3>::type, int3>::value, |
| "__constant address space not removed by __remove_address_space"); |
| static_assert(is_same<__remove_address_space<const volatile __global int>::type, const volatile int>::value, |
| "non-address-space qualifiers inappropriately removed by __remove_address_space"); |
| } |