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-2807.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-2807.c')
| -rw-r--r-- | support/regression/tests/bug-2807.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/support/regression/tests/bug-2807.c b/support/regression/tests/bug-2807.c new file mode 100644 index 0000000..a2e61a8 --- /dev/null +++ b/support/regression/tests/bug-2807.c @@ -0,0 +1,73 @@ +/* bug-2807.c + Overwritten operand in code generation for division. + */ + +#include <testfwk.h> + +#include <stdint.h> + +typedef struct +{ + uint8_t interval; + uint8_t duration; +} +Buzzer_request; + +typedef struct +{ + const Buzzer_request* request; + uint8_t state; +} +Buzzer; + +int f(const char *c) +{ + static int truecount; + + if(*c == 't') + truecount++; + + ASSERT(truecount <= 1); + + return (0); +} + +void Buzzer_tick(Buzzer* const self) +{ + const Buzzer_request* const request = self->request; + + const uint8_t state = self->state + 1U; + + self->state = state; + + if(request->duration && (state < request->duration)) + { + f("stop\n"); + } + else if (request->interval) + { + if ((state % request->interval) == 0U) + { + // This if statement is always true due to overwritten request->interval. + if((state / request->interval) % 2U) + { + f("true\n"); + } + else + { + f("false\n"); + } + } + } +} + + +void testBuzzer(void) +{ + Buzzer_request request = { 1, 0 }; + Buzzer buzzer = { &request, 0 }; + + Buzzer_tick(&buzzer); + Buzzer_tick(&buzzer); +} + |
