Skip to content

[HIP] Fix return type in __clang_hip_cmath.h #139697

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions clang/lib/Headers/__clang_hip_cmath.h
Original file line number Diff line number Diff line change
Expand Up @@ -464,12 +464,13 @@ class __promote : public __promote_imp<_A1, _A2, _A3> {};
#if __cplusplus >= 201103L
#define __HIP_OVERLOAD2(__retty, __fn) \
template <typename __T1, typename __T2> \
__DEVICE__ __CONSTEXPR__ typename __hip_enable_if< \
__hip::is_arithmetic<__T1>::value && __hip::is_arithmetic<__T2>::value, \
typename __hip::__promote<__T1, __T2>::type>::type \
__fn(__T1 __x, __T2 __y) { \
typedef typename __hip::__promote<__T1, __T2>::type __result_type; \
return __fn((__result_type)__x, (__result_type)__y); \
__DEVICE__ __CONSTEXPR__ \
typename __hip_enable_if<__hip::is_arithmetic<__T1>::value && \
__hip::is_arithmetic<__T2>::value, \
__retty>::type \
__fn(__T1 __x, __T2 __y) { \
typedef typename __hip::__promote<__T1, __T2>::type __arg_type; \
return __fn((__arg_type)__x, (__arg_type)__y); \
}
#else
#define __HIP_OVERLOAD2(__retty, __fn) \
Expand Down
36 changes: 18 additions & 18 deletions clang/test/Headers/__clang_hip_cmath-return_types.hip
Original file line number Diff line number Diff line change
Expand Up @@ -376,19 +376,19 @@ __device__ void test_isnormal()
__device__ void test_isgreater()
{
static_assert(is_same<decltype(isgreater((float)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isgreater((float)0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isgreater((double)0, (float)0)), double>::value, "");
static_assert(is_same<decltype(isgreater((float)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isgreater((double)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isgreater((double)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isgreater(0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isgreater(0, (double)0)), bool>::value, "");
}

__device__ void test_isgreaterequal()
{
static_assert(is_same<decltype(isgreaterequal((float)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isgreaterequal((float)0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isgreaterequal((double)0, (float)0)), double>::value, "");
static_assert(is_same<decltype(isgreaterequal((float)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isgreaterequal((double)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isgreaterequal((double)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isgreaterequal(0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isgreaterequal(0, (double)0)), bool>::value, "");
}

__device__ void test_isinf()
Expand All @@ -400,28 +400,28 @@ __device__ void test_isinf()
__device__ void test_isless()
{
static_assert(is_same<decltype(isless((float)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isless((float)0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isless((double)0, (float)0)), double>::value, "");
static_assert(is_same<decltype(isless((float)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isless((double)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isless((double)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isless(0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isless(0, (double)0)), bool>::value, "");
}

__device__ void test_islessequal()
{
static_assert(is_same<decltype(islessequal((float)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(islessequal((float)0, (double)0)), double>::value, "");
static_assert(is_same<decltype(islessequal((double)0, (float)0)), double>::value, "");
static_assert(is_same<decltype(islessequal((float)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(islessequal((double)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(islessequal((double)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(islessequal(0, (double)0)), double>::value, "");
static_assert(is_same<decltype(islessequal(0, (double)0)), bool>::value, "");
}

__device__ void test_islessgreater()
{
static_assert(is_same<decltype(islessgreater((float)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(islessgreater((float)0, (double)0)), double>::value, "");
static_assert(is_same<decltype(islessgreater((double)0, (float)0)), double>::value, "");
static_assert(is_same<decltype(islessgreater((float)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(islessgreater((double)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(islessgreater((double)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(islessgreater(0, (double)0)), double>::value, "");
static_assert(is_same<decltype(islessgreater(0, (double)0)), bool>::value, "");
}

__device__ void test_isnan()
Expand All @@ -433,10 +433,10 @@ __device__ void test_isnan()
__device__ void test_isunordered()
{
static_assert(is_same<decltype(isunordered((float)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isunordered((float)0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isunordered((double)0, (float)0)), double>::value, "");
static_assert(is_same<decltype(isunordered((float)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isunordered((double)0, (float)0)), bool>::value, "");
static_assert(is_same<decltype(isunordered((double)0, (double)0)), bool>::value, "");
static_assert(is_same<decltype(isunordered(0, (double)0)), double>::value, "");
static_assert(is_same<decltype(isunordered(0, (double)0)), bool>::value, "");
}

__device__ void test_acosh()
Expand Down