added repro cases from #2172 as tests

This commit is contained in:
mrdudz
2025-06-14 21:39:00 +02:00
parent 89651fd8bd
commit 1ac8a51c58
2 changed files with 107 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
// bug #2172 - Invalid code generated for switch statement
#include <stdlib.h>
#include <stdio.h>
// cc65 -o bug2172.s -Cl -Oirs -T -t c64 bug2172.c
int func(int expr)
{
switch (expr) {
int i;
case 0:
i = 17;
return i;
default:
i = 16;
return i;
}
}
int err = 0;
int main(void)
{
int i = 0;
int n = 42;
for (i = -3; i < 0; i++) {
n = func(i);
if ((i < -3) || (i >= 0)) {
goto stackerr;
}
printf("i:%d expect:16 got:%d\n", i, n);
if (n != 16) {
err++;
}
}
n = func(0);
printf("i:%d expect:17 got:%d\n", 0, n);
if (n != 17) {
err++;
}
for (i = 1; i < 4; i++) {
n = func(i);
if ((i < 1) || (i >= 4)) {
goto stackerr;
}
printf("i:%d expect:16 got:%d\n", i, n);
if (n != 16) {
err++;
}
}
return err;
stackerr:
fputs("stack messed up?\n", stdout);
return -1;
}

View File

@@ -0,0 +1,51 @@
#include <stdlib.h>
#include <stdio.h>
/* Just some arbitrary code, more fun with goto */
int func(int m)
{
long x = -42; /* sp: -4 */
switch (x) {
/* return 0; // C99 only */
int i = 42; /* sp: -6 */
L0:
--i;
default:
if (i != 0) {
long j = 13; /* sp: -10 */
goto L1;
L1:
case 0x7FFF01:
m--;
case 0x7EFF0001:
case 0x7FFF0001:
i++;
} /* sp: -6 */
case 0x7FFF00:
case 0x7FFF0000:
break;
goto L0;
{
int skipped = 42; /* sp: -8 */
case 0x7EFF00:
case 0x7EFF0000:
++skipped;
} /* sp: -6 */
} /* sp: -4 */
return m;
}
int err = 0;
int main(void)
{
int n = 42;
n = func(7);
if (n != 7) {
err++;
}
printf("n:%d\n", n);
return err;
}