diff --git a/test/misc/Makefile b/test/misc/Makefile index 42fbe2c55..879ca7945 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -97,6 +97,7 @@ $(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) $(WORKDIR)/bug1075.$1.$2.prg: bug1075.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1075.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) diff --git a/test/misc/bug1075.c b/test/misc/bug1075.c index be4cd75f4..6ff5ec8e7 100644 --- a/test/misc/bug1075.c +++ b/test/misc/bug1075.c @@ -1,10 +1,31 @@ /* bug #1075 Internal compiler error */ +#include +#include +#include + long rhs; -int main(void) +int test(void) { /* the whole lhs is errorneously treated as an absolute address (integer constant) neglecting its dereference */ return *(char *)0xD77C + rhs; -} +} + +int res; + +int main(void) +{ + memset(*(char *)0xD76C, 11, 0x80); + rhs = 0x10; + *(char *)(0xD77C + rhs) = 13; + *(char *)0xD77C = 23; + *(char *)0xD78C = 42; + res = test(); + printf("res: %d\n", res); + if (res != (23 + 0x10)) { + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +}