From dc83eb15aff2eaf0cab5f3964d93846740eb7feb Mon Sep 17 00:00:00 2001 From: mrdudz Date: Fri, 14 Aug 2020 16:12:17 +0200 Subject: [PATCH] added test related to issue #1181 --- test/val/bug1181.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 test/val/bug1181.c diff --git a/test/val/bug1181.c b/test/val/bug1181.c new file mode 100644 index 000000000..4ea2d54bf --- /dev/null +++ b/test/val/bug1181.c @@ -0,0 +1,86 @@ + +/* bug #1181 - Testing struct member against NULL is broken */ + +#include +#include + +struct { + int a; +} s = { 256 }, *ps = &s; + +int res = EXIT_SUCCESS; + +void test1(void) +{ + if (ps->a) { + printf("OK\n"); + } else { + printf("ERROR: %d\n", ps->a); + res = EXIT_FAILURE; + } +} + +typedef struct _MENUITEM +{ + char *name; +} MENUITEM; + +typedef struct _MENU +{ + struct _MENUITEM *items; +} MENU; + +/* note: the behaviour changes when these strings are changed! */ +static unsigned char oi31[] = {"Browser Exec Setup"}; +static unsigned char oi36[] = {"Browser auto sort"}; +static unsigned char oi47[] = {"Browser startup"}; +static unsigned char oi49[] = {"Browser charset"}; +static unsigned char oi55[] = {"Menu color scheme"}; +static unsigned char oi63[] = {"Menu input scheme"}; +static unsigned char oi35[] = {"back"}; + +MENUITEM optionsitems_menu[] = { + {oi31}, + {oi36}, + {oi47}, + {oi49}, + {oi55}, + {oi63}, + {oi35}, + {NULL} +}; + +static MENU optionsmenu_menu = { + &optionsitems_menu[0], +}; + +unsigned char __fastcall__ menu_getnumitems(MENU *menu) +{ +static unsigned char numitems; +MENUITEM *items; + numitems = 0; + items = menu->items; + while(items->name) + { + ++numitems; + ++items; + } + return numitems; +} + +int main(void) +{ + unsigned char i = 0; + + i = menu_getnumitems(&optionsmenu_menu); + printf("numitems (expected 7): %d\n", i); + + if (i != 7) { + printf("failed\n"); + res = EXIT_FAILURE; + } + printf("passed\n"); + + test1(); + return res; +}