// RUN: %clang_cc1 %s -cl-std=clc++1.0 -triple spir-unknown-unknown -fdeclare-opencl-builtins -finclude-default-header -verify
// RUN: %clang_cc1 %s -cl-std=clc++2021 -triple spir-unknown-unknown -fdeclare-opencl-builtins -finclude-default-header -verify
// RUN: %clang_cc1 %s -cl-std=clc++2021 -cl-ext=-__opencl_c_device_enqueue,-__opencl_c_generic_address_space,-__opencl_c_pipes -triple spir-unknown-unknown -fdeclare-opencl-builtins -finclude-default-header -verify

// expected-no-diagnostics

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");
#if defined(__opencl_c_generic_address_space)
  static_assert(is_same<__remove_address_space<__generic int>::type, int>::value,
                "__generic address space not removed by __remove_address_space");
#endif
  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");
}
