mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 15:29:46 +00:00
Added testcase for between-blocks gotos.
Deleted old testcase.
This commit is contained in:
parent
2ac2ffcd43
commit
4b78d40e97
@ -72,12 +72,6 @@ $(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF)
|
|||||||
$(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out
|
$(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out
|
||||||
$(DIFF) $(WORKDIR)/limits.$1.out limits.ref
|
$(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
|
# the rest are tests that fail currently for one reason or another
|
||||||
$(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR)
|
$(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR)
|
||||||
@echo "FIXME: " $$@ "currently will fail."
|
@echo "FIXME: " $$@ "currently will fail."
|
||||||
|
@ -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;
|
|
||||||
}
|
|
@ -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
35
test/ref/goto.c
Normal 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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user