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-2452.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-2452.c')
| -rw-r--r-- | support/regression/tests/bug-2452.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/support/regression/tests/bug-2452.c b/support/regression/tests/bug-2452.c new file mode 100644 index 0000000..4d86793 --- /dev/null +++ b/support/regression/tests/bug-2452.c @@ -0,0 +1,91 @@ +/* + bug-2452.c +*/ + +#include <stdbool.h> +#include <testfwk.h> + +typedef struct +{ + unsigned char byte[5]; +} value_t; + +static void +output_digit (unsigned char n) +{ + ASSERT(n == 9); +} + +static void +calculate_digit (value_t *value) +{ + value->byte[4] = 9; +} + +int +xprint_format (const char *format) +{ + value_t value; + bool lsd; + int i; + + unsigned char length; + + while( *format++ ) + { + unsigned char store[6]; + unsigned char *pstore = &store[5]; + + format++; + + + lsd = 1; + i = 1; + do { + value.byte[4] = 0; + + calculate_digit(&value); + + if (!lsd) + { + *pstore = (value.byte[4] << 4) | (value.byte[4] >> 4) | *pstore; + pstore--; + } + else + { + *pstore = value.byte[4]; + } + + lsd = !lsd; + } while( i-- ); + + length = 2; + + ASSERT(lsd); + + while( length-- ) + { + lsd = !lsd; + if (!lsd) + { + pstore++; + value.byte[4] = *pstore >> 4; + } + else + { + value.byte[4] = *pstore & 0x0F; + } + + output_digit( value.byte[4]); + } + } + + return 0; +} + +void +test_xprintf (void) +{ + xprint_format ("%d"); +} + |
