mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-17 05:20:08 +08:00
76 lines
1.3 KiB
C
76 lines
1.3 KiB
C
|
#include <stdio.h>
|
||
|
#include <stdarg.h>
|
||
|
|
||
|
void tst1(void)
|
||
|
{
|
||
|
/* problem in gen_cast. Should mask unsigned types */
|
||
|
signed char c = (signed char) 0xffffffff;
|
||
|
int r = (unsigned short) c ^ (signed char) 0x99999999;
|
||
|
if (r != 0xffff0066) printf ("%x\n", r);
|
||
|
}
|
||
|
|
||
|
typedef struct{double x,y;}p;
|
||
|
|
||
|
void tst2(int n,...)
|
||
|
{
|
||
|
/* va_arg for struct double does not work on some targets */
|
||
|
int i;
|
||
|
va_list args;
|
||
|
va_start(args,n);
|
||
|
for (i = 0; i < n; i++) {
|
||
|
p v = va_arg(args,p);
|
||
|
if (v.x != 1 || v.y != 2) printf("%g %g\n", v.x, v.y);
|
||
|
}
|
||
|
va_end(args);
|
||
|
}
|
||
|
|
||
|
void tst3(void)
|
||
|
{
|
||
|
/* Should VT_SYM be checked for TOK_builtin_constant_p */
|
||
|
int r = __builtin_constant_p("c");
|
||
|
if (r == 0) printf("%d\n",r);
|
||
|
}
|
||
|
|
||
|
int compile_errors(void)
|
||
|
{
|
||
|
#if TEST == 1
|
||
|
{
|
||
|
/* Not constant */
|
||
|
static int i = (&"Foobar"[1] - &"Foobar"[0]);
|
||
|
}
|
||
|
#endif
|
||
|
#if TEST == 2
|
||
|
{
|
||
|
/* Not constant */
|
||
|
struct{int c;}v;
|
||
|
static long i=((char*)&(v.c)-(char*)&v);
|
||
|
}
|
||
|
#endif
|
||
|
#if TEST == 3
|
||
|
{
|
||
|
/* Not constant */
|
||
|
static const short ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
|
||
|
void *p = &&l1 + ar[0];
|
||
|
goto *p;
|
||
|
l1: return 1;
|
||
|
l2: return 2;
|
||
|
}
|
||
|
#endif
|
||
|
#if TEST == 4
|
||
|
{
|
||
|
/* Only integer allowed */
|
||
|
__builtin_return_address(0 + 1) != NULL;
|
||
|
}
|
||
|
#endif
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main(void)
|
||
|
{
|
||
|
p v = { 1, 2};
|
||
|
tst1();
|
||
|
tst2(1, v);
|
||
|
tst3();
|
||
|
}
|