Edmund Grimley Evans
7dddd65b46
In gen_vla_sp_restore, use X30 rather than get_reg.
2016-10-10 20:15:57 +01:00
Edmund Grimley Evans
94d8d12c26
Fix handling of case_reg in switch statement.
...
The back end functions gen_op(comparison) and gtst() might allocate
registers so case_reg should be left on the value stack while they
are called and set again afterwards.
This bug fix was first applied as ff3f9aa (20 Feb 2015), but the fix
was reverted by fc0fc6a (21 Sep 2016, "switch: collect case ranges
first, then generate code"). Here the fix is updated for the new code.
2016-10-10 20:15:20 +01:00
Edmund Grimley Evans
f5f82abc99
Insert spaces between certain tokens when tcc is invoked with -E.
...
Insert a space when it is required to prevent mistokenisation of
the output, and also in a few cases where it is not strictly
required, imitating GCC's behaviour.
2016-05-09 19:27:31 +01:00
Edmund Grimley Evans
0fbc77cac6
tests/tests2/Makefile: Make 85-asm-outside-function Intel-only.
2016-05-04 21:23:25 +01:00
Edmund Grimley Evans
a348513569
Revert 78e4ee5.
2016-05-04 20:27:39 +01:00
Edmund Grimley Evans
6015840583
Revert 3283c26 and a1c1390 in tccpp.c.
2016-05-04 20:14:39 +01:00
Edmund Grimley Evans
68ce8639bb
TODO: Add two issues.
2016-04-24 22:44:57 +01:00
Edmund Grimley Evans
f75f89fc8f
tccgen.c: In parse_btype, handle type qualifiers applied to arrays.
...
Also add some test cases in tests/tests2/39_typedef.c.
2016-01-11 07:51:58 +00:00
Edmund Grimley Evans
541b33591c
CodingStyle: Remove reference to misaligned struct CString.
...
This was fixed by 1c2dfa1 on 2015-11-21.
2016-01-06 19:09:28 +00:00
Edmund Grimley Evans
1c2dfa1f4b
Change the way struct CStrings are handled.
...
A CString used to be copied into a token string, which is an int array.
On a 64-bit architecture the pointers were misaligned, so ASan gave
lots of warnings. On a 64-bit architecture that required memory
accesses to be correctly aligned it would not work at all.
The CString is now included in CValue instead.
2015-11-26 12:40:50 +00:00
Edmund Grimley Evans
4886d2c640
TODO: Add two issues.
2015-11-26 12:31:23 +00:00
Edmund Grimley Evans
99372bb1d3
tccgen.c: Give error if statement expression found when const wanted.
...
Some test cases:
#define SE ({ switch (0) { } 0; })
// Should give error:
int x = SE;
void f(void) { static int x = SE; }
void f(void) { enum e { a = SE }; }
void f(void) { switch (0) { case SE: break; } }
// Correct:
int f(void) { return SE; }
int f(void) { return sizeof(SE); }
2015-11-26 12:28:42 +00:00
Edmund Grimley Evans
51c3465a49
tcc.h: Change order of built-in include paths: put TCC's own dir first.
...
There may be compiler-specific header files that should override
system headers. See TCC's include paths by running "tcc -vv".
2015-11-23 12:50:16 +00:00
Edmund Grimley Evans
7301b42e36
tccgen.c: Try to make sizeof(!x) work.
...
tests/tests2/27_sizeof.*: Add test.
2015-11-22 00:00:36 +00:00
Edmund Grimley Evans
737f984213
tccgen.c: Bug fix for 992cbda and 3ff77a1: set nocode_wanted.
...
tests/tests2/78_vla_label.*: Add test.
2015-11-21 23:58:58 +00:00
Edmund Grimley Evans
cfef9ac3f5
TODO: Add note on handling of floating-point values.
2015-11-21 10:35:47 +00:00
Edmund Grimley Evans
dd40d6a068
TODO: Add some issues.
2015-11-21 00:04:58 +00:00
Edmund Grimley Evans
5bd5fd488d
CodingStyle: Add notes on language and testing.
2015-11-20 23:41:01 +00:00
Edmund Grimley Evans
3ff77a1d6f
Improve constant propagation with "&&" and "||".
2015-11-20 23:33:49 +00:00
Edmund Grimley Evans
c7067aeb84
tccelf.c: On arm64, use read64le, and use uint64_t to check range.
2015-11-20 23:29:08 +00:00
Edmund Grimley Evans
4ae626451e
Bug fix for commit 553242c18a.
...
In gtst, vtop->c.i is not usually zero, but it is when compiling:
int f(void) { return 1 && 1 ? 1 : 1; }
2015-11-20 23:17:24 +00:00
Edmund Grimley Evans
992cbda8d0
tccgen.c: Recognise constant expressions with conditional operator.
...
tests/tests2/78_vla_label.c: Check that int a[1 ? 1 : 1] is not a VLA.
2015-11-20 00:24:46 +00:00
Edmund Grimley Evans
30c54c9d43
tccgen.c: In parse_btype, handle typedef types with added type qualifiers.
...
In a case like
typedef int T[1];
const T x;
we must make a copy of the typedef type so that we can add the type
qualifiers to it.
The following code used to give
error: incompatible types for redefinition of 'f'
typedef int T[1];
void f(const int [1]);
void f(const T);
2015-11-19 23:45:33 +00:00
Edmund Grimley Evans
58a34d22c9
tccgen.c: Improvements to type_to_str (only used for error messages).
...
1. Handle array types.
2. Print the type qualifiers of pointers.
2015-11-19 23:35:36 +00:00
Edmund Grimley Evans
ba99a70cd8
Trivial changes to avoid some compiler warnings.
2015-11-19 18:26:47 +00:00
Edmund Grimley Evans
553242c18a
Replace pointer casts with calls to (read|write)(16|32|64)le.
...
This stops UBSan from giving runtime misaligned address errors
and might eventually allow building on a non-little-endian host.
2015-11-19 18:21:14 +00:00
Edmund Grimley Evans
5d496b1695
tccgen.c: Avoid undefined behaviour in constant propagation.
2015-11-17 19:34:31 +00:00
Edmund Grimley Evans
569fba6db9
Merge the integer members of union CValue into "uint64_t i".
2015-11-17 19:09:35 +00:00
Edmund Grimley Evans
3712c958f4
tests/tests2/79_vla_continue.c: Fix off-by-one error.
2015-11-13 21:49:29 +00:00
Edmund Grimley Evans
c39bc9caa7
libtcc.c: Completely replace tcc_normalize_inc_dirs.
2015-11-11 21:18:01 +00:00
Edmund Grimley Evans
a7334f791d
arm64-gen.c: Avoid some cases of undefined behaviour.
...
Also make some functions more portable.
2015-11-09 23:06:05 +00:00
Edmund Grimley Evans
c52128c581
tccelf.c: Avoid two trivial instances of undefined behaviour.
2015-11-09 22:57:58 +00:00
Edmund Grimley Evans
eb00777309
tcctok.h: Put TOK_memmove in the correct places (I hope).
...
This should have been part of b051549 . Someone should test on ARM.
2015-11-05 19:37:04 +00:00
Edmund Grimley Evans
7f0b798418
tcctok.h: Revert 41408f2, which moved TOK_memmove.
2015-11-05 19:33:46 +00:00
Edmund Grimley Evans
f7dd3d49cc
lib/libtcc1.c: Replace "long" with "unsigned int" in union float_long.
2015-11-04 23:22:00 +00:00
Edmund Grimley Evans
24308fd292
tccpp.c: In TOK_GET, add comment warning about illegal cast.
...
Also, in tok_str_add2, use memcpy instead of the illegal cast.
Unfortunately, I can't see an easy way of fixing the bug.
2015-11-04 20:27:54 +00:00
Edmund Grimley Evans
20f0c179da
tccpp.c: Define and use tok_last for checking if last token is space.
2015-11-04 20:25:26 +00:00
Edmund Grimley Evans
b051549f2e
tccgen.c: Use memmove for struct assignment: dest and src may be equal.
2015-11-04 20:23:17 +00:00
Edmund Grimley Evans
8eab556ac5
tccgen.c: Fix memory leak involving asm_label.
2015-11-04 20:22:30 +00:00
Edmund Grimley Evans
9bf0e57509
tests/tcctest.c: Fix up format strings.
2015-11-04 20:20:26 +00:00
Edmund Grimley Evans
f4082851ea
Enable variable-length arrays on arm64.
...
arm64-gen.c: Implement gen_vla_sp_save, gen_vla_sp_restore, gen_vla_alloc.
tests/Makefile: Run vla_test on arm64.
2015-10-31 11:04:52 +00:00
Edmund Grimley Evans
f0b7566181
tccelf.c: Reset sym after call to build_got.
...
The call to build_got can cause symtab_section->data to be reallocated
(build_got -> add_elf_sym -> put_elf_sym -> section_ptr_add ->
section_realloc -> tcc_realloc). This is not obvious on a cursory
inspection, but fortunately Valgrind spotted it immediately.
Are there other, similar bugs that Valgrind did not detect?
2015-10-16 20:33:41 +01:00
Edmund Grimley Evans
743684fe39
tccpp.c: Avoid infinite loop on: printf '/**' | ./tcc -
2015-10-15 19:02:58 +01:00
Edmund Grimley Evans
c899659d39
tccgen.c: Remove undefined shift of negative signed value.
2015-10-15 19:02:57 +01:00
Edmund Grimley Evans
eafd7a7d3b
Correct prototype: void __clear_cache(void *, void *).
2015-10-15 19:02:54 +01:00
Edmund Grimley Evans
aa812e8745
Convert some lines from ISO-8859-1 to UTF-8.
...
perl -i -pe 'use Text::Iconv;
$c1 = Text::Iconv->new("utf-8", "utf-8");
$c2 = Text::Iconv->new("iso-8859-1", "utf-8");
if (!$c1->convert($_)) { $_ = $c2->convert($_); }' \
`find * -type f`
2015-03-11 07:30:03 +00:00
Edmund Grimley Evans
5de8b5638f
.gitignore: Add lib/arm64.
2015-03-10 22:38:26 +00:00
Edmund Grimley Evans
0e79df499a
tccgen.c: (!nocode_wanted) -> (nocode_wanted) in arm64 part.
2015-03-10 22:37:36 +00:00
Edmund Grimley Evans
d73b488401
arm64: Implement __clear_cache.
...
__clear_cache is defined in lib-arm64.c with a single call to
__arm64_clear_cache, which is the real built-in function and is
turned into inline assembler by gen_clear_cache in arm64-gen.c
2015-03-08 00:10:44 +00:00
Edmund Grimley Evans
03303628c7
tests/Makefile: Quote to avoid: /bin/sh: 1: [: !=: unexpected operator
2015-03-07 18:10:45 +00:00
Edmund Grimley Evans
d854dede03
arm64: Optimise some integer operations with a constant operand.
2015-03-07 17:42:08 +00:00
Edmund Grimley Evans
ac70e6b840
tccgen.c: Optimise 0<<x, 0>>x, -1>>x, x&0, x*0, x|-1, x%1.
...
More precisely, treat (0 << x) and so on as constant expressions, but
not if const_wanted as we do not want to allow "case (x*0):", ...
Do not optimise (0 / x) and (0 % x) here as x might be zero, though
for an architecture that does not generate an exception for division
by zero the back end might choose to optimise those.
2015-03-07 17:32:39 +00:00
Edmund Grimley Evans
9163393476
arm64-gen.c: In load(), do not sign-extend 32-bit VT_CONST.
2015-03-07 17:32:39 +00:00
Edmund Grimley Evans
238e760a29
Add __builtin_return_address.
...
Implementation is mostly shared with __builtin_frame_address.
It seems to work on arm64, i386 and x86_64. It may need to be
adapted for other targets.
2015-03-06 21:01:14 +00:00
Edmund Grimley Evans
3fb8b14806
tccelf.c: File path component is "arm64", not "ARM64".
2015-03-04 19:43:29 +00:00
Edmund Grimley Evans
1706d2254b
arm64-gen.c: Improve generation of stack offsets.
2015-03-02 20:51:03 +00:00
Edmund Grimley Evans
1d41da9590
arm64-gen.c: Rename some functions and add comments.
2015-03-02 20:45:58 +00:00
Edmund Grimley Evans
86e8dcd5e2
arm64: Improve constant generation, with tests.
2015-03-02 20:39:28 +00:00
Edmund Grimley Evans
883fd365c7
arm64-gen.c: Better explanation of relocation choice.
2015-03-01 11:31:10 +00:00
Edmund Grimley Evans
fc119f9840
73_arm64.c: Avoid taking address of return value.
2015-02-26 12:27:00 +00:00
Edmund Grimley Evans
8329facdfa
Add 73_arm64 for testing some arm64 things, mostly PCS.
2015-02-25 22:51:41 +00:00
Edmund Grimley Evans
a4d43618fb
arm64-gen.c: In gen_va_arg, handle the remaining HFA cases.
2015-02-25 22:51:41 +00:00
Edmund Grimley Evans
36bb8994dd
Relicensing TinyCC
2015-02-25 07:52:39 +00:00
Edmund Grimley Evans
97e08be344
tests/tcctest.c: Test COMPAT_TYPE(char *, signed char *).
2015-02-24 19:35:31 +00:00
Edmund Grimley Evans
40f7e11c53
tccgen.c: Make sure that gen_op always returns an rvalue.
...
Either this fix, or an alternative one, is required for arm64.
2015-02-23 22:51:10 +00:00
Edmund Grimley Evans
b14ef0e24b
Add arm64 (AArch64) as a target architecture.
2015-02-23 22:51:03 +00:00
Edmund Grimley Evans
738606dbd5
Use RELA relocations properly for R_DATA_PTR on x86_64.
...
libtcc.c: Add greloca, a generalisation of greloc that takes an addend.
tcc.h: Add greloca and put_elf_reloca.
tccelf.c: Add put_elf_reloca, a generalisation of put_elf_reloc.
tccgen.c: On x86_64, use greloca instead of greloc in init_putv.
2015-02-21 21:29:03 +00:00
Edmund Grimley Evans
86c850fc58
tcc-doc.texi: Explain VT_LLOCAL a bit better.
...
And delete the sentence about it being removed.
2015-02-20 23:29:21 +00:00
Edmund Grimley Evans
ff3f9aa6ba
Fix handling of case_reg in switch statement.
...
The back end functions gen_op(comparison) and gtst() might allocate
registers so case_reg should be left on the value stack while they
are called and set again afterwards.
2015-02-20 23:16:00 +00:00