From: mrdudz Date: Sun, 28 Jun 2015 23:57:39 +0000 (+0200) Subject: added 3 more test X-Git-Tag: V2.16~258^2~2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=72e4c10772fe7bf008ff6ed9c34d17b8935f593a;p=cc65 added 3 more test --- diff --git a/test/misc/Makefile b/test/misc/Makefile index e5fd6d2b8..db643b44c 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -52,6 +52,10 @@ $(WORKDIR)/sitest%prg: sitest.c @echo "FIXME: " $@ "currently will fail." -$(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@ # -$(SIM65) $(SIM65FLAGS) $@ +$(WORKDIR)/cc65141011%prg: cc65141011.c + @echo "FIXME: " $@ "currently will fail." + $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@ + -$(SIM65) $(SIM65FLAGS) $@ clean: -@$(call DEL,$(TESTS)) diff --git a/test/misc/cc65141011.c b/test/misc/cc65141011.c new file mode 100755 index 000000000..0ee35dc09 --- /dev/null +++ b/test/misc/cc65141011.c @@ -0,0 +1,52 @@ + +/* + !!DESCRIPTION!! equality problem + !!ORIGIN!! Testsuite + !!LICENCE!! Public Domain +*/ + +/* + different result depending on whether constant is on left or right side + + http://www.cc65.org/mailarchive/2014-10/11680.html + http://www.cc65.org/mailarchive/2014-10/11683.html +*/ + +#include +#include + +static unsigned char fails = 4; +static unsigned char bad[3], good[3]; + +int main(int n, char **args) +{ + unsigned char joy_state = 0x7e; + unsigned a, b; + + /* NOTE: somehow it only fails in the printf statement, the other stuff + below works! */ + printf("bad: %u\n", 0 == (joy_state & 1) ); + printf("good: %u\n", (joy_state & 1) == 0 ); + + sprintf(bad, "%u", 0 == (joy_state & 1) ); + sprintf(good, "%u", (joy_state & 1) == 0 ); + + printf("bad: %u\n", bad[0] - '0' ); + printf("good: %u\n", good[0] - '0' ); + + fails -= bad[0] - '0'; + fails -= good[0] - '0'; + + if (0 == (joy_state & 1)) fails--; + if ((joy_state & 1) == 0) fails--; + + printf("fails: %u\n", fails ); + + a = 0 == (joy_state & 1); + b = (joy_state & 1) == 0; + + printf("a: %u\n", a ); + printf("b: %u\n", b ); + + return fails; +} diff --git a/test/val/cc65141002.c b/test/val/cc65141002.c new file mode 100755 index 000000000..ae5cd3d5f --- /dev/null +++ b/test/val/cc65141002.c @@ -0,0 +1,45 @@ + +/* + !!DESCRIPTION!! forgetting to emit labels + !!ORIGIN!! Testsuite + !!LICENCE!! Public Domain +*/ + +/* + http://www.cc65.org/mailarchive/2014-10/11673.html + http://www.cc65.org/mailarchive/2014-10/11675.html +*/ + +#include +#include + +struct udata { + int (*u_sigvec[16])(); + int u_argn; + int u_argn1; +}; + +struct udata udata; + +#define sig (int)udata.u_argn +#define func (int (*)())udata.u_argn1 + +int _signal(void) +{ + if (func != 0) { + goto nogood; + } + udata.u_sigvec[sig] = func; + return 0; + +nogood: + return (-1); +} + +int main(int n,char **args) +{ + _signal(); + printf("it works\n"); + + return 0; +} diff --git a/test/val/cc65141022.c b/test/val/cc65141022.c new file mode 100755 index 000000000..d5aadd240 --- /dev/null +++ b/test/val/cc65141022.c @@ -0,0 +1,57 @@ + +/* + !!DESCRIPTION!! struct base address dereferencing bug + !!ORIGIN!! Testsuite + !!LICENCE!! Public Domain +*/ + +#include +#include + +struct yywork +{ + char verify, advance; +} yycrank[] = +{ + {0,0} +}; + +struct yysvf +{ + struct yywork *yystoff; +}; + +unsigned char fails = 0; + +int main(int n, char **args) +{ + struct yysvf *yystate; + struct yywork *yyt; + + yystate->yystoff = yycrank; + yyt = yystate->yystoff; + + if(yyt == yycrank) { + printf("yyt == yycrank (ok)\n"); + } else { + printf("yyt != yycrank (fail)\n"); + ++fails; + } + + if(yyt == yystate->yystoff) { + printf("yyt == yystate->yystoff (ok)\n"); + } else { + printf("yyt != yystate->yystoff (fail)\n"); + ++fails; + } + + if(yycrank == yystate->yystoff) { + printf("yycrank == yystate->yystoff (ok)\n"); + } else { + printf("yycrank != yystate->yystoff (fail)\n"); + ++fails; + } + + printf("fails: %d\n", fails); + return fails; +}