mirror of
https://github.com/mirror/tinycc.git
synced 2025-01-01 04:20:09 +08:00
9712aff9c0
arm-gen.c: - is_hgen_float_aggr/gfunc_sret: Fix for zero sized structs arm64-gen.c: - arm64_ldrs: Fix for zero sized structs - arm64_sym: Use R_AARCH64_ABS64 instead of R_AARCH64_MOVW_UABS_G* This has same speed. See 117_gcc_test.c(tst_adr) - load: Fix for zero sized structs and add VT_CONST | VT_LVAL support - store: add VT_CONST | VT_LVAL support - arm64_gen_bl_or_b: Allow branch. See 117_gcc_test.c(tst_branch) - gen_bounds_prolog: Use R_AARCH64_ABS64 for bound checking - gen_bounds_epilog: Use R_AARCH64_ABS64 for bound checking - gfunc_call: Allow large stack - arm64_gen_opic: Do not crash on large shift riscv64-gen.c: - load: Move type_size call. (move_reg set sv.type.ref NULL for VT_STRUCT) - gfunc_call: Allow large stack - gen_opil: Fix word mode calls x86_64-gen.c: - load: Fix for zero sized structs libtcc.c: - Add some defines for gcc testsuite (only most common) tccgen.c: - parse_builtin_params: Add types for builtins - unary: Add builtins: __builtin_abort __builtin_memcpy __builtin_memcmp __builtin_memmove __builtin_memset __builtin_strlen __builtin_strcpy __builtin_strncpy __builtin_strcmp __builtin_strncmp __builtin_strcat __builtin_strchr __builtin_strdup __builtin_malloc __builtin_realloc __builtin_calloc __builtin_free __builtin_alloca - decl_initializer: Fix crash. See 60_errors_and_warnings(test_var_array) tccmacho.c: - Remove 'ret = 0' tcctok.h: - Add builtin/bound checking tokens tests/gcctestsuite.sh: - Add more counters and run execute tests tests/bug.c - Some remaining bugs in tcc (not complete) tests/tests2/60_errors_and_warnings: - Add test_var_array test tests/tests2/117_gcc_test: - New test Results of gcctestsuite.sh for all targets: linux: x86_64: 3036 test(s) ok. 328 test(s) failed. 24 test(s) exe failed. i386: 3037 test(s) ok. 327 test(s) failed. 24 test(s) exe failed. arm: 2986 test(s) ok. 362 test(s) failed. 40 test(s) exe failed. arm64: 2996 test(s) ok. 367 test(s) failed. 25 test(s) exe failed. macos: 3031 test(s) ok. 332 test(s) failed. 25 test(s) exe failed. riscv: 2948 test(s) ok. 401 test(s) failed. 39 test(s) exe failed. windows: x86_64: 3027 test(s) ok. 333 test(s) failed. 28 test(s) exe failed. i386: 3029 test(s) ok. 331 test(s) failed. 28 test(s) exe failed. linux with bounds checking: x86_64: 3030 test(s) ok. 328 test(s) failed. 30 test(s) exe failed. i386: 3028 test(s) ok. 327 test(s) failed. 33 test(s) exe failed. arm: 2997 test(s) ok. 362 test(s) failed. 29 test(s) exe failed. arm64: 2986 test(s) ok. 367 test(s) failed. 35 test(s) exe failed. macos: 3026 test(s) ok. 332 test(s) failed. 30 test(s) exe failed. riscv: 2936 test(s) ok. 409 test(s) failed. 43 test(s) exe failed. windows with bounds checking: x86_64: 3029 test(s) ok. 332 test(s) failed. 27 test(s) exe failed. i386: 3027 test(s) ok. 331 test(s) failed. 30 test(s) exe failed. all: fail for complex and vector types, nested functions and a lot of gcc defines/buitins. arm/arm64/riscv: fail for asm and alloca. riscv: fail with 'error: unimp: store(struct)'
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();
|
|
}
|