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/driverstruct.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/driverstruct.c')
| -rw-r--r-- | support/regression/tests/driverstruct.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/support/regression/tests/driverstruct.c b/support/regression/tests/driverstruct.c new file mode 100644 index 0000000..8ed8fc8 --- /dev/null +++ b/support/regression/tests/driverstruct.c @@ -0,0 +1,51 @@ +/** Tests a few features of a driver struct - a struct with + many function pointers. +*/ +#include <testfwk.h> +#include <stddef.h> + +/* Set to one to show the bug */ +#if 1 +#define NAME(_a) _a +#else +#define NAME(_a) +#endif + +typedef unsigned char uchar; + +/* Originally from UZIX - http://uzix.sourceforge.net/ + */ + +typedef struct s_devsw { + uchar minors; /* # of minor device numbers */ + int (*dev_init)(uchar NAME(minor)) __reentrant; + int (*dev_open)(uchar NAME(minor)) __reentrant; + int (*dev_close)(uchar NAME(minor)) __reentrant; + int (*dev_read)(uchar NAME(minor), uchar NAME(w)) __reentrant; + int (*dev_write)(uchar NAME(minor), uchar NAME(w)) __reentrant; + int (*dev_ioctl)(uchar NAME(minor), int cmd, void *__data) __reentrant; +} devsw_t; + +static int +_init (uchar minor) __reentrant +{ + return minor; +} + +static devsw_t _sillyDriver = { + 1, + _init, + NULL, NULL, NULL, NULL, NULL +}; + +int +initProxy (devsw_t *pdrv) +{ + return (*pdrv->dev_init)(5); +} + +void +testDriverStruct (void) +{ + ASSERT (initProxy(&_sillyDriver) == 5); +} |
