aboutsummaryrefslogtreecommitdiff
path: root/tinycc/tests/boundtest.c
diff options
context:
space:
mode:
Diffstat (limited to 'tinycc/tests/boundtest.c')
-rw-r--r--tinycc/tests/boundtest.c309
1 files changed, 0 insertions, 309 deletions
diff --git a/tinycc/tests/boundtest.c b/tinycc/tests/boundtest.c
deleted file mode 100644
index e4b2ab1..0000000
--- a/tinycc/tests/boundtest.c
+++ /dev/null
@@ -1,309 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#define NB_ITS 1000000
-//#define NB_ITS 1
-#define TAB_SIZE 100
-
-int tab[TAB_SIZE];
-int ret_sum;
-char tab3[256];
-
-int test1(void)
-{
- int i, sum = 0;
- for(i=0;i<TAB_SIZE;i++) {
- sum += tab[i];
- }
- return sum;
-}
-
-/* error */
-int test2(void)
-{
- int i, sum = 0;
- for(i=0;i<TAB_SIZE + 1;i++) {
- sum += tab[i];
- }
- return sum;
-}
-
-/* actually, profiling test */
-int test3(void)
-{
- int sum;
- int i, it;
-
- sum = 0;
- for(it=0;it<NB_ITS;it++) {
- for(i=0;i<TAB_SIZE;i++) {
- sum += tab[i];
- }
- }
- return sum;
-}
-
-/* ok */
-int test4(void)
-{
- int i, sum = 0;
- int *tab4;
-
- tab4 = malloc(20 * sizeof(int));
- for(i=0;i<20;i++) {
- sum += tab4[i];
- }
- free(tab4);
-
- return sum;
-}
-
-/* error */
-int test5(void)
-{
- int i, sum = 0;
- int *tab4;
-
- tab4 = malloc(20 * sizeof(int));
- for(i=0;i<21;i++) {
- sum += tab4[i];
- }
- free(tab4);
-
- return sum;
-}
-
-/* error */
-int test6(void)
-{
- int i, sum = 0;
- int *tab4;
-
- tab4 = malloc(20 * sizeof(int));
- free(tab4);
- for(i=0;i<21;i++) {
- sum += tab4[i];
- }
-
- return sum;
-}
-
-/* error */
-int test7(void)
-{
- int i, sum = 0;
- int *p;
-
- for(i=0;i<TAB_SIZE + 1;i++) {
- p = &tab[i];
- if (i == TAB_SIZE)
- printf("i=%d %x\n", i, p);
- sum += *p;
- }
- return sum;
-}
-
-/* ok */
-int test8(void)
-{
- int i, sum = 0;
- int tab[10];
-
- for(i=0;i<10;i++) {
- sum += tab[i];
- }
- return sum;
-}
-
-/* error */
-int test9(void)
-{
- int i, sum = 0;
- char tab[10];
-
- for(i=0;i<11;i++) {
- sum += tab[i];
- }
- return sum;
-}
-
-/* ok */
-int test10(void)
-{
- char tab[10];
- char tab1[10];
-
- memset(tab, 0, 10);
- memcpy(tab, tab1, 10);
- memmove(tab, tab1, 10);
- return 0;
-}
-
-/* error */
-int test11(void)
-{
- char tab[10];
-
- memset(tab, 0, 11);
- return 0;
-}
-
-/* error */
-int test12(void)
-{
- void *ptr;
- ptr = malloc(10);
- free(ptr);
- free(ptr);
- return 0;
-}
-
-/* error */
-int test13(void)
-{
- char pad1 = 0;
- char tab[10];
- char pad2 = 0;
- memset(tab, 'a', sizeof(tab));
- return strlen(tab);
-}
-
-#if defined __i386__ || defined __x86_64__
-#define allocf(x)
-#else
-#undef alloca
-#define alloca(x) malloc(x)
-#define allocf(x) free(x)
-#endif
-
-int test14(void)
-{
- char *p = alloca(TAB_SIZE);
- size_t ret;
- memset(p, 'a', TAB_SIZE);
- p[TAB_SIZE-1] = 0;
- ret = strlen(p);
- allocf(p);
- return ret;
-}
-
-/* error */
-int test15(void)
-{
- char *p = alloca(TAB_SIZE-1);
- size_t ret;
- memset(p, 'a', TAB_SIZE);
- p[TAB_SIZE-1] = 0;
- ret = strlen(p);
- allocf(p);
- return ret;
-}
-
-/* ok */
-int test16()
-{
- char *demo = "This is only a test.";
- char *p;
-
- p = alloca(16);
- strcpy(p,"12345678901234");
-
- /* Test alloca embedded in a larger expression */
- printf("alloca : %s : %s\n", p, strcpy(alloca(strlen(demo)+1),demo) );
- allocf(p);
-
- return 0;
-}
-
-/* error */
-int test17()
-{
- char *demo = "This is only a test.";
- char *p;
-
- p = alloca(16);
- strcpy(p,"12345678901234");
-
- /* Test alloca embedded in a larger expression */
- printf("alloca : %s : %s\n", p, strcpy(alloca(strlen(demo)),demo) );
- allocf(p);
-
- return 0;
-}
-
-int test18(void)
-{
- int i, sum = 0, n = TAB_SIZE;
- int tab[n];
- for(i=0;i<TAB_SIZE+1;i++) {
- sum += tab[i];
- }
- return sum;
-}
-
-int (*table_test[])(void) = {
- test1,
- test2,
- test3,
- test4,
- test5,
- test6,
- test7,
- test8,
- test9,
- test10,
- test11,
- test12,
- test13,
- test14,
- test15,
- test16,
- test17,
- test18
-};
-
-int main(int argc, char **argv)
-{
- int i;
- char *cp;
- int index;
- int (*ftest)(void);
- int index_max = sizeof(table_test)/sizeof(table_test[0]);
-
- /* check bounds checking main arg */
- for (i = 0; i < argc; i++) {
- cp = argv[i];
- while (*cp) {
- cp++;
- }
- }
-
- if (argc < 2) {
- printf(
- "test TCC bound checking system\n"
- "usage: boundtest N\n"
- " 1 <= N <= %d\n", index_max);
- exit(1);
- }
-
- index = 0;
- if (argc >= 2)
- index = atoi(argv[1]) - 1;
-
- if ((index < 0) || (index >= index_max)) {
- printf("N is outside of the valid range (%d)\n", index);
- exit(2);
- }
-
- /* well, we also use bounds on this ! */
- ftest = table_test[index];
- ftest();
-
- return 0;
-}
-
-/*
- * without bound 0.77 s
- * with bounds 4.73
- */