165 lines · 3.6 KB · C
RawDownload
#include <stdio.h> /* ------------------------------------------------------- */#if defined test_backtrace_1 void f3(){    printf("* f3()\n"), fflush(stdout);    *(void**)0 = 0;}void f2(){    printf("* f2()\n"), fflush(stdout);    f3();}void f1(){    printf("* f1()\n"), fflush(stdout);    f2();}int main(int argc, char **argv){    printf("* main\n"), fflush(stdout);    f1();    printf("* exit main\n"), fflush(stdout);    return 0;} /* ------------------------------------------------------- */#elif defined test_bcheck_1 struct s { int a,b,c,d,e; };struct s s[3];struct s *ps = s;void f1(){    printf("* f1()\n"), fflush(stdout);    ps[3] = ps[2];}int main(int argc, char **argv){    printf("* main\n"), fflush(stdout);    f1();    printf("* exit main\n"), fflush(stdout);    return 0;} /* ------------------------------------------------------- */#elif defined test_tcc_backtrace_2 /* test custom backtrace and 'exit()' redirection */int tcc_backtrace(const char *fmt, ...);void exit(int); void f2(){    printf("* f2()\n");    printf("* exit f2\n"), fflush(stdout);    exit(34);}void f1(){    printf("* f1()\n"), fflush(stdout);    tcc_backtrace("Hello from %s!", "f1");    f2();}int main(int argc, char **argv){    printf("* main\n"), fflush(stdout);    f1();    printf("* exit main\n"), fflush(stdout);    return 0;} /* ------------------------------------------------------- */#elif defined test_tcc_backtrace_3 /* this test should be run despite of the exit(34) above */int main(int argc, char **argv){    printf("* main\n"), fflush(stdout);    return 1;} /* ------------------------------------------------------- */#else#include <stdlib.h>#include <string.h>char *strdup();int main(){    char pad1[10];    char a[10];    char pad2[10];    char b[10];    char pad3[10];    memset (pad1, 0, sizeof(pad1));    memset (pad2, 0, sizeof(pad2));    memset (pad3, 0, sizeof(pad3));     memset (a, 'a', 10);    a[3] = 0;    a[9] = 0;    memset (b, 'b', 10); #if defined test_bcheck_100    memcpy(&a[1],&b[0],10);#elif defined test_bcheck_101    memcpy(&a[0],&b[1],10);#elif defined test_bcheck_102    memcpy(&a[0],&a[3],4);#elif defined test_bcheck_103    memcpy(&a[3],&a[0],4);#elif defined test_bcheck_104    memcmp(&b[1],&b[0],10);#elif defined test_bcheck_105    memcmp(&b[0],&b[1],10);#elif defined test_bcheck_106    memmove(&b[1],&b[0],10);#elif defined test_bcheck_107    memmove(&b[0],&b[1],10);#elif defined test_bcheck_108    memset(&b[1],'b',10);#elif defined test_bcheck_109    strlen(&b[0]);#elif defined test_bcheck_110    strcpy(&a[7], &a[0]);#elif defined test_bcheck_111    strcpy(&a[0], &b[7]);#elif defined test_bcheck_112    strcpy(&a[0], &a[1]);#elif defined test_bcheck_113    strcpy(&a[2], &a[0]);#elif defined test_bcheck_114    strncpy(&a[7], &a[0], 10);#elif defined test_bcheck_115    strncpy(&a[0], &b[7], 10);#elif defined test_bcheck_116    strncpy(&a[0], &a[1], 10);#elif defined test_bcheck_117    strncpy(&a[2], &a[0], 10);#elif defined test_bcheck_118    strcmp(&b[2], &b[0]);#elif defined test_bcheck_119    strcmp(&b[0], &b[2]);#elif defined test_bcheck_120    strncmp(&b[5], &b[0], 10);#elif defined test_bcheck_121    strncmp(&b[0], &b[5], 10);#elif defined test_bcheck_122    strcat(&a[7], &a[0]);#elif defined test_bcheck_123    strcat(&a[0], &b[3]);#elif defined test_bcheck_124    strcat(&a[0], &a[4]);#elif defined test_bcheck_125    strcat(&a[3], &a[0]);#elif defined test_bcheck_126    strchr(&b[0], 'a');#elif defined test_bcheck_127    free(strdup(&b[0]));#endif}/* ------------------------------------------------------- */#endif