]> git.sur5r.net Git - cc65/commitdiff
added 3 more test
authormrdudz <mrdudz@users.noreply.github.com>
Sun, 28 Jun 2015 23:57:39 +0000 (01:57 +0200)
committermrdudz <mrdudz@users.noreply.github.com>
Sun, 28 Jun 2015 23:57:39 +0000 (01:57 +0200)
test/misc/Makefile
test/misc/cc65141011.c [new file with mode: 0755]
test/val/cc65141002.c [new file with mode: 0755]
test/val/cc65141022.c [new file with mode: 0755]

index e5fd6d2b84e482fcc1d83452fb2f6813b27c4c8b..db643b44c2779917313aa76db457a08c92e6ad78 100644 (file)
@@ -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 (executable)
index 0000000..0ee35dc
--- /dev/null
@@ -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 <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;
+}
diff --git a/test/val/cc65141002.c b/test/val/cc65141002.c
new file mode 100755 (executable)
index 0000000..ae5cd3d
--- /dev/null
@@ -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 <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;
+}
diff --git a/test/val/cc65141022.c b/test/val/cc65141022.c
new file mode 100755 (executable)
index 0000000..d5aadd2
--- /dev/null
@@ -0,0 +1,57 @@
+
+/*
+  !!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;
+}