More enhancements to register optimization algorithms.
[fw/sdcc] / src / regression / pointer1.c
index 7b0cbc2ea5a11a84672fbe26cc2d270b1bece5b9..6b738ee075f53cafc8e4124367bc93293792fb10 100644 (file)
@@ -1,9 +1,9 @@
 //#include "p16c84.h"
 // Pointer tests
 
-unsigned char success=0;
-unsigned char failures=0;
-unsigned char dummy=0;
+unsigned char success = 0;
+unsigned char failures = 0;
+unsigned char dummy = 0;
 
 bit bit0 = 0;
 unsigned int aint0 = 0;
@@ -12,53 +12,123 @@ unsigned char achar0 = 0;
 unsigned char achar1 = 0;
 unsigned char *acharP = 0;
 
-void done()
+char buff[10];
+
+void
+done ()
 {
 
   dummy++;
 
 }
 
-void f1(unsigned char *ucP)
+void
+f1 (unsigned char *ucP)
 {
 
-  if(ucP==0) {
+  if (ucP == 0)
+    {
+      failures++;
+      return;
+    }
+
+  if (*ucP)
     failures++;
-    return;
-  }
+}
 
-   if(*ucP)
+void
+f2 (unsigned int *uiP)
+{
+
+  if (uiP == 0)
+    {
       failures++;
+      return;
+    }
+
+  if (*uiP)
+    failures++;
+
 }
 
-void f2(unsigned int *uiP)
+unsigned char *
+f3 (void)
 {
 
-  if(uiP==0) {
+  return &achar0;
+}
+
+void f4(unsigned char *ucP, unsigned char uc)
+{
+
+  if(!ucP) {
     failures++;
     return;
   }
 
-  if(*uiP)
+  if(*ucP != uc)
     failures++;
 
 }
 
-unsigned char *f3(void)
+void init_array(char start_value)
 {
+  unsigned char c;
+
+  for(c=0; c<sizeof(buff); c++)
+    buff[c] = start_value++;
 
-  return &achar0;
 }
 
-void main(void)
+void check_array(char base_value)
 {
-  f1(&achar0);
-  f2(&aint0);
+  unsigned char c;
 
-  acharP = f3();
-  if( (acharP == 0) || (*acharP))
+  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[5];
+  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 = 5;
+  f4(&achar0, achar0);
+
   success = failures;
-  done();
+  done ();
 }