@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))
--- /dev/null
+
+/*
+ !!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 <stdlib.h>
+#include <stdio.h>
+
+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;
+}
--- /dev/null
+
+/*
+ !!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 <stdlib.h>
+#include <stdio.h>
+
+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;
+}
--- /dev/null
+
+/*
+ !!DESCRIPTION!! struct base address dereferencing bug
+ !!ORIGIN!! Testsuite
+ !!LICENCE!! Public Domain
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+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;
+}