From: Laubzega Date: Sat, 22 Sep 2018 05:23:21 +0000 (-0700) Subject: Add a testcase for https://github.com/cc65/cc65/pull/757 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=403783b649fe5155bb07f00fadd0829b42e8f916;p=cc65 Add a testcase for https://github.com/cc65/cc65/pull/757 --- diff --git a/test/misc/Makefile b/test/misc/Makefile index 330c9d500..ad39176bd 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -72,6 +72,11 @@ $(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF) $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out $(DIFF) $(WORKDIR)/limits.$1.out limits.ref +$(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) + $(if $(QUIET),echo misc/goto.$1.$2.prg) + $(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." diff --git a/test/misc/goto.c b/test/misc/goto.c new file mode 100644 index 000000000..bdc407f82 --- /dev/null +++ b/test/misc/goto.c @@ -0,0 +1,65 @@ +#include +#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: + ; +} diff --git a/test/misc/goto.ref b/test/misc/goto.ref new file mode 100644 index 000000000..f31fa4507 --- /dev/null +++ b/test/misc/goto.ref @@ -0,0 +1,7 @@ +goto.c(34): Warning: Goto from line 29 to label 'bad' can result in a trashed stack +goto.c(40): Warning: Goto from line 18 to label 'unsafe' can result in a trashed stack +goto.c(42): Warning: Goto from line 42 to label 'another' can result in a trashed stack +goto.c(47): Warning: Goto from line 47 to label 'bad' can result in a trashed stack +goto.c(56): Warning: Goto from line 38 to label 'finish' can result in a trashed stack +goto.c(58): Warning: `unused' is defined but never used +goto.c(65): Warning: Control reaches end of non-void function