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/bug2084206.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/bug2084206.c')
| -rw-r--r-- | support/regression/tests/bug2084206.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/support/regression/tests/bug2084206.c b/support/regression/tests/bug2084206.c new file mode 100644 index 0000000..20622d4 --- /dev/null +++ b/support/regression/tests/bug2084206.c @@ -0,0 +1,48 @@ +/* + bug 2084206 +*/ + +#include <stdarg.h> +#include <testfwk.h> + +typedef struct { + void (*f) (void); + char c; + char* p; +} data_t; + +typedef void* voidp_t; +typedef void (*funp_t)(void); + +volatile data_t mydata; + +long varargs(char i, ...) +{ + va_list arg; + long ret = -1; + + va_start (arg, i); + switch (i) + { + case 1: ret = (long)va_arg(arg, voidp_t); break; + case 2: ret = (long)va_arg(arg, funp_t); break; + } + va_end (arg); + return ret; +} + +void testBug(void) +{ +#ifndef __SDCC_pdk14 // Lack of memory - see RFE # 613. +#ifndef __SDCC_pdk15 // TODO: Decide on support for casts between object and function pointers for pdk! +#ifndef __SDCC_pic16 + void* ptr = testBug; + mydata.f = testBug; + ASSERT (varargs(1, mydata.f) == (long)ptr); + ASSERT (varargs(1, mydata.f) == (long)(void*)testBug); + ASSERT (varargs(2, (funp_t)mydata.f) == (long)mydata.f); + ASSERT (varargs(2, (void (*)(void))mydata.f) == (long)mydata.f); +#endif +#endif +#endif +} |
