int printf(const char*, ...); #define myassert(x) \ printf("%s:%d: %s : \"%s\"\n", __FILE__,__LINE__,(x)?"ok":"error",#x) enum{ in = 0}; int main_1(){ { myassert(!in); if(sizeof(enum{in=1})) myassert(in); myassert(!in); //OOPS } { myassert(!in); switch(sizeof(enum{in=1})) { default: myassert(in); } myassert(!in); //OOPS } { myassert(!in); while(sizeof(enum{in=1})) { myassert(in); break; } myassert(!in); //OOPS } { myassert(!in); do{ myassert(!in);}while(0*sizeof(enum{in=1})); myassert(!in); //OOPS } { myassert(!in); for(sizeof(enum{in=1});;){ myassert(in); break; } myassert(!in); //OK } { myassert(!in); for(;;sizeof(enum{in=1})){ myassert(in); break; } myassert(!in); //OK } { myassert(!in); for(;sizeof(enum{in=1});){ myassert(in); break; } myassert(!in); //OK } return 0;} /* --------------------------------------------- */int main_2(){ char c = 'a'; void func1(char c); /* param 'c' must not shadow local 'c' */ func1(c); return 0;} void func1(char c){ myassert(c == 'a');} struct st { int a; }; /* --------------------------------------------- */int main_3(){ struct st func(void); struct st st = func(); /* not an 'incompatible redefinition' */ myassert(st.a == 10); return 0;} struct st func(void){ struct st st = { 10 }; return st;} /* --------------------------------------------- *//* func* 'md' must not be shadowed by param 'md' */static void f4(char *(*md)(char *md)){ (*md)("test");}static char *a4(char *a){ int strcmp(); myassert(!strcmp(a, "test")); return a;} int main_4(){ f4(a4); return 0;} /* --------------------------------------------- */int a5[3], b5[];int f5(void);int main_5(){ extern int a5[3], b5[3]; a5[2]=10, b5[2]=4; myassert(f5() == 10 + 4); return 0;}int f5(void){ return a5[2]+b5[2];}int b5[3]; /* --------------------------------------------- */static int f6(int);int i6 = 11; int main_6(){ { int i6 = 33, f6 = 44; myassert(i6 == 33 && f6 == 44); { int f6(int); extern int i6; myassert(i6 == 11 && f6(22) == 22); } myassert(i6 == 33 && f6 == 44); } myassert(i6 == 11 && f6(22) == 22); return 0;} int f6(int x){ return x;} /* --------------------------------------------- */ #if defined __TINYC__ \ ? !defined __leading_underscore \ : !(defined __APPLE__ || defined _WIN32)# define _#else# define _ "_"#endif struct xx7 { int a, b; }; void f7(){ struct xx7 { int c; } x; { extern struct xx7 { int a, b; } x __asm__(_"z7"); x.a = 12; struct xx7 y = { 0,0 }; } struct xx7 y = { 90 }; x.c = 78; printf("xx7 (1) : %d %d\n", x.c, y.c);} int main_7(){ f7(); extern struct xx7 y __asm__(_"z7"); printf("xx7 (2) : %d %d\n", y.a, y.b); return 0;} struct xx7 z7 = { 0, 34 }; /* --------------------------------------------- */int main(){ main_1(); main_2(); main_3(); main_4(); main_5(); main_6(); main_7(); return 0;}
int printf(const char*, ...);
#define myassert(x) \
printf("%s:%d: %s : \"%s\"\n", __FILE__,__LINE__,(x)?"ok":"error",#x)
enum{ in = 0};
int main_1(){
{
myassert(!in);
if(sizeof(enum{in=1})) myassert(in);
myassert(!in); //OOPS
}
{
myassert(!in);
switch(sizeof(enum{in=1})) { default: myassert(in); }
myassert(!in); //OOPS
}
{
myassert(!in);
while(sizeof(enum{in=1})) { myassert(in); break; }
myassert(!in); //OOPS
}
{
myassert(!in);
do{ myassert(!in);}while(0*sizeof(enum{in=1}));
myassert(!in); //OOPS
}
{
myassert(!in);
for(sizeof(enum{in=1});;){ myassert(in); break; }
myassert(!in); //OK
}
{
myassert(!in);
for(;;sizeof(enum{in=1})){ myassert(in); break; }
myassert(!in); //OK
}
{
myassert(!in);
for(;sizeof(enum{in=1});){ myassert(in); break; }
myassert(!in); //OK
}
return 0;
}
/* --------------------------------------------- */
int main_2()
{
char c = 'a';
void func1(char c); /* param 'c' must not shadow local 'c' */
func1(c);
return 0;
}
void func1(char c)
{
myassert(c == 'a');
}
struct st { int a; };
/* --------------------------------------------- */
int main_3()
{
struct st func(void);
struct st st = func(); /* not an 'incompatible redefinition' */
myassert(st.a == 10);
return 0;
}
struct st func(void)
{
struct st st = { 10 };
return st;
}
/* --------------------------------------------- */
/* func* 'md' must not be shadowed by param 'md' */
static void f4(char *(*md)(char *md))
{
(*md)("test");
}
static char *a4(char *a)
{
int strcmp();
myassert(!strcmp(a, "test"));
return a;
}
int main_4()
{
f4(a4);
return 0;
}
/* --------------------------------------------- */
int a5[3], b5[];
int f5(void);
int main_5()
{
extern int a5[3], b5[3];
a5[2]=10, b5[2]=4;
myassert(f5() == 10 + 4);
return 0;
}
int f5(void)
{
return a5[2]+b5[2];
}
int b5[3];
/* --------------------------------------------- */
static int f6(int);
int i6 = 11;
int main_6()
{
{
int i6 = 33, f6 = 44;
myassert(i6 == 33 && f6 == 44);
{
int f6(int);
extern int i6;
myassert(i6 == 11 && f6(22) == 22);
}
myassert(i6 == 33 && f6 == 44);
}
myassert(i6 == 11 && f6(22) == 22);
return 0;
}
int f6(int x)
{
return x;
}
/* --------------------------------------------- */
#if defined __TINYC__ \
? !defined __leading_underscore \
: !(defined __APPLE__ || defined _WIN32)
# define _
#else
# define _ "_"
#endif
struct xx7 { int a, b; };
void f7()
{
struct xx7 { int c; } x;
{
extern struct xx7 { int a, b; } x __asm__(_"z7");
x.a = 12;
struct xx7 y = { 0,0 };
}
struct xx7 y = { 90 };
x.c = 78;
printf("xx7 (1) : %d %d\n", x.c, y.c);
}
int main_7()
{
f7();
extern struct xx7 y __asm__(_"z7");
printf("xx7 (2) : %d %d\n", y.a, y.b);
return 0;
}
struct xx7 z7 = { 0, 34 };
/* --------------------------------------------- */
int main()
{
main_1();
main_2();
main_3();
main_4();
main_5();
main_6();
main_7();
return 0;
}