diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/bug-2820.c | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/bug-2820.c')
| -rw-r--r-- | support/regression/tests/bug-2820.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/support/regression/tests/bug-2820.c b/support/regression/tests/bug-2820.c new file mode 100644 index 0000000..2099800 --- /dev/null +++ b/support/regression/tests/bug-2820.c @@ -0,0 +1,55 @@ +/* bug-2820.c + Redundancy elimination ignored the difference between integer and floating-point arithmetic operations. + */ + +#include <testfwk.h> + +#include <stdint.h> + +typedef union +{ + int32_t i; + float f; +} intflt; + +#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // Lack of memory +void sum(int8_t tp, intflt *if1, intflt *if2) +{ + if(tp) + (*if1).f *= (*if2).f; + else + (*if1).i *= (*if2).i; +} + +void sum2(int8_t tp, intflt *if1, intflt *if2) +{ + if(tp) + (*if1).f += (*if2).f; + else + (*if1).i += (*if2).i; +} +#endif + +void testBug(void) +{ +#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15) // Lack of memory + intflt data; + + data.i = -23; + sum(0, &data, &data); + ASSERT(data.i == -23 * -23); + + data.f = -23.0f; + sum(1, &data, &data); + ASSERT(data.f == -23.0f * -23.0f); + + data.i = -23; + sum2(0, &data, &data); + ASSERT(data.i == -23 + -23); + + data.f = -23.0f; + sum2(1, &data, &data); + ASSERT(data.f == -23.0f + -23.0f); +#endif +} + |
