~mpu/qbe

test/fpcnv: skip of inexactly converted integers v1 PROPOSED

Nguyễn Gia Phong: 1
 test/fpcnv: skip of inexactly converted integers

 1 files changed, 10 insertions(+), 5 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~mpu/qbe/patches/49894/mbox | git am -3
Learn more about email & git

[PATCH] test/fpcnv: skip of inexactly converted integers Export this patch

In C, if a floating point cannot be represented exactly as an integer,
conversion from the former to the latter is implementation-defined.
Therefore, it can be flaky to test this against QBE-defined behavior.

This was discovered from (unsigned int) 4294967295.0f being an UB,
because (uint64_t) 4294967295.0f is 4294967296 > UINT_MAX
on amd64 when compiled by either gcc or clang.
---
 test/fpcnv.ssa | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/test/fpcnv.ssa b/test/fpcnv.ssa
index 3466ed278a75..3fe078f796fd 100644
--- a/test/fpcnv.ssa
+++ b/test/fpcnv.ssa
@@ -72,6 +72,7 @@ function l $dtol(d %f) {


# >>> driver
# #include <float.h>
# #include <limits.h>
# 
# extern float fneg(float);
@@ -113,15 +114,19 @@ function l $dtol(d %f) {
# 			return 7;
# 	}
# 	for (i=0; i<sizeof(fin)/sizeof(fin[0]); i++) {
# 		if (stol((float)fin[i]) != (unsigned long long)(float)fin[i])
# 			return 8;
# 		if (fin[i] >= 1LL << DBL_MANT_DIG)
# 			break;
# 		if (dtol(fin[i]) != (unsigned long long)fin[i])
# 			return 9;
# 			return 8;
# 		if((unsigned long long)fin[i] > UINT_MAX)
# 			continue;
# 		if (stow((float)fin[i]) != (unsigned int)(float)fin[i])
# 			return 10;
# 		if (dtow(fin[i]) != (unsigned int)fin[i])
# 			return 9;
# 		if (fin[i] >= 1LL << FLT_MANT_DIG)
# 			continue;
# 		if (stol((float)fin[i]) != (unsigned long long)(float)fin[i])
# 			return 10;
# 		if (stow((float)fin[i]) != (unsigned int)(float)fin[i])
# 			return 11;
# 	}
# 	return 0;
-- 
2.43.0