From 403783b649fe5155bb07f00fadd0829b42e8f916 Mon Sep 17 00:00:00 2001 From: Laubzega Date: Fri, 21 Sep 2018 22:23:21 -0700 Subject: [PATCH] Add a testcase for https://github.com/cc65/cc65/pull/757 --- test/misc/Makefile | 5 ++++ test/misc/goto.c | 65 ++++++++++++++++++++++++++++++++++++++++++++++ test/misc/goto.ref | 7 +++++ 3 files changed, 77 insertions(+) create mode 100644 test/misc/goto.c create mode 100644 test/misc/goto.ref 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 -- 2.39.5