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/valdiag/tests/switch.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/valdiag/tests/switch.c')
| -rw-r--r-- | support/valdiag/tests/switch.c | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/support/valdiag/tests/switch.c b/support/valdiag/tests/switch.c new file mode 100644 index 0000000..b9acd42 --- /dev/null +++ b/support/valdiag/tests/switch.c @@ -0,0 +1,158 @@ + +char x; + +/* Valid switch statement */ +#ifdef TEST1 +char foo(void) +{ + switch(x) + { + char y; + + case 0: + return 0; + case 1: + return 1; + default: + y = x+1; + return y; + } +} +#endif + +/* Error, duplicate cases */ +#ifdef TEST2 +char foo(void) +{ + switch(x) + { + char y; + + case 0: /* IGNORE */ + return 0; + case 1: + return 1; + case 0: /* ERROR */ + return 0; + default: + y = x; + return y; + } +} +#endif + +/* Error, more than one default */ +#ifdef TEST3 +char foo(void) +{ + switch(x) + { + char y; + + case 0: + return 0; + case 1: + return 1; + default: /* IGNORE */ + y = x; + return y; + default: /* ERROR */ + return 2; + } +} +#endif + +/* Warn about unreachable code */ +#ifdef TEST4 +char foo(void) +{ + switch(x) + { + char y; /* IGNORE */ + x++; /* WARNING(SDCC) */ + + case 0: + return 0; + case 1: + return 1; + default: + y = x; + return x; + } +} +#endif + +/* Warn about unreachable initializer */ +#ifdef TEST5 +char foo(void) +{ + switch(x) + { + char y=1; /* WARNING(SDCC) */ + + case 0: + return 0; + case 1: + return 1; + default: + return y; /* IGNORE */ + } +} +#endif + +/* Error, missing switch */ +#ifdef TEST6 +char foo(void) +{ + { + case 0: /* ERROR */ + return 0; + case 1: /* ERROR */ + return 1; + default: /* ERROR */ + return x; + } +} +#endif + +/* Error, switch condition must be integral */ +#ifdef TEST7 +char foo(void) +{ + float f; /* IGNORE */ + f=x; + switch(f) /* ERROR */ + { + char y; /* IGNORE */ + + case 0: + return 0; + case 1: + return 1; + default: + y = x; + return x; + } + return 0; +} +#endif + +/* Error, cases must be integral */ +#ifdef TEST8 +char foo(void) +{ + switch(x) + { + char y; /* IGNORE */ + + case 0.0: /* ERROR */ + return 0; + case 1: + return 1; + default: + y = x; + return x; + } +} +#endif + |
