Fix 'fpclassify: ambiguous call' compile fail in MSVC 2022 (#2426)

Similar to #2219, we see "'fpclassify': ambiguous call" error in
test_conformance\basic\test_fpmath.cpp
due to missing constexpr at
https://github.com/KhronosGroup/OpenCL-CTS/blob/9265cbb2c274/test_conformance/basic/test_fpmath.cpp#L104
This PR fixes the issue by moving utility function isnan_fp in
testHarness.h and use it.
Note this PR doesn't modify use of isnan in many tests where only
float/double values are checked.
This commit is contained in:
Wenju He
2025-08-06 00:08:04 +08:00
committed by GitHub
parent 9ca0126c54
commit e15c6eb760
12 changed files with 94 additions and 107 deletions

View File

@@ -274,10 +274,10 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
if (skipNanInf)
{
if (overflow[j] || IsHalfInfinity(correct)
|| IsHalfNaN(correct) || IsHalfInfinity(hp0[j])
|| IsHalfNaN(hp0[j]) || IsHalfInfinity(hp1[j])
|| IsHalfNaN(hp1[j]) || IsHalfInfinity(hp2[j])
|| IsHalfNaN(hp2[j]))
|| isnan_fp(correct) || IsHalfInfinity(hp0[j])
|| isnan_fp(hp0[j]) || IsHalfInfinity(hp1[j])
|| isnan_fp(hp1[j]) || IsHalfInfinity(hp2[j])
|| isnan_fp(hp2[j]))
continue;
}
@@ -318,9 +318,9 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
// Note: no double rounding here. Reference
// functions calculate in single precision.
if (IsHalfInfinity(correct2)
|| IsHalfNaN(correct2)
|| isnan_fp(correct2)
|| IsHalfInfinity(correct3)
|| IsHalfNaN(correct3))
|| isnan_fp(correct3))
continue;
}
@@ -381,13 +381,13 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
// Note: no double rounding here. Reference
// functions calculate in single precision.
if (IsHalfInfinity(correct2)
|| IsHalfNaN(correct2)
|| isnan_fp(correct2)
|| IsHalfInfinity(correct3)
|| IsHalfNaN(correct3)
|| isnan_fp(correct3)
|| IsHalfInfinity(correct4)
|| IsHalfNaN(correct4)
|| isnan_fp(correct4)
|| IsHalfInfinity(correct5)
|| IsHalfNaN(correct5))
|| isnan_fp(correct5))
continue;
}
@@ -474,13 +474,13 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
// Note: no double rounding here. Reference
// functions calculate in single precision.
if (IsHalfInfinity(correct2)
|| IsHalfNaN(correct2)
|| isnan_fp(correct2)
|| IsHalfInfinity(correct3)
|| IsHalfNaN(correct3)
|| isnan_fp(correct3)
|| IsHalfInfinity(correct4)
|| IsHalfNaN(correct4)
|| isnan_fp(correct4)
|| IsHalfInfinity(correct5)
|| IsHalfNaN(correct5))
|| isnan_fp(correct5))
continue;
}
@@ -551,9 +551,9 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
// Note: no double rounding here. Reference
// functions calculate in single precision.
if (IsHalfInfinity(correct2)
|| IsHalfNaN(correct2)
|| isnan_fp(correct2)
|| IsHalfInfinity(correct3)
|| IsHalfNaN(correct3))
|| isnan_fp(correct3))
continue;
}
@@ -613,13 +613,13 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
// Note: no double rounding here. Reference
// functions calculate in single precision.
if (IsHalfInfinity(correct2)
|| IsHalfNaN(correct2)
|| isnan_fp(correct2)
|| IsHalfInfinity(correct3)
|| IsHalfNaN(correct3)
|| isnan_fp(correct3)
|| IsHalfInfinity(correct4)
|| IsHalfNaN(correct4)
|| isnan_fp(correct4)
|| IsHalfInfinity(correct5)
|| IsHalfNaN(correct5))
|| isnan_fp(correct5))
continue;
}
@@ -689,9 +689,9 @@ int TestFunc_Half_Half_Half_Half(const Func *f, MTdata d, bool relaxedMode)
// Note: no double rounding here. Reference
// functions calculate in single precision.
if (IsHalfInfinity(correct2)
|| IsHalfNaN(correct2)
|| isnan_fp(correct2)
|| IsHalfInfinity(correct3)
|| IsHalfNaN(correct3))
|| isnan_fp(correct3))
continue;
}