Created
[fw/sdcc] / support / regression / tests / driverstruct.c
diff --git a/support/regression/tests/driverstruct.c b/support/regression/tests/driverstruct.c
new file mode 100644 (file)
index 0000000..f6219e6
--- /dev/null
@@ -0,0 +1,45 @@
+/** Tests a few features of a driver struct - a struct with
+    many function pointers.
+*/
+#include <testfwk.h>
+
+/* Set to one to show the bug */
+#if 0
+#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));
+       int     (*dev_open)(uchar NAME(minor));
+       int     (*dev_close)(uchar NAME(minor));
+       int     (*dev_read)(uchar NAME(minor), uchar NAME(w));
+       int     (*dev_write)(uchar NAME(minor), uchar NAME(w));
+       int     (*dev_ioctl)(uchar NAME(minor), int cmd, void *data);
+} devsw_t;
+
+static int
+_init(uchar minor)
+{
+  return minor;
+}
+
+static devsw_t _sillyDriver = {
+  1,
+  _init,
+  NULL, NULL, NULL, NULL, NULL
+};
+
+int
+initProxy(void)
+{
+  return (*_sillyDriver.dev_init)(5);
+}
+