Added testcase for between-blocks gotos.

Deleted old testcase.
This commit is contained in:
laubzega 2018-09-25 23:54:45 -07:00 committed by Oliver Schmidt
parent 2ac2ffcd43
commit 4b78d40e97
4 changed files with 35 additions and 77 deletions

View File

@ -72,12 +72,6 @@ $(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF)
$(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out
$(DIFF) $(WORKDIR)/limits.$1.out limits.ref
# here we check if the right errors are produced
$(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF)
$(if $(QUIET),echo misc/goto.$1.$2.prg)
$(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.out
$(DIFF) $(WORKDIR)/goto.$1.out goto.ref
# the rest are tests that fail currently for one reason or another
$(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR)
@echo "FIXME: " $$@ "currently will fail."

View File

@ -1,65 +0,0 @@
#include <stdio.h>
#define false 0
#define true (!false)
int main () {
int var = 3;
int quit = false;
goto finish;
while (!quit) {
var += 1;
{
if (var % 2) {
int var2 = 2;
int var3 = 4;
goto safe;
goto unsafe;
{
another:
var2 = 0x5599;
safe:
printf ("var2: %d\n", var2);
}
} else {
int var3 = 3;
int x = 4;
goto unsafe;
goto bad;
unused:
printf ("var3: %d\n", var3);
{
int var = 1;
bad:
var++;
if (var < 4)
goto bad;
goto finish;
}
unsafe:
var3 = 4;
goto another;
}
{
int var = 2;
goto bad;
}
var += 1;
if (var >= 10)
goto finish;
}
}
finish:
return var;
}
int function () {
goto end;
end:
return 0;
}

View File

@ -1,6 +0,0 @@
goto.c(34): Error: Goto from line 29 to label 'bad' can result in a trashed stack
goto.c(40): Error: Goto from line 18 to label 'unsafe' can result in a trashed stack
goto.c(42): Error: Goto from line 42 to label 'another' can result in a trashed stack
goto.c(47): Error: Goto from line 47 to label 'bad' can result in a trashed stack
goto.c(56): Error: Goto from line 38 to label 'finish' can result in a trashed stack
goto.c(58): Warning: `unused' is defined but never used

35
test/ref/goto.c Normal file
View File

@ -0,0 +1,35 @@
#include <stdio.h>
int main () {
char a[200] = "xyz";
int ctr = 0;
start:
a[ctr] = ctr + 65;
goto second;
{
char b[64] = "xxx";
first:
b[0] = ctr + 97;
goto safe;
b[0] = 'Z';
safe:
printf ("%c%c", a[0], b[0]);
if (ctr++ > 20)
goto end;
else
goto second;
}
{
char c[100] = "aaa";
second:;
c[0] = '1';
c[99] = '2';
goto first;
}
end:
a[ctr] = '\n';
printf ("\n%s\n", a);
return 0;
}