Skip to content

Pre-Commit tests: [HIP] Fix return type in __clang_hip_cmath.h #139891

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

Conversation

jmmartinez
Copy link
Contributor

Tests related to #139697

@jmmartinez jmmartinez requested review from arsenm and yxsamliu May 14, 2025 12:40
@jmmartinez jmmartinez self-assigned this May 14, 2025
@llvmbot llvmbot added the clang Clang issues not falling into any other category label May 14, 2025
@llvmbot
Copy link
Member

llvmbot commented May 14, 2025

@llvm/pr-subscribers-clang

Author: Juan Manuel Martinez Caamaño (jmmartinez)

Changes

Tests related to #139697


Patch is 56.11 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/139891.diff

1 Files Affected:

  • (added) clang/test/Headers/__clang_hip_cmath-return_types.hip (+1023)
diff --git a/clang/test/Headers/__clang_hip_cmath-return_types.hip b/clang/test/Headers/__clang_hip_cmath-return_types.hip
new file mode 100644
index 0000000000000..e8f14d6b51a9b
--- /dev/null
+++ b/clang/test/Headers/__clang_hip_cmath-return_types.hip
@@ -0,0 +1,1023 @@
+// RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h      \
+// RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
+// RUN:   -internal-isystem %S/Inputs/include \
+// RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
+// RUN:   -target-cpu gfx906 %s -fcuda-is-device -fsyntax-only -o -
+
+template<typename A, typename B>
+struct is_same {
+    static constexpr bool value = false;
+};
+
+template<typename A>
+struct is_same<A, A> {
+    static constexpr bool value = true;
+};
+
+__device__ void test_abs()
+{
+    static_assert(is_same<decltype(abs((float)0)), float>::value, "");
+    static_assert(is_same<decltype(abs((double)0)), double>::value, "");
+}
+
+__device__ void test_acos()
+{
+    static_assert(is_same<decltype(acos((float)0)), float>::value, "");
+    static_assert(is_same<decltype(acos((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((int)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((long)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(acos((double)0)), double>::value, "");
+    static_assert(is_same<decltype(acosf(0)), float>::value, "");
+}
+
+__device__ void test_asin()
+{
+    static_assert(is_same<decltype(asin((float)0)), float>::value, "");
+    static_assert(is_same<decltype(asin((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((int)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((long)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(asin((double)0)), double>::value, "");
+    static_assert(is_same<decltype(asinf(0)), float>::value, "");
+}
+
+__device__ void test_atan()
+{
+    static_assert(is_same<decltype(atan((float)0)), float>::value, "");
+    static_assert(is_same<decltype(atan((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((int)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan((double)0)), double>::value, "");
+    static_assert(is_same<decltype(atanf(0)), float>::value, "");
+}
+
+__device__ void test_atan2()
+{
+    static_assert(is_same<decltype(atan2((float)0, (float)0)), float>::value, "");
+    static_assert(is_same<decltype(atan2((bool)0, (float)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((unsigned short)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((float)0, (unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((double)0, (long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((int)0, (long long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((int)0, (unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((double)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2((float)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(atan2f(0,0)), float>::value, "");
+    static_assert(is_same<decltype(atan2((int)0, (int)0)), double>::value, "");
+}
+
+__device__ void test_ceil()
+{
+    static_assert(is_same<decltype(ceil((float)0)), float>::value, "");
+    static_assert(is_same<decltype(ceil((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((int)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((long)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(ceil((double)0)), double>::value, "");
+    static_assert(is_same<decltype(ceilf(0)), float>::value, "");
+}
+
+__device__ void test_cos()
+{
+    static_assert(is_same<decltype(cos((float)0)), float>::value, "");
+    static_assert(is_same<decltype(cos((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((int)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((long)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(cos((double)0)), double>::value, "");
+    static_assert(is_same<decltype(cosf(0)), float>::value, "");
+}
+
+__device__ void test_cosh()
+{
+    static_assert(is_same<decltype(cosh((float)0)), float>::value, "");
+    static_assert(is_same<decltype(cosh((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((int)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((long)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(cosh((double)0)), double>::value, "");
+    static_assert(is_same<decltype(coshf(0)), float>::value, "");
+}
+
+__device__ void test_exp()
+{
+    static_assert(is_same<decltype(exp((float)0)), float>::value, "");
+    static_assert(is_same<decltype(exp((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((int)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((long)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(exp((double)0)), double>::value, "");
+    static_assert(is_same<decltype(expf(0)), float>::value, "");
+}
+
+__device__ void test_fabs()
+{
+    static_assert(is_same<decltype(fabs((float)0)), float>::value, "");
+    static_assert(is_same<decltype(fabs((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((int)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((long)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(fabs((double)0)), double>::value, "");
+    static_assert(is_same<decltype(fabsf(0.0f)), float>::value, "");
+}
+
+__device__ void test_floor()
+{
+    static_assert(is_same<decltype(floor((float)0)), float>::value, "");
+    static_assert(is_same<decltype(floor((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((int)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((long)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(floor((double)0)), double>::value, "");
+    static_assert(is_same<decltype(floorf(0)), float>::value, "");
+}
+
+__device__ void test_fmod()
+{
+    static_assert(is_same<decltype(fmod((float)0, (float)0)), float>::value, "");
+    static_assert(is_same<decltype(fmod((bool)0, (float)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((unsigned short)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((float)0, (unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((double)0, (long)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((int)0, (long long)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((int)0, (unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((double)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(fmod((float)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(fmodf(0,0)), float>::value, "");
+    static_assert(is_same<decltype(fmod((int)0, (int)0)), double>::value, "");
+}
+
+__device__ void test_frexp()
+{
+    int ip;
+    static_assert(is_same<decltype(frexp((float)0, &ip)), float>::value, "");
+    static_assert(is_same<decltype(frexp((bool)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((unsigned short)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((int)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((unsigned int)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((long)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((unsigned long)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((long long)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((unsigned long long)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexp((double)0, &ip)), double>::value, "");
+    static_assert(is_same<decltype(frexpf(0, &ip)), float>::value, "");
+}
+
+__device__ void test_ldexp()
+{
+    int ip = 1;
+    static_assert(is_same<decltype(ldexp((float)0, ip)), float>::value, "");
+    static_assert(is_same<decltype(ldexp((bool)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((unsigned short)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((int)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((unsigned int)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((long)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((unsigned long)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((long long)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((unsigned long long)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexp((double)0, ip)), double>::value, "");
+    static_assert(is_same<decltype(ldexpf(0, ip)), float>::value, "");
+}
+
+__device__ void test_log()
+{
+    static_assert(is_same<decltype(log((float)0)), float>::value, "");
+    static_assert(is_same<decltype(log((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(log((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(log((int)0)), double>::value, "");
+    static_assert(is_same<decltype(log((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(log((long)0)), double>::value, "");
+    static_assert(is_same<decltype(log((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(log((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(log((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(log((double)0)), double>::value, "");
+    static_assert(is_same<decltype(logf(0)), float>::value, "");
+}
+
+__device__ void test_log10()
+{
+    static_assert(is_same<decltype(log10((float)0)), float>::value, "");
+    static_assert(is_same<decltype(log10((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((int)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((long)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(log10((double)0)), double>::value, "");
+    static_assert(is_same<decltype(log10f(0)), float>::value, "");
+}
+
+__device__ void test_modf()
+{
+    static_assert(is_same<decltype(modf((float)0, (float*)0)), float>::value, "");
+    static_assert(is_same<decltype(modf((double)0, (double*)0)), double>::value, "");
+    static_assert(is_same<decltype(modff(0, (float*)0)), float>::value, "");
+    double i;
+}
+
+__device__ void test_pow()
+{
+    static_assert(is_same<decltype(pow((float)0, (float)0)), float>::value, "");
+    static_assert(is_same<decltype(pow((bool)0, (float)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((unsigned short)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((float)0, (unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((double)0, (long)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((int)0, (long long)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((int)0, (unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((double)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(pow((float)0, (double)0)), double>::value, "");
+    static_assert(is_same<decltype(powf(0,0)), float>::value, "");
+    static_assert(is_same<decltype(pow((int)0, (int)0)), double>::value, "");
+}
+
+__device__ void test_sin()
+{
+    static_assert(is_same<decltype(sin((float)0)), float>::value, "");
+    static_assert(is_same<decltype(sin((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((int)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((long)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(sin((double)0)), double>::value, "");
+    static_assert(is_same<decltype(sinf(0)), float>::value, "");
+}
+
+__device__ void test_sinh()
+{
+    static_assert(is_same<decltype(sinh((float)0)), float>::value, "");
+    static_assert(is_same<decltype(sinh((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((int)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((long)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(sinh((double)0)), double>::value, "");
+    static_assert(is_same<decltype(sinhf(0)), float>::value, "");
+}
+
+__device__ void test_sqrt()
+{
+    static_assert(is_same<decltype(sqrt((float)0)), float>::value, "");
+    static_assert(is_same<decltype(sqrt((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((int)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((long)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrt((double)0)), double>::value, "");
+    static_assert(is_same<decltype(sqrtf(0)), float>::value, "");
+}
+
+__device__ void test_tan()
+{
+    static_assert(is_same<decltype(tan((float)0)), float>::value, "");
+    static_assert(is_same<decltype(tan((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((int)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((long)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(tan((double)0)), double>::value, "");
+    static_assert(is_same<decltype(tanf(0)), float>::value, "");
+}
+
+__device__ void test_tanh()
+{
+    static_assert(is_same<decltype(tanh((float)0)), float>::value, "");
+    static_assert(is_same<decltype(tanh((bool)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((unsigned short)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((int)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((unsigned int)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((long)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((unsigned long)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((long long)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((unsigned long long)0)), double>::value, "");
+    static_assert(is_same<decltype(tanh((double)0)), double>::value, "");
+    static_assert(is_same<decltype(tanhf(0)), float>::value, "");
+}
+
+__device__ void test_signbit()
+{
+    static_assert(is_same<decltype(signbit((float)0)), bool>::value, "");
+    static_assert(is_same<decltype(signbit((double)0)), bool>::value, "");
+    static_assert(is_same<decltype(signbit(0)), bool>::value, "");
+}
+
+__device__ void test_fpclassify()
+{
+    static_...
[truncated]

@jmmartinez jmmartinez merged commit 291fa64 into llvm:main May 15, 2025
13 checks passed
TIFitis pushed a commit to TIFitis/llvm-project that referenced this pull request May 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants