boundtest.c 2.8 KB

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