* src/pic/gen.h: Q&D solution for the bug, found by Jim Paris
[fw/sdcc] / src / regression / pointer1.c
index 435b778dadaf5b0d7775edc77ecf93b9b253f010..a0236b1a8da13f41ea5eee4bf2fbe9a9d5023428 100644 (file)
@@ -1,23 +1,23 @@
-//#include "p16c84.h"
+#include "gpsim_assert.h"
+
 // Pointer tests
 
-unsigned char success = 0;
 unsigned char failures = 0;
-unsigned char dummy = 0;
+unsigned char dummy;
 
-bit bit0 = 0;
 unsigned int aint0 = 0;
 unsigned int aint1 = 0;
 unsigned char achar0 = 0;
 unsigned char achar1 = 0;
 unsigned char *acharP = 0;
 
+char buff[10];
+
 void
-done ()
+done()
 {
-
-  dummy++;
-
+  ASSERT(MANGLE(failures) == 0);
+  PASSED();
 }
 
 void
@@ -49,6 +49,7 @@ f2 (unsigned int *uiP)
 
 }
 
+
 unsigned char *
 f3 (void)
 {
@@ -56,16 +57,80 @@ f3 (void)
   return &achar0;
 }
 
+
+void f4(unsigned char *ucP, unsigned char uc)
+{
+
+  if(!ucP) {
+    failures++;
+    return;
+  }
+
+  if(*ucP != uc)
+    failures++;
+
+}
+
+void init_array(char start_value)
+{
+  unsigned char c;
+
+  for(c=0; c<sizeof(buff); c++)
+    buff[c] = start_value++;
+
+}
+
+void check_array(char base_value)
+{
+  unsigned char c;
+
+  for(c=0; c<sizeof(buff); c++)
+    if(buff[c] != (base_value+c))
+      failures++;
+
+}
+
+void index_by_pointer(unsigned char *index, unsigned char expected_value)
+{
+/*
+  if(buff[*index] != expected_value)
+    failures++;
+*/
+}
+
+
 void
 main (void)
 {
+
+  init_array(4);
+  check_array(4);
+
+  if(buff[achar0 + 7] != 4+7)
+    failures++;
+
+  dummy = buff[achar0];
+
+  if(dummy != 4)
+    failures++;
+
+  if(dummy != (buff[achar0+1] -1)) 
+    failures++;
+
+  index_by_pointer(&dummy, 8);
+
   f1 (&achar0);
   f2 (&aint0);
 
   acharP = f3 ();
   if ((acharP == 0) || (*acharP))
     failures++;
+  achar0 = 42;
+  if(*acharP != 42)
+    failures++;
+
+  achar0 = 5;
+  f4(&achar0, achar0);
 
-  success = failures;
   done ();
 }