// 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");
}
