]> git.sur5r.net Git - cc65/commitdiff
Added comments that explain the unstable behavior of a test program. 164/head
authorGreg King <gregdk@users.sf.net>
Tue, 30 Jun 2015 13:00:28 +0000 (09:00 -0400)
committerGreg King <gregdk@users.sf.net>
Tue, 30 Jun 2015 13:00:28 +0000 (09:00 -0400)
test/misc/Makefile
test/misc/cc65141011.c

index db643b44c2779917313aa76db457a08c92e6ad78..ca487066347c47b9a918827e59c22509155b9cc8 100644 (file)
@@ -53,7 +53,7 @@ $(WORKDIR)/sitest%prg: sitest.c
        -$(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
 #      -$(SIM65) $(SIM65FLAGS) $@
 $(WORKDIR)/cc65141011%prg: cc65141011.c
-       @echo "FIXME: " $@ "currently will fail."
+       @echo "FIXME: " $@ "currently can fail."
        $(CL65) $(subst .,,$(*:.o%=-O%)) $(CC65FLAGS) $< -o $@
        -$(SIM65) $(SIM65FLAGS) $@
 
index 0ee35dc09726d355077f7c94b09d79e90749db06..26cef7099df90749ac9f6058834e2bbe50530253 100755 (executable)
@@ -1,4 +1,3 @@
-
 /*
   !!DESCRIPTION!! equality problem
   !!ORIGIN!!      Testsuite
@@ -6,32 +5,37 @@
 */
 
 /*
-    different result depending on whether constant is on left or right side
+    Different results, depending on whether constant is on left or right side.
+
+    The optimizer sometimes makes code that executes the right-side expression
+    as eight bits; but then, tests it against the left-side zero as 16 bits.
+    The high-byte is garbage; therefore, that test might, or might not, work.
+    It depends on the platform and the amount of optimization.
 
     http://www.cc65.org/mailarchive/2014-10/11680.html
+    http://www.cc65.org/mailarchive/2014-10/11682.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)
+int main(void)
 {
     unsigned char joy_state = 0x7e;
     unsigned a, b;
 
-    /* NOTE: somehow it only fails in the printf statement, the other stuff
+    /* NOTE: It fails in only the printf() statements, the other stuff
              below works! */
-    printf("bad: %u\n", 0 == (joy_state & 1) );
+    printf("bad: %u", 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("bad: %u", bad[0] - '0' );
     printf("good: %u\n", good[0] - '0' );
 
     fails -= bad[0] - '0';
@@ -40,12 +44,15 @@ int main(int n, char **args)
     if (0 == (joy_state & 1)) fails--;
     if ((joy_state & 1) == 0) fails--;
 
-    printf("fails: %u\n", fails );
+    printf("failures: %u\n", fails );
 
+    /* The above printf() returns a value with a zero high-byte.
+    ** Therefore, the next (broken) statement works (by accident).
+    */
     a = 0 == (joy_state & 1);
     b = (joy_state & 1) == 0;
 
-    printf("a: %u\n", a );
+    printf("a: %u", a );
     printf("b: %u\n", b );
 
     return fails;