diff options
author | spth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423> | 2025-08-07 19:28:52 +0000 |
---|---|---|
committer | spth <spth@4a8a32a2-be11-0410-ad9d-d568d2c75423> | 2025-08-07 19:28:52 +0000 |
commit | 74a419dc11921978d768e4596f2a3bab6916a67d (patch) | |
tree | 73eaf7f80254b0d2bd6d0c9b142b5b19e8fd40fd /support/regression/tests/bitinttofloat.c.in | |
parent | cf2b70e27de198c2665aec23526ca7cf1fb4831e (diff) |
Partially fix bug #3719.HEADgit-svn/mastergit-svn/HEADmaster
git-svn-id: http://svn.code.sourceforge.net/p/sdcc/code/trunk/sdcc@15561 4a8a32a2-be11-0410-ad9d-d568d2c75423
Diffstat (limited to 'support/regression/tests/bitinttofloat.c.in')
-rw-r--r-- | support/regression/tests/bitinttofloat.c.in | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/support/regression/tests/bitinttofloat.c.in b/support/regression/tests/bitinttofloat.c.in new file mode 100644 index 000000000..1645c5b3f --- /dev/null +++ b/support/regression/tests/bitinttofloat.c.in @@ -0,0 +1,44 @@ +/** casts between bit-precise integers and float + + width: 2, 4, 6, 7, 8, 9, 15, 16, 17, 24, 32, 33, 40, 48, 63, 64, 65 + sign: unsigned, signed +*/ + +#include <testfwk.h> + +#include <float.h> + +// clang 11 supports bit-precise types, but deviates a bit from C23. +#if __clang_major__ == 11 +#define __SDCC_BITINT_MAXWIDTH 128 +#define _BitInt _ExtInt +#endif + +#if __SDCC_BITINT_MAXWIDTH >= {width} // TODO: When we can regression-test in --std-c23 mode, use the standard macro from limits.h instead! + +typedef {sign} _BitInt({width}) bitinttype; + +float to_float(bitinttype b) +{ + return(b); +} +#endif + +void testCast (void) +{ +#if __SDCC_BITINT_MAXWIDTH >= {width} // TODO: When we can regression-test in --std-c23 mode, use the standard macro from limits.h instead! + bitinttype b; + + b = 1; + ASSERT (to_float (b) == (float)b); + b = 23; + ASSERT (to_float (b) == (float)b); +#if {width} <= FLT_MANT_DIG + b = -1; + ASSERT (to_float (b) == (float)b); + b = -23; + ASSERT (to_float (b) == (float)b); +#endif +#endif +} + |