Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. #define NB_ITS 1000000
  5. //#define NB_ITS 1
  6. #define TAB_SIZE 100
  7.  
  8. int tab[TAB_SIZE];
  9. int ret_sum;
  10. char tab3[256];
  11.  
  12. int test1(void)
  13. {
  14.     int i, sum = 0;
  15.     for(i=0;i<TAB_SIZE;i++) {
  16.         sum += tab[i];
  17.     }
  18.     return sum;
  19. }
  20.  
  21. /* error */
  22. int test2(void)
  23. {
  24.     int i, sum = 0;
  25.     for(i=0;i<TAB_SIZE + 1;i++) {
  26.         sum += tab[i];
  27.     }
  28.     return sum;
  29. }
  30.  
  31. /* actually, profiling test */
  32. int test3(void)
  33. {
  34.     int sum;
  35.     int i, it;
  36.  
  37.     sum = 0;
  38.     for(it=0;it<NB_ITS;it++) {
  39.         for(i=0;i<TAB_SIZE;i++) {
  40.             sum += tab[i];
  41.         }
  42.     }
  43.     return sum;
  44. }
  45.  
  46. /* ok */
  47. int test4(void)
  48. {
  49.     int i, sum = 0;
  50.     int *tab4;
  51.  
  52.     tab4 = malloc(20 * sizeof(int));
  53.     for(i=0;i<20;i++) {
  54.         sum += tab4[i];
  55.     }
  56.     free(tab4);
  57.  
  58.     return sum;
  59. }
  60.  
  61. /* error */
  62. int test5(void)
  63. {
  64.     int i, sum = 0;
  65.     int *tab4;
  66.  
  67.     tab4 = malloc(20 * sizeof(int));
  68.     for(i=0;i<21;i++) {
  69.         sum += tab4[i];
  70.     }
  71.     free(tab4);
  72.  
  73.     return sum;
  74. }
  75.  
  76. /* error */
  77. /* XXX: currently: bug */
  78. int test6(void)
  79. {
  80.     int i, sum = 0;
  81.     int *tab4;
  82.    
  83.     tab4 = malloc(20 * sizeof(int));
  84.     free(tab4);
  85.     for(i=0;i<21;i++) {
  86.         sum += tab4[i];
  87.     }
  88.  
  89.     return sum;
  90. }
  91.  
  92. /* error */
  93. int test7(void)
  94. {
  95.     int i, sum = 0;
  96.     int *p;
  97.  
  98.     for(i=0;i<TAB_SIZE + 1;i++) {
  99.         p = &tab[i];
  100.         if (i == TAB_SIZE)
  101.             printf("i=%d %x\n", i, p);
  102.         sum += *p;
  103.     }
  104.     return sum;
  105. }
  106.  
  107. /* ok */
  108. int test8(void)
  109. {
  110.     int i, sum = 0;
  111.     int tab[10];
  112.  
  113.     for(i=0;i<10;i++) {
  114.         sum += tab[i];
  115.     }
  116.     return sum;
  117. }
  118.  
  119. /* error */
  120. int test9(void)
  121. {
  122.     int i, sum = 0;
  123.     char tab[10];
  124.  
  125.     for(i=0;i<11;i++) {
  126.         sum += tab[i];
  127.     }
  128.     return sum;
  129. }
  130.  
  131. /* ok */
  132. int test10(void)
  133. {
  134.     char tab[10];
  135.     char tab1[10];
  136.  
  137.     memset(tab, 0, 10);
  138.     memcpy(tab, tab1, 10);
  139.     memmove(tab, tab1, 10);
  140.     return 0;
  141. }
  142.  
  143. /* error */
  144. int test11(void)
  145. {
  146.     char tab[10];
  147.  
  148.     memset(tab, 0, 11);
  149.     return 0;
  150. }
  151.  
  152. /* error */
  153. int test12(void)
  154. {
  155.     void *ptr;
  156.     ptr = malloc(10);
  157.     free(ptr);
  158.     free(ptr);
  159.     return 0;
  160. }
  161.  
  162. /* error */
  163. int test13(void)
  164. {
  165.     char pad1 = 0;
  166.     char tab[10];
  167.     char pad2 = 0;
  168.     memset(tab, 'a', sizeof(tab));
  169.     return strlen(tab);
  170. }
  171.  
  172. int (*table_test[])(void) = {
  173.     test1,
  174.     test1,
  175.     test2,
  176.     test3,
  177.     test4,
  178.     test5,
  179.     test6,
  180.     test7,
  181.     test8,
  182.     test9,
  183.     test10,
  184.     test11,
  185.     test12,
  186.     test13,
  187. };
  188.  
  189. int main(int argc, char **argv)
  190. {
  191.     int index;
  192.     int (*ftest)(void);
  193.  
  194.     if (argc < 2) {
  195.         printf("usage: boundtest n\n"
  196.                "test TCC bound checking system\n"
  197.                );
  198.         exit(1);
  199.     }
  200.  
  201.     index = 0;
  202.     if (argc >= 2)
  203.         index = atoi(argv[1]);
  204.     /* well, we also use bounds on this ! */
  205.     ftest = table_test[index];
  206.     ftest();
  207.  
  208.     return 0;
  209. }
  210.  
  211. /*
  212.  * without bound   0.77 s
  213.  * with bounds    4.73
  214.  */  
  215.